@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,216 @@
1
+ /**
2
+ * File and security validators
3
+ *
4
+ * This module provides validation functions for file operations and content security.
5
+ * Functions implement basic security checks to prevent common attack vectors:
6
+ * - Path traversal attacks (../, ..\)
7
+ * - XSS injection (script tags, javascript: URLs)
8
+ * - File size limits
9
+ *
10
+ * ⚠️ WARNING: These are basic validations. For production systems, consider:
11
+ * - Additional OS-specific path validation
12
+ * - Symbolic link resolution checking
13
+ * - Comprehensive XSS prevention libraries (e.g., DOMPurify)
14
+ * - Content-Type validation
15
+ * - Virus scanning for uploaded files
16
+ */
17
+ /**
18
+ * Validates file path for security vulnerabilities
19
+ *
20
+ * Protects against common path traversal attacks by checking for:
21
+ * - Parent directory references (../, ..\)
22
+ * - Mixed path separators (//\, \\)
23
+ * - Excessive path length (>1000 chars)
24
+ * - Empty or null paths
25
+ *
26
+ * ⚠️ SECURITY NOTE: This is basic validation. For production use, consider:
27
+ * - Validating against an allowed directory whitelist
28
+ * - Resolving symbolic links
29
+ * - OS-specific path rules (Windows vs Unix)
30
+ * - Canonicalization before validation
31
+ *
32
+ * @param filePath - File path string to validate
33
+ * @returns True if path appears safe, false if potentially dangerous
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // Safe paths - Allowed
38
+ * isValidFilePath('./data/users.json') // true
39
+ * isValidFilePath('data/users.json') // true
40
+ * isValidFilePath('/absolute/path/file.txt') // true
41
+ * isValidFilePath('C:\\Users\\data\\file.txt') // true
42
+ *
43
+ * // Dangerous paths - Path traversal attacks
44
+ * isValidFilePath('../../../etc/passwd') // false
45
+ * isValidFilePath('data/../../../etc/passwd') // false
46
+ * isValidFilePath('..\\..\\..\\windows\\system32\\config') // false
47
+ * isValidFilePath('data//\\..//config') // false
48
+ *
49
+ * // Invalid paths - Malformed
50
+ * isValidFilePath('') // false
51
+ * isValidFilePath(null as any) // false
52
+ * isValidFilePath(undefined as any) // false
53
+ * isValidFilePath('x'.repeat(1001)) // false (too long)
54
+ *
55
+ * // Real-world usage in file operations
56
+ * async function readUserFile(userPath: string) {
57
+ * if (!isValidFilePath(userPath)) {
58
+ * throw new Error('Invalid or unsafe file path detected')
59
+ * }
60
+ *
61
+ * // Additional check: ensure path is within allowed directory
62
+ * const allowedDir = '/var/app/uploads'
63
+ * const fullPath = path.join(allowedDir, userPath)
64
+ *
65
+ * return fs.readFile(fullPath, 'utf-8')
66
+ * }
67
+ * ```
68
+ *
69
+ * @see {@link isValidTextContent} for content security validation
70
+ * @see {@link isValidFileSize} for file size validation
71
+ */
72
+ declare function isValidFilePath(filePath: string): boolean;
73
+ /**
74
+ * Validates file size against a maximum limit
75
+ *
76
+ * Checks if a file size is valid (non-negative) and within acceptable limits.
77
+ * Used to prevent:
78
+ * - Denial of Service (DoS) attacks via large file uploads
79
+ * - Disk space exhaustion
80
+ * - Memory overflow during file processing
81
+ *
82
+ * @param size - File size in bytes to validate
83
+ * @param maxSize - Maximum allowed size in bytes
84
+ * @returns True if size is valid and within limit, false otherwise
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * // Common size limits
89
+ * const KB = 1024
90
+ * const MB = 1024 * KB
91
+ * const GB = 1024 * MB
92
+ *
93
+ * // Image upload validation (5 MB limit)
94
+ * const imageSize = 4 * MB
95
+ * isValidFileSize(imageSize, 5 * MB) // true
96
+ *
97
+ * // Document upload validation (10 MB limit)
98
+ * const docSize = 12 * MB
99
+ * isValidFileSize(docSize, 10 * MB) // false (exceeds limit)
100
+ *
101
+ * // Video upload validation (1 GB limit)
102
+ * const videoSize = 500 * MB
103
+ * isValidFileSize(videoSize, 1 * GB) // true
104
+ *
105
+ * // Invalid sizes
106
+ * isValidFileSize(-100, 1 * MB) // false (negative size)
107
+ * isValidFileSize(NaN, 1 * MB) // false (invalid number)
108
+ * isValidFileSize('1000' as any, 1 * MB) // false (not a number)
109
+ *
110
+ * // Real-world usage in file upload handler
111
+ * app.post('/upload', (req, res) => {
112
+ * const file = req.files.document
113
+ * const maxSize = 10 * 1024 * 1024 // 10 MB
114
+ *
115
+ * if (!isValidFileSize(file.size, maxSize)) {
116
+ * return res.status(413).json({
117
+ * error: 'File too large',
118
+ * maxSize: '10 MB',
119
+ * received: `${(file.size / (1024 * 1024)).toFixed(2)} MB`
120
+ * })
121
+ * }
122
+ *
123
+ * // Process file...
124
+ * })
125
+ * ```
126
+ *
127
+ * @see {@link isValidFilePath} for path security validation
128
+ */
129
+ declare function isValidFileSize(size: number, maxSize: number): boolean;
130
+ /**
131
+ * Validates text content for security vulnerabilities and size limits
132
+ *
133
+ * Performs basic security checks on text content to detect common XSS attack vectors:
134
+ * - Script tags (<script>)
135
+ * - JavaScript URLs (javascript:)
136
+ * - Data URLs with HTML (data:text/html)
137
+ * - VBScript URLs (vbscript:)
138
+ *
139
+ * Also enforces maximum content length to prevent DoS attacks.
140
+ *
141
+ * ⚠️ WARNING: This is basic XSS detection. For production systems:
142
+ * - Use dedicated sanitization libraries (DOMPurify, sanitize-html)
143
+ * - Implement Content Security Policy (CSP)
144
+ * - Apply output encoding based on context (HTML, JS, URL)
145
+ * - Validate against allowlists, not just blocklists
146
+ *
147
+ * @param content - Text content to validate
148
+ * @param options - Validation options
149
+ * @param options.maxLength - Maximum content length in characters (default: 1,000,000)
150
+ * @returns True if content appears safe, false if dangerous patterns detected
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // Safe content - Allowed
155
+ * isValidTextContent('Hello, world!') // true
156
+ * isValidTextContent('User input: <b>bold</b>') // true
157
+ * isValidTextContent('Email: user@example.com') // true
158
+ *
159
+ * // Dangerous content - XSS vectors detected
160
+ * isValidTextContent('<script>alert("XSS")</script>') // false
161
+ * isValidTextContent('<img src=x onerror="alert(1)">') // false (contains 'script' in onerror)
162
+ * isValidTextContent('<a href="javascript:void(0)">') // false
163
+ * isValidTextContent('<iframe src="data:text/html,..."') // false
164
+ * isValidTextContent('vbscript:msgbox("XSS")') // false
165
+ *
166
+ * // Size limit validation
167
+ * isValidTextContent('x'.repeat(999_999)) // true (under default 1M limit)
168
+ * isValidTextContent('x'.repeat(1_000_001)) // false (exceeds default limit)
169
+ * isValidTextContent('x'.repeat(5000), { maxLength: 1000 }) // false (custom limit)
170
+ *
171
+ * // Edge cases
172
+ * isValidTextContent('') // true (empty is valid)
173
+ * isValidTextContent(null as any) // false (not a string)
174
+ * isValidTextContent(undefined as any) // false (not a string)
175
+ * isValidTextContent(123 as any) // false (not a string)
176
+ *
177
+ * // Real-world usage in comment system
178
+ * app.post('/api/comments', (req, res) => {
179
+ * const { content } = req.body
180
+ *
181
+ * if (!isValidTextContent(content, { maxLength: 5000 })) {
182
+ * return res.status(400).json({
183
+ * error: 'Invalid comment content',
184
+ * details: 'Content contains dangerous patterns or exceeds 5000 characters'
185
+ * })
186
+ * }
187
+ *
188
+ * // Additional sanitization recommended
189
+ * const sanitized = DOMPurify.sanitize(content)
190
+ *
191
+ * // Save to database...
192
+ * })
193
+ * ```
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * // Form validation with custom limits
198
+ * function validateUserBio(bio: string): { valid: boolean; error?: string } {
199
+ * if (!isValidTextContent(bio, { maxLength: 500 })) {
200
+ * return {
201
+ * valid: false,
202
+ * error: 'Bio must be less than 500 characters and cannot contain scripts'
203
+ * }
204
+ * }
205
+ * return { valid: true }
206
+ * }
207
+ * ```
208
+ *
209
+ * @see {@link isValidFilePath} for file path validation
210
+ * @see sanitizeHtml from validation module for HTML sanitization
211
+ */
212
+ declare function isValidTextContent(content: string, options?: {
213
+ maxLength?: number;
214
+ }): boolean;
215
+
216
+ export { isValidFilePath, isValidFileSize, isValidTextContent };
package/package.json ADDED
@@ -0,0 +1,253 @@
1
+ {
2
+ "name": "@gzl10/ts-helpers",
3
+ "version": "4.2.1",
4
+ "description": "Librería de utilidades TypeScript con herramientas especializadas para desarrollo web, validación española, manejo de datos y operaciones asíncronas.",
5
+ "main": "./dist/cjs/index.js",
6
+ "module": "./dist/esm/index.js",
7
+ "types": "./dist/types/index.d.ts",
8
+ "engines": {
9
+ "node": ">=18.0.0",
10
+ "pnpm": ">=8.0.0"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "node": {
15
+ "types": "./dist/types/index.d.ts",
16
+ "import": "./dist/node-esm/index.js",
17
+ "require": "./dist/node/index.js"
18
+ },
19
+ "browser": {
20
+ "types": "./dist/types/index.d.ts",
21
+ "import": "./dist/browser/index.js"
22
+ },
23
+ "default": {
24
+ "types": "./dist/types/index.d.ts",
25
+ "import": "./dist/esm/index.js",
26
+ "require": "./dist/cjs/index.js"
27
+ }
28
+ },
29
+ "./node": {
30
+ "types": "./dist/types/index.d.ts",
31
+ "import": "./dist/node-esm/index.js",
32
+ "require": "./dist/node/index.js"
33
+ },
34
+ "./browser": {
35
+ "types": "./dist/types/index.d.ts",
36
+ "import": "./dist/browser/index.js"
37
+ },
38
+ "./universal": {
39
+ "types": "./dist/types/index.d.ts",
40
+ "import": "./dist/esm/index.js",
41
+ "require": "./dist/cjs/index.js"
42
+ },
43
+ "./validation": {
44
+ "node": {
45
+ "types": "./dist/types/validation.d.ts",
46
+ "import": "./dist/node-esm/validation.js",
47
+ "require": "./dist/node/validation.js"
48
+ },
49
+ "browser": {
50
+ "types": "./dist/types/validation.d.ts",
51
+ "import": "./dist/browser/validation-core.js"
52
+ },
53
+ "default": {
54
+ "types": "./dist/types/validation.d.ts",
55
+ "import": "./dist/esm/validation.js",
56
+ "require": "./dist/cjs/validation.js"
57
+ }
58
+ },
59
+ "./validation-core": {
60
+ "types": "./dist/types/validation.d.ts",
61
+ "import": "./dist/esm/validation.js",
62
+ "require": "./dist/cjs/validation.js"
63
+ },
64
+ "./validation-crypto": {
65
+ "node": {
66
+ "types": "./dist/types/validation-crypto-node.d.ts",
67
+ "import": "./dist/node-esm/validation-crypto.js",
68
+ "require": "./dist/node/validation-crypto.js"
69
+ },
70
+ "browser": {
71
+ "types": "./dist/types/validation-crypto-browser.d.ts",
72
+ "import": "./dist/browser/validation-crypto.js"
73
+ },
74
+ "default": {
75
+ "types": "./dist/types/validation-crypto-browser.d.ts",
76
+ "import": "./dist/browser/validation-crypto.js"
77
+ }
78
+ },
79
+ "./environment-detection": {
80
+ "types": "./dist/types/environment-detection.d.ts",
81
+ "import": "./dist/esm/environment-detection.js",
82
+ "require": "./dist/cjs/environment-detection.js"
83
+ },
84
+ "./strings": {
85
+ "types": "./dist/types/strings.d.ts",
86
+ "import": "./dist/esm/strings.js",
87
+ "require": "./dist/cjs/strings.js"
88
+ },
89
+ "./objects": {
90
+ "types": "./dist/types/objects.d.ts",
91
+ "import": "./dist/esm/objects.js",
92
+ "require": "./dist/cjs/objects.js"
93
+ },
94
+ "./dates": {
95
+ "types": "./dist/types/dates.d.ts",
96
+ "import": "./dist/esm/dates.js",
97
+ "require": "./dist/cjs/dates.js"
98
+ },
99
+ "./math": {
100
+ "types": "./dist/types/math.d.ts",
101
+ "import": "./dist/esm/math.js",
102
+ "require": "./dist/cjs/math.js"
103
+ },
104
+ "./async": {
105
+ "types": "./dist/types/async.d.ts",
106
+ "import": "./dist/esm/async.js",
107
+ "require": "./dist/cjs/async.js"
108
+ },
109
+ "./data": {
110
+ "types": "./dist/types/data.d.ts",
111
+ "import": "./dist/node-esm/data.js",
112
+ "require": "./dist/node/data.js"
113
+ },
114
+ "./environment": {
115
+ "types": "./dist/types/environment.d.ts",
116
+ "import": "./dist/esm/environment.js",
117
+ "require": "./dist/cjs/environment.js"
118
+ },
119
+ "./errors": {
120
+ "types": "./dist/types/errors.d.ts",
121
+ "import": "./dist/esm/errors.js",
122
+ "require": "./dist/cjs/errors.js"
123
+ },
124
+ "./csv": {
125
+ "types": "./dist/types/csv.d.ts",
126
+ "import": "./dist/node-esm/csv.js",
127
+ "require": "./dist/node/csv.js"
128
+ },
129
+ "./json": {
130
+ "types": "./dist/types/json.d.ts",
131
+ "import": "./dist/node-esm/json.js",
132
+ "require": "./dist/node/json.js"
133
+ },
134
+ "./tree": {
135
+ "types": "./dist/types/tree.d.ts",
136
+ "import": "./dist/node-esm/tree.js",
137
+ "require": "./dist/node/tree.js"
138
+ },
139
+ "./validators": {
140
+ "types": "./dist/types/validators.d.ts",
141
+ "import": "./dist/node-esm/validators.js",
142
+ "require": "./dist/node/validators.js"
143
+ },
144
+ "./number": {
145
+ "types": "./dist/types/number.d.ts",
146
+ "import": "./dist/esm/number.js",
147
+ "require": "./dist/cjs/number.js"
148
+ },
149
+ "./package.json": "./package.json",
150
+ "./dist/*": "./dist/*"
151
+ },
152
+ "author": "Gonzalo Díez<gonzalo@gzl10.com>",
153
+ "repository": {
154
+ "type": "git",
155
+ "url": "https://gitlab.gzl10.com/oss/ts-helpers.git"
156
+ },
157
+ "homepage": "https://gitlab.gzl10.com/oss/ts-helpers",
158
+ "bugs": {
159
+ "url": "https://gitlab.gzl10.com/oss/ts-helpers/-/issues"
160
+ },
161
+ "license": "MIT",
162
+ "files": [
163
+ "dist/**/*.d.ts",
164
+ "dist/**/*.js",
165
+ "dist/**/*.map",
166
+ "README.md",
167
+ "USAGE-GUIDE.md",
168
+ "CHANGELOG.md"
169
+ ],
170
+ "dependencies": {
171
+ "crc": "^4.3.2",
172
+ "dayjs": "^1.11.13",
173
+ "fast-deep-equal": "^3.1.3",
174
+ "iso-datestring-validator": "^2.2.2",
175
+ "lodash": "^4.17.21",
176
+ "numeral": "^2.0.6",
177
+ "papaparse": "^5.5.3",
178
+ "qs": "^6.14.0",
179
+ "tslib": "^2.8.1",
180
+ "validator": "^13.15.15"
181
+ },
182
+ "devDependencies": {
183
+ "@changesets/cli": "^2.29.7",
184
+ "@types/lodash": "^4.17.20",
185
+ "@types/node": "^20.19.13",
186
+ "@types/numeral": "^2.0.5",
187
+ "@types/papaparse": "^5.3.16",
188
+ "@types/qs": "^6.14.0",
189
+ "@typescript-eslint/eslint-plugin": "^8.44.0",
190
+ "@typescript-eslint/parser": "^8.44.0",
191
+ "@vitest/coverage-v8": "^3.2.4",
192
+ "@vitest/ui": "^3.2.4",
193
+ "eslint": "^9.34.0",
194
+ "eslint-config-prettier": "^9.1.2",
195
+ "eslint-plugin-compat": "^6.0.2",
196
+ "eslint-plugin-prettier": "^5.5.4",
197
+ "globals": "^16.3.0",
198
+ "jsdom": "^27.0.0",
199
+ "prettier": "^3.6.2",
200
+ "rimraf": "^6.0.1",
201
+ "tsup": "^8.5.0",
202
+ "typescript": "^5.9.2",
203
+ "typescript-eslint": "^8.44.0",
204
+ "vitest": "^3.2.4"
205
+ },
206
+ "browserslist": [
207
+ "Chrome >= 58"
208
+ ],
209
+ "keywords": [
210
+ "typescript",
211
+ "utilities",
212
+ "helpers",
213
+ "spanish",
214
+ "tools",
215
+ "utils",
216
+ "dates",
217
+ "numbers",
218
+ "format",
219
+ "validation",
220
+ "web-development",
221
+ "async",
222
+ "data-import",
223
+ "data-export"
224
+ ],
225
+ "scripts": {
226
+ "clean": "rimraf dist package-lock.json node_modules test-results",
227
+ "build": "tsup",
228
+ "build:cjs": "tsup --config tsup.config.ts --format cjs",
229
+ "build:esm": "tsup --config tsup.config.ts --format esm",
230
+ "build:types": "tsup --config tsup.config.ts --dts-only",
231
+ "build:watch": "tsup --watch",
232
+ "typecheck": "tsc --noEmit",
233
+ "lint": "eslint 'src/**/*.{ts,js,mjs}' 'tests/**/*.{ts,js}' --fix",
234
+ "lint:check": "eslint 'src/**/*.{ts,js,mjs}' 'tests/**/*.{ts,js}'",
235
+ "format": "prettier --write .",
236
+ "format:check": "prettier --check .",
237
+ "test": "vitest run",
238
+ "test:watch": "vitest",
239
+ "test:ui": "vitest --ui",
240
+ "test:coverage": "vitest run --coverage",
241
+ "test:report": "vitest run --reporter=html --reporter=junit && echo 'HTML report generated at test-results/index.html'",
242
+ "test:report:open": "vitest run --reporter=html --reporter=junit && open test-results/index.html",
243
+ "test:docs": "vitest run --reporter=verbose --reporter=html --reporter=junit",
244
+ "test:ci": "vitest run --reporter=junit --reporter=html --coverage",
245
+ "dev": "npm run build:watch",
246
+ "release:prepare": "changeset",
247
+ "release:version": "changeset version",
248
+ "release:publish": "changeset publish",
249
+ "release": "pnpm release:version && pnpm release:publish",
250
+ "quality": "pnpm run format && pnpm run lint && pnpm run test && pnpm run build",
251
+ "quality:check": "pnpm run lint:check && pnpm run format:check && pnpm run test && pnpm run build"
252
+ }
253
+ }