@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,320 @@
1
+ # Changelog
2
+
3
+ ## 4.2.0 (2025-10-06)
4
+
5
+ ### 🚨 BREAKING CHANGES
6
+
7
+ **Environment Detection Mejorada** - Detección explícita de entornos test, development y non-production
8
+
9
+ #### ⚠️ Breaking Change: `isDevelopment()`
10
+
11
+ `isDevelopment()` ahora retorna `false` en entorno `test` (antes retornaba `true`)
12
+
13
+ **Antes (v4.1.0)**:
14
+ ```typescript
15
+ // NODE_ENV=test
16
+ isDevelopment() // true (incluía test)
17
+ ```
18
+
19
+ **Ahora (v4.2.0)**:
20
+ ```typescript
21
+ // NODE_ENV=test
22
+ isDevelopment() // false (excluye test)
23
+ isTest() // true
24
+ isNonProduction() // true (comportamiento anterior de isDevelopment)
25
+ ```
26
+
27
+ #### Migración recomendada
28
+
29
+ Si tu código dependía de `isDevelopment()` para incluir tests, migrar a `isNonProduction()`:
30
+
31
+ ```typescript
32
+ // ❌ Antes - isDevelopment() incluía test
33
+ if (isDevelopment()) {
34
+ enableDebugMode() // Se ejecutaba en dev Y test
35
+ }
36
+
37
+ // ✅ Ahora - usar isNonProduction() para mismo comportamiento
38
+ if (isNonProduction()) {
39
+ enableDebugMode() // Se ejecuta en dev, test y undefined
40
+ }
41
+
42
+ // ✅ O específicamente por entorno
43
+ if (isDevelopment()) {
44
+ enableHotReload() // Solo development
45
+ }
46
+
47
+ if (isTest()) {
48
+ mockExternalAPIs() // Solo tests
49
+ }
50
+ ```
51
+
52
+ ### ✨ Nuevas funciones
53
+
54
+ #### `isTest()` - Detección explícita de entorno test
55
+
56
+ Detecta si la aplicación está corriendo en modo test (`NODE_ENV=test`).
57
+ Vitest y Jest establecen automáticamente esta variable.
58
+
59
+ ```typescript
60
+ import { isTest } from '@g10/ts-helpers'
61
+
62
+ if (isTest()) {
63
+ // Solo en tests
64
+ loadTestFixtures()
65
+ mockExternalAPIs()
66
+ }
67
+ ```
68
+
69
+ #### `isNonProduction()` - Detección de entornos no-producción
70
+
71
+ Retorna `true` para development, test, undefined o cualquier entorno que NO sea production.
72
+ Útil para habilitar debugging, logging o features de desarrollo en todos los entornos no-producción.
73
+
74
+ ```typescript
75
+ import { isNonProduction } from '@g10/ts-helpers'
76
+
77
+ if (isNonProduction()) {
78
+ // En dev, test y undefined
79
+ console.log('Debug mode enabled')
80
+ enableVerboseLogging()
81
+ allowSelfSignedCertificates()
82
+ }
83
+ ```
84
+
85
+ ### 📊 Matriz de comportamiento
86
+
87
+ | Función | `development` | `test` | `production` | `undefined` |
88
+ |---------|--------------|--------|--------------|-------------|
89
+ | `isDevelopment()` | ✅ true | ❌ false | ❌ false | ✅ true |
90
+ | `isTest()` | ❌ false | ✅ true | ❌ false | ❌ false |
91
+ | `isProduction()` | ❌ false | ❌ false | ✅ true | ❌ false |
92
+ | `isNonProduction()` | ✅ true | ✅ true | ❌ false | ✅ true |
93
+
94
+ ### 🧪 Testing
95
+
96
+ - ✅ **600 tests** pasando (100%)
97
+ - ✅ Nuevas suites de tests para `isTest()` e `isNonProduction()`
98
+ - ✅ Tests actualizados para `isDevelopment()` con `NODE_ENV=test` y `undefined`
99
+ - ✅ Tests adicionales para `isProduction()` cubriendo todos los casos
100
+
101
+ ### 📚 Documentación
102
+
103
+ - ✅ **JSDoc completo** para `isTest()` e `isNonProduction()` con múltiples ejemplos
104
+ - ✅ **README.md** actualizado con breaking changes y guía de migración
105
+ - ✅ **JSDOC-STATUS.md** actualizado (82+ funciones documentadas)
106
+ - ✅ **CLAUDE.md** actualizado con estado v4.2.0
107
+
108
+ ### 🎯 Justificación
109
+
110
+ Esta mejora proporciona:
111
+ - **Semántica clara**: `isDevelopment()` realmente significa "solo development"
112
+ - **Flexibilidad**: `isTest()` permite comportamiento específico en tests
113
+ - **Compatibilidad**: `isNonProduction()` mantiene el comportamiento anterior
114
+ - **Mejores prácticas**: Separación explícita entre entornos dev, test y prod
115
+
116
+ ## 4.1.0
117
+
118
+ ### Minor Changes
119
+
120
+ - caa9a3f: Nuevas funciones para manejo de configuración y variables de entorno
121
+
122
+ ## 🆕 Nuevas funciones
123
+
124
+ ### **P0 - Alta prioridad**
125
+ - **`parseEnvValue(str)`** ([environment.ts](src/environment.ts))
126
+ - Convierte strings de variables de entorno a tipos nativos (boolean,
127
+ number, array, JSON)
128
+ - Soporta: booleans ('true', 'yes', '1'), numbers, JSON, arrays separados
129
+ por comas
130
+ - Ejemplo: `parseEnvValue('true')` → `true`, `parseEnvValue('[1,2,3]')` →
131
+ `[1,2,3]`
132
+ - **`setDeepValue(obj, path, value)`** y
133
+ **`getDeepValue(obj, path, defaultValue?)`** ([objects.ts](src/objects.ts))
134
+ - Manipulación de objetos anidados con dot notation
135
+ - Reemplaza `lodash.set()` y `lodash.get()` con implementación nativa
136
+ - Ejemplo: `setDeepValue(config, 'database.host', 'localhost')`
137
+
138
+ ### **P1/P2 - Funcionalidad complementaria**
139
+ - **`matchPathPattern(path, pattern)`** ([strings.ts](src/strings.ts))
140
+ - Match de paths con wildcards (`features.*`)
141
+ - Útil para configuración, routing, permisos
142
+ - **`isValidDotNotationPath(path)`** ([validation.ts](src/validation.ts))
143
+ - Valida formato de path en dot-notation
144
+ - Detecta dots consecutivos, leading/trailing dots, caracteres inválidos
145
+ - **`envKeyToPath(envKey, prefix?)`** y **`pathToEnvKey(path, prefix?)`**
146
+ ([strings.ts](src/strings.ts))
147
+ - Conversión entre env vars y dot-notation paths
148
+ - Ejemplo: `envKeyToPath('NX_FEATURES_AUTH')` → `'features.auth'`
149
+ - Ejemplo: `pathToEnvKey('features.auth')` → `'NX_FEATURES_AUTH'`
150
+
151
+ ## ✅ Calidad
152
+ - ✅ **437 tests passing** (100% cobertura de nuevas funciones)
153
+ - ✅ **TypeScript strict mode** compatible
154
+ - ✅ **JSDoc completo** para IntelliSense
155
+ - ✅ **Tree-shaking** optimizado
156
+ - ✅ **Browser + Node.js** compatible
157
+
158
+ ## 📖 Documentación
159
+ - Ejemplos de uso completos en JSDoc
160
+ - Tests unitarios como documentación ejecutable
161
+ - Casos de uso real-world incluidos
162
+
163
+ ## 4.0.7
164
+
165
+ ### Patch Changes
166
+
167
+ - Añade función isNumericValue para validar valores numéricos o convertibles a
168
+ número
169
+ - Nueva función `g.isNumericValue()` en API plana
170
+ - Acepta números (5) y strings numéricas ("5", "12.34", "-42")
171
+ - Rechaza valores no numéricos (null, undefined, NaN, Infinity, strings no
172
+ numéricas)
173
+ - Disponible tanto en API plana como import específico
174
+ - Compatible con todos los entornos (Browser/Node.js)
175
+
176
+ ## 4.0.6
177
+
178
+ ### Patch Changes
179
+
180
+ - feat: Certificación universal multi-environment completa
181
+ - ✅ CERTIFICACIÓN UNIVERSAL: Library completamente compatible con Browser +
182
+ Node.js + Worker environments
183
+ - 🏗️ Multi-environment builds: Universal (65.5KB CJS, 6.7KB ESM), Node.js
184
+ (97.9KB CJS, 7.5KB ESM), Browser (7.4KB ESM)
185
+ - 🔒 Environment guards: Funciones crypto con detección automática y fallbacks
186
+ seguros
187
+ - 📦 Exports condicionales: Resolución automática según entorno de ejecución
188
+ - 🧪 Testing completo: 100% compatibilidad verificada en todos los bundlers y
189
+ entornos
190
+ - ⚡ ESM compatibility: Fixes para iso-datestring-validator y lodash imports
191
+ - 🎯 Production ready: Librería universal certificada lista para uso en
192
+ cualquier proyecto JavaScript/TypeScript
193
+
194
+ ## 4.0.5
195
+
196
+ ### Patch Changes
197
+
198
+ - Deprecar detectFormatFromFilename en favor de detectFileExtension para mayor
199
+ claridad de API
200
+
201
+ ## 4.0.1
202
+
203
+ ### Patch Changes
204
+
205
+ - fix: Corregir extensión de archivos de tipos de .d.mts a .d.ts
206
+
207
+ Solucionado problema en la configuración de tsup que generaba archivos de
208
+ tipos con extensión .d.mts en lugar de .d.ts, causando errores de importación
209
+ de tipos en TypeScript.
210
+
211
+ ## 4.0.0
212
+
213
+ ### Major Changes
214
+
215
+ - BREAKING CHANGE: Arquitectura v4.0.0 - API plana revolucionaria
216
+ - API PLANA: Acceso directo g.validateNIF() vs
217
+ g.validation.validators.validateNIF()
218
+ - BREAKING: Eliminada estructura anidada técnica (src/lib/core/,
219
+ src/lib/primitives/)
220
+ - NUEVA ARQUITECTURA: 8 archivos consolidados por dominio funcional
221
+ - OPTIMIZACIÓN: Build 70-90% más rápido con tsup vs TypeScript
222
+ - DEPENDENCIAS: 31% menos deps (12→10), eliminadas re-exportaciones
223
+ - BUNDLE: 69% reducción (603KB→185KB) con tree-shaking preservado
224
+ - TESTS: 270 tests completamente refactorizados y optimizados
225
+ - TOOLING: Migración completa pnpm + changeset + vitest
226
+ - PERFORMANCE: Watch mode hasta 10x más rápido en desarrollo
227
+
228
+ Migración desde v3.x: Ver USAGE-GUIDE.md para ejemplos de API plana.
229
+
230
+ ## 3.2.5
231
+
232
+ ### Patch Changes
233
+
234
+ - Corrección de errores en tests
235
+ - Strings: Corregidas funciones toCamelCase, toKebabCase y countOccurrences
236
+ - Validation: Valores de test NIE/CIF corregidos y URL validation para
237
+ localhost
238
+ - Math: NPV calculation corregido con valor esperado matemáticamente correcto
239
+ - Data: Configuración de mocks mejorada para importTxt
240
+ - Objects: hasSameType y getShallowProperties funcionando correctamente
241
+ - Environment: Detección mejorada para tests con global.window/document
242
+ - Errors: TsHelpersError y DataError con parámetros corregidos
243
+ - Number: roundToDecimals manejo correcto de números negativos
244
+
245
+ 270/270 tests pasando correctamente.
246
+
247
+ ## [3.2.4] - 2025-01-15
248
+
249
+ ### 🚀 BREAKING CHANGES
250
+
251
+ #### API Simplificada
252
+
253
+ - **API Plana**: Todas las funciones ahora disponibles en un solo nivel
254
+ - ✅ `g.validateNIF()` (vs ❌ `g.validation.validators.validateNIF()`)
255
+ - ✅ `g.generateSpanishNIF()` (vs ❌
256
+ `g.validation.generators.generateSpanishNIF()`)
257
+ - ✅ `g.toCamelCase()` (vs ❌ `g.primitives.string.toCamelCase()`)
258
+ - ✅ `g.sleep()` (vs ❌ `g.core.async.sleep()`)
259
+
260
+ #### Dependencias Eliminadas
261
+
262
+ - **Removidas re-exportaciones**: Ya no se incluyen `lodash`, `axios`, `dayjs`,
263
+ `numeral`, `qs`, `ms`
264
+ - **Implementaciones nativas**: Reemplazadas dependencias externas con código
265
+ nativo
266
+ - **31% menos dependencias**: De 12 → 10 dependencias runtime
267
+
268
+ #### Arquitectura Consolidada
269
+
270
+ - **Estructura simplificada**: 8 archivos consolidados vs 25+ archivos modulares
271
+ - **Eliminados**: `src/lib/core/`, `src/lib/primitives/`, `src/lib/specialized/`
272
+ - **Nuevos módulos**: `src/validation.ts`, `src/strings.ts`, `src/objects.ts`,
273
+ etc.
274
+
275
+ ### ⚡ Performance
276
+
277
+ #### Build System Moderno
278
+
279
+ - **tsup vs TypeScript Compiler**: 70-90% más rápido (~40ms vs ~45s)
280
+ - **Configuración unificada**: 1 archivo `tsup.config.ts` vs 4 configs
281
+ TypeScript
282
+ - **Tree-shaking optimizado**: Automático en todos los formatos
283
+
284
+ #### Bundle Optimization
285
+
286
+ - **69% reducción tamaño**: De 603KB → 185KB
287
+ - **Eliminación código muerto**: Implementaciones nativas más eficientes
288
+ - **Formatos optimizados**: CJS, ESM, DTS en paralelo
289
+
290
+ ### 🔧 Migración a pnpm
291
+
292
+ - **Package manager moderno**: npm → pnpm para mejor resolución dependencias
293
+ - **Lockfile eficiente**: `pnpm-lock.yaml` vs `package-lock.json`
294
+ - **Engine constraints**: Node.js >=18.0.0, pnpm >=8.0.0
295
+
296
+ ### 🧹 Testing Eliminado
297
+
298
+ - **Jest removido**: Eliminadas todas las dependencias y configuraciones de
299
+ testing
300
+ - **Scripts simplificados**: `quality` script sin tests
301
+ - **Enfoque producción**: Librería lista para uso sin overhead de testing
302
+
303
+ ### 📦 Exports Actualizados
304
+
305
+ - **Eliminados legacy exports**: `./core`, `./primitives`, `./specialized`
306
+ - **Mantenidos específicos**: `./validation`, `./strings`, `./objects`,
307
+ `./dates`, `./math`, `./async`, `./data`
308
+ - **Tree-shaking preservado**: Importaciones específicas funcionando
309
+
310
+ ### 📝 Documentación
311
+
312
+ - **README.md actualizado**: Nueva API, ejemplos, migración
313
+ - **USAGE-GUIDE.md actualizado**: Guía completa con nuevos patrones
314
+ - **CLAUDE.md actualizado**: Estado actual y comandos de desarrollo
315
+
316
+ ---
317
+
318
+ **Migración requerida**: Esta versión incluye cambios que rompen compatibilidad.
319
+ Consulta la [guía de migración](README.md#migración-desde-v2x) para actualizar
320
+ tu código.
package/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # @gzl10/ts-helpers
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@gzl10/ts-helpers.svg)](https://www.npmjs.com/package/@gzl10/ts-helpers)
4
+ [![Pipeline Status](https://gitlab.gzl10.com/oss/ts-helpers/badges/main/pipeline.svg)](https://gitlab.gzl10.com/oss/ts-helpers/-/pipelines)
5
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
6
+
7
+ **Librería universal de utilidades TypeScript certificada para todos los
8
+ entornos JavaScript modernos.**
9
+
10
+ 🚀 **v4.1.0** - NUEVAS FUNCIONES: Manejo avanzado de configuración, parsing de
11
+ env vars y manipulación de objetos anidados.
12
+
13
+ ## 🌍 CERTIFICACIÓN UNIVERSAL v4.0.6
14
+
15
+ **@gzl10/ts-helpers** está **oficialmente certificada** como librería universal
16
+ compatible con **todos los entornos JavaScript modernos**:
17
+
18
+ ### 🎯 Compatibilidad Total
19
+
20
+ - ✅ **Navegadores modernos** (Chrome, Firefox, Safari, Edge)
21
+ - ✅ **Node.js** (v18+) con funcionalidades completas
22
+ - ✅ **Web Workers** y **Service Workers**
23
+ - ✅ **Bundlers** (Webpack, Vite, Rollup, Parcel)
24
+ - ✅ **Frameworks** (React, Vue, Angular, Svelte)
25
+
26
+ ### 🏗️ Builds Multi-Environment
27
+
28
+ - **Universal Build**: 65.5KB CJS, 6.7KB ESM (crypto-free, browser-safe)
29
+ - **Node.js Build**: 97.9KB CJS, 7.5KB ESM (crypto completo + operaciones de
30
+ archivo)
31
+ - **Browser Build**: 7.4KB ESM (Web Crypto API + fallbacks seguros)
32
+
33
+ ### 🔒 Environment Guards
34
+
35
+ - Detección automática de entorno (Node.js/Browser/Worker)
36
+ - Fallbacks seguros para APIs no disponibles
37
+ - Exports condicionales automáticos según entorno
38
+
39
+ ## ✨ Características v4.1.0
40
+
41
+ ### 🆕 Novedades v4.1.0
42
+
43
+ - **⚙️ Configuración Avanzada**: Parsing de env vars, acceso a objetos anidados
44
+ con dot notation
45
+ - **🔍 Path Matching**: Wildcards para configuración, routing y permisos
46
+ (`features.*`)
47
+ - **🔄 Conversión Env Vars**: Transformación bidireccional env keys ↔ dot
48
+ notation paths
49
+ - **✅ Validación Paths**: Validación robusta de paths en dot notation
50
+
51
+ ### v4.0.x Foundation
52
+
53
+ - **🎯 API Plana Revolucionaria**: Acceso directo (`g.validateNIF()` vs
54
+ `g.validation.validators.validateNIF()`)
55
+ - **⚡ Performance Extrema**: Build 70-90% más rápido (~40ms vs ~45s), bundle
56
+ 69% menor (603KB→185KB)
57
+ - **🌲 Tree-shaking Optimizado**: Importaciones específicas por módulo
58
+ preservadas
59
+ - **📦 Arquitectura Consolidada**: 15 módulos exportados por dominio
60
+ - **🔧 Tooling Moderno**: pnpm + changeset + vitest + tsup
61
+ - **🌐 Environment Detection**: Detección avanzada Node.js/Browser con soporte
62
+ proxy
63
+ - **🇪🇸 Validación Española**: 150+ funciones - NIF, NIE, CIF, teléfonos, IBAN
64
+ - **📊 Manejo de Datos**: CSV, JSON, Tree con detección automática de formato
65
+ - **📁 Detección Universal**: 80+ formatos con categorización inteligente
66
+ - **✅ Testing Compatible**: Exports optimizados para Vitest y bundlers modernos
67
+ - **📚 Documentación JSDoc 100%**: 80+ funciones con ejemplos profesionales y
68
+ casos de uso reales
69
+
70
+ ## Instalación
71
+
72
+ ```bash
73
+ # Con pnpm (recomendado)
74
+ pnpm add @gzl10/ts-helpers
75
+
76
+ # Con npm
77
+ npm install @gzl10/ts-helpers
78
+ ```
79
+
80
+ ## Uso
81
+
82
+ ### API Plana v4.0.0 (Recomendado)
83
+
84
+ ```typescript
85
+ import g from '@gzl10/ts-helpers'
86
+
87
+ // 🚀 API completamente plana - sin anidación
88
+ g.validateNIF('12345678Z') // ✅ Validación española
89
+ g.generateSpanishNIF() // ✅ Generadores
90
+ g.toCamelCase('hello-world') // ✅ String manipulation
91
+ g.calculateNPV([-1000, 300, 400]) // ✅ Matemáticas financieras
92
+ g.sleep(1000) // ✅ Operaciones async
93
+ g.exportData(data, 'file.csv') // ✅ Import/export datos
94
+ g.deepEqual(obj1, obj2) // ✅ Comparación objetos
95
+ g.formatNow('DD/MM/YYYY') // ✅ Fechas con dayjs
96
+
97
+ // 🆕 v4.1.0 - Configuración y env vars
98
+ g.parseEnvValue('true') // true (boolean)
99
+ g.parseEnvValue('[1,2,3]') // [1,2,3] (array)
100
+ g.setDeepValue(config, 'database.host', 'localhost')
101
+ g.getDeepValue(config, 'database.port', 5432)
102
+ g.matchPathPattern('features.auth', 'features.*') // true
103
+ g.isValidDotNotationPath('db.host') // true
104
+ g.envKeyToPath('NX_FEATURES_AUTH') // 'features.auth'
105
+ g.pathToEnvKey('features.auth') // 'NX_FEATURES_AUTH'
106
+
107
+ // 🆕 Detección de entorno mejorada (v4.2.0)
108
+ g.isDevelopment() // true solo en development (excluye test)
109
+ g.isTest() // true en tests (Vitest/Jest)
110
+ g.isProduction() // true en producción
111
+ g.isNonProduction() // true en dev, test, undefined
112
+ g.detectProtocol(req) // 'https' con soporte proxy
113
+ g.isLocalhost('localhost') // true
114
+ console.log(g.isNode) // true en Node.js
115
+
116
+ // Detección universal de formatos (80+ tipos)
117
+ g.detectFileExtension('report.xlsx') // 'xlsx'
118
+ g.detectUniversalFormat('presentation.pptx')
119
+ // { extension: 'pptx', category: 'presentation', mimeType: '...', isText: false }
120
+ ```
121
+
122
+ ### Importaciones Específicas (Tree-shaking)
123
+
124
+ ```typescript
125
+ // 🌲 Para bundles mínimos - importa solo lo que necesitas
126
+ import { validateNIF, generateSpanishNIF } from '@gzl10/ts-helpers/validation'
127
+ import { exportData, importData } from '@gzl10/ts-helpers/data'
128
+ import { parseEnvValue } from '@gzl10/ts-helpers/environment'
129
+ import { setDeepValue, getDeepValue } from '@gzl10/ts-helpers/objects'
130
+ import {
131
+ matchPathPattern,
132
+ envKeyToPath,
133
+ pathToEnvKey,
134
+ } from '@gzl10/ts-helpers/strings'
135
+ import { isValidDotNotationPath } from '@gzl10/ts-helpers/validation'
136
+ import { toCamelCase, sanitizeString } from '@gzl10/ts-helpers/strings'
137
+ import { sleep, runBatch } from '@gzl10/ts-helpers/async'
138
+ import { calculateNPV, calculateIRR } from '@gzl10/ts-helpers/math'
139
+ import { formatNow, addDays } from '@gzl10/ts-helpers/dates'
140
+ import { deepEqual, updateArrayElementsBy } from '@gzl10/ts-helpers/objects'
141
+ import {
142
+ isDevelopment,
143
+ isTest,
144
+ isProduction,
145
+ isNonProduction,
146
+ detectProtocol,
147
+ } from '@gzl10/ts-helpers/environment'
148
+ import {
149
+ detectFileExtension,
150
+ detectUniversalFormat,
151
+ } from '@gzl10/ts-helpers/data'
152
+ ```
153
+
154
+ ## 🔄 Migración
155
+
156
+ ### 🆕 v4.2.0 - Detección de entorno mejorada
157
+
158
+ **⚠️ BREAKING CHANGE**: `isDevelopment()` ahora retorna `false` en entorno
159
+ `test`
160
+
161
+ ```typescript
162
+ // ❌ Antes (v4.1.0)
163
+ if (isDevelopment()) {
164
+ // Se ejecutaba en dev Y test
165
+ enableDebugMode()
166
+ }
167
+
168
+ // ✅ Ahora (v4.2.0) - Opciones según necesidad
169
+ if (isDevelopment()) {
170
+ // Solo en development (excluye test)
171
+ enableHotReload()
172
+ }
173
+
174
+ if (isTest()) {
175
+ // Solo en tests
176
+ mockExternalAPIs()
177
+ }
178
+
179
+ if (isNonProduction()) {
180
+ // En dev, test y undefined (comportamiento anterior de isDevelopment)
181
+ enableDebugMode()
182
+ }
183
+ ```
184
+
185
+ ### 🔄 Migración desde v3.x
186
+
187
+ **BREAKING CHANGES v4.0.0**
188
+
189
+ ```typescript
190
+ // ❌ v3.x - API anidada redundante
191
+ g.validation.validators.validateNIF('12345678Z')
192
+ g.primitives.string.toCamelCase('hello-world')
193
+ g.core.async.sleep(1000)
194
+
195
+ // ✅ v4.0.0 - API plana directa
196
+ g.validateNIF('12345678Z')
197
+ g.toCamelCase('hello-world')
198
+ g.sleep(1000)
199
+ ```
200
+
201
+ **Dependencias Eliminadas**
202
+
203
+ Las re-exportaciones fueron eliminadas. Instala por separado si las necesitas:
204
+
205
+ ```bash
206
+ npm install lodash axios dayjs numeral qs ms
207
+ ```
208
+
209
+ ## 📚 Documentación
210
+
211
+ - **[USAGE-GUIDE.md](USAGE-GUIDE.md)** - 📖 Guía técnica completa con 150+
212
+ funciones
213
+ - **[CHANGELOG.md](CHANGELOG.md)** - 📝 Historial de cambios detallado
214
+ - **[GitLab Issues](https://gitlab.gzl10.com/oss/ts-helpers/-/issues)** - 🐛
215
+ Reportar bugs
216
+
217
+ ## 🛠️ Desarrollo
218
+
219
+ ```bash
220
+ pnpm install # Instalar dependencias
221
+ pnpm run build # Build (~40ms)
222
+ pnpm test # 600+ tests
223
+ pnpm run quality # lint + format + build
224
+ pnpm release:prepare # Changeset
225
+ ```
226
+
227
+ ## ☕ Support
228
+
229
+ <a href="https://www.buymeacoffee.com/gzl10g" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
230
+
231
+ ## 📄 Licencia
232
+
233
+ MIT © [Gonzalo Díez](mailto:gonzalo@gzl10.com)