@oxog/vld 1.5.0 → 2.0.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 (279) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +558 -517
  3. package/dist/chunks/bigint-ZKkWLdmi.js +1628 -0
  4. package/dist/chunks/bigint-ZKkWLdmi.js.map +1 -0
  5. package/dist/{coercion/string.js → chunks/date-7Iz2BGsL.js} +271 -5
  6. package/dist/chunks/date-7Iz2BGsL.js.map +1 -0
  7. package/dist/chunks/index-BoV-4S1F.js +894 -0
  8. package/dist/chunks/index-BoV-4S1F.js.map +1 -0
  9. package/dist/chunks/index-eWXdjyyy.js +426 -0
  10. package/dist/chunks/index-eWXdjyyy.js.map +1 -0
  11. package/dist/chunks/json-nIhyRPOU.js +1934 -0
  12. package/dist/chunks/json-nIhyRPOU.js.map +1 -0
  13. package/dist/{validators/unknown.js → chunks/unknown-CjSRcELI.js} +6 -3
  14. package/dist/chunks/unknown-CjSRcELI.js.map +1 -0
  15. package/dist/cjs/errors.cjs +387 -0
  16. package/dist/cjs/errors.cjs.map +1 -0
  17. package/dist/cjs/index.cjs +9815 -0
  18. package/dist/cjs/index.cjs.map +1 -0
  19. package/dist/cjs/locales/index.cjs +2877 -0
  20. package/dist/cjs/locales/index.cjs.map +1 -0
  21. package/dist/cjs/locales/lazy.cjs +3169 -0
  22. package/dist/cjs/locales/lazy.cjs.map +1 -0
  23. package/dist/cjs/mini.cjs +7161 -0
  24. package/dist/cjs/mini.cjs.map +1 -0
  25. package/dist/codecs/index.js +4 -275
  26. package/dist/codecs/index.js.map +1 -1
  27. package/dist/coercion/index.d.ts +11 -0
  28. package/dist/coercion/index.d.ts.map +1 -0
  29. package/dist/coercion/{bigint.js → index.js} +7 -4
  30. package/dist/coercion/index.js.map +1 -0
  31. package/dist/compat/emitter.js +6 -4
  32. package/dist/compat/emitter.js.map +1 -1
  33. package/dist/compat/result.js +21 -19
  34. package/dist/compat/result.js.map +1 -1
  35. package/dist/errors.js +13 -10
  36. package/dist/errors.js.map +1 -1
  37. package/dist/index.js +225 -126
  38. package/dist/index.js.map +1 -1
  39. package/dist/kernel.js +10 -7
  40. package/dist/kernel.js.map +1 -1
  41. package/dist/locales/af.js +4 -2
  42. package/dist/locales/af.js.map +1 -1
  43. package/dist/locales/ar.js +4 -2
  44. package/dist/locales/ar.js.map +1 -1
  45. package/dist/locales/bn.js +4 -2
  46. package/dist/locales/bn.js.map +1 -1
  47. package/dist/locales/da.js +4 -2
  48. package/dist/locales/da.js.map +1 -1
  49. package/dist/locales/de.js +4 -2
  50. package/dist/locales/de.js.map +1 -1
  51. package/dist/locales/en.js +4 -2
  52. package/dist/locales/en.js.map +1 -1
  53. package/dist/locales/es-MX.js +4 -2
  54. package/dist/locales/es-MX.js.map +1 -1
  55. package/dist/locales/es.js +4 -2
  56. package/dist/locales/es.js.map +1 -1
  57. package/dist/locales/fi.js +4 -2
  58. package/dist/locales/fi.js.map +1 -1
  59. package/dist/locales/fr.js +4 -2
  60. package/dist/locales/fr.js.map +1 -1
  61. package/dist/locales/hi.js +4 -2
  62. package/dist/locales/hi.js.map +1 -1
  63. package/dist/locales/id.js +4 -2
  64. package/dist/locales/id.js.map +1 -1
  65. package/dist/locales/index.js +3 -91
  66. package/dist/locales/index.js.map +1 -1
  67. package/dist/locales/it.js +4 -2
  68. package/dist/locales/it.js.map +1 -1
  69. package/dist/locales/ja.js +4 -2
  70. package/dist/locales/ja.js.map +1 -1
  71. package/dist/locales/ko.js +4 -2
  72. package/dist/locales/ko.js.map +1 -1
  73. package/dist/locales/lazy.d.ts +111 -0
  74. package/dist/locales/lazy.d.ts.map +1 -0
  75. package/dist/locales/lazy.js +220 -0
  76. package/dist/locales/lazy.js.map +1 -0
  77. package/dist/locales/nl.js +4 -2
  78. package/dist/locales/nl.js.map +1 -1
  79. package/dist/locales/no.js +4 -2
  80. package/dist/locales/no.js.map +1 -1
  81. package/dist/locales/pl.js +4 -2
  82. package/dist/locales/pl.js.map +1 -1
  83. package/dist/locales/pt-BR.js +4 -2
  84. package/dist/locales/pt-BR.js.map +1 -1
  85. package/dist/locales/pt.js +4 -2
  86. package/dist/locales/pt.js.map +1 -1
  87. package/dist/locales/ru.js +4 -2
  88. package/dist/locales/ru.js.map +1 -1
  89. package/dist/locales/sv.js +4 -2
  90. package/dist/locales/sv.js.map +1 -1
  91. package/dist/locales/sw.js +4 -2
  92. package/dist/locales/sw.js.map +1 -1
  93. package/dist/locales/th.js +4 -2
  94. package/dist/locales/th.js.map +1 -1
  95. package/dist/locales/tr.js +4 -2
  96. package/dist/locales/tr.js.map +1 -1
  97. package/dist/locales/vi.js +4 -2
  98. package/dist/locales/vi.js.map +1 -1
  99. package/dist/locales/zh.js +4 -2
  100. package/dist/locales/zh.js.map +1 -1
  101. package/dist/mini.d.ts +182 -0
  102. package/dist/mini.d.ts.map +1 -0
  103. package/dist/mini.js +132 -0
  104. package/dist/mini.js.map +1 -0
  105. package/dist/pigment.js +8 -7
  106. package/dist/pigment.js.map +1 -1
  107. package/dist/validators/index.js +5 -45
  108. package/dist/validators/index.js.map +1 -1
  109. package/package.json +69 -11
  110. package/dist/cli/benchmark.d.ts +0 -15
  111. package/dist/cli/benchmark.d.ts.map +0 -1
  112. package/dist/cli/benchmark.js +0 -248
  113. package/dist/cli/benchmark.js.map +0 -1
  114. package/dist/cli/bin.js +0 -35
  115. package/dist/cli/bin.js.map +0 -1
  116. package/dist/cli/commands/benchmark.js +0 -204
  117. package/dist/cli/commands/benchmark.js.map +0 -1
  118. package/dist/cli/commands/validate.js +0 -157
  119. package/dist/cli/commands/validate.js.map +0 -1
  120. package/dist/cli/generate.d.ts +0 -14
  121. package/dist/cli/generate.d.ts.map +0 -1
  122. package/dist/cli/generate.js +0 -233
  123. package/dist/cli/generate.js.map +0 -1
  124. package/dist/cli/index.js +0 -182
  125. package/dist/cli/index.js.map +0 -1
  126. package/dist/cli/validate.d.ts +0 -15
  127. package/dist/cli/validate.d.ts.map +0 -1
  128. package/dist/cli/validate.js +0 -162
  129. package/dist/cli/validate.js.map +0 -1
  130. package/dist/coercion/bigint.js.map +0 -1
  131. package/dist/coercion/boolean.js +0 -59
  132. package/dist/coercion/boolean.js.map +0 -1
  133. package/dist/coercion/date.js +0 -52
  134. package/dist/coercion/date.js.map +0 -1
  135. package/dist/coercion/number.js +0 -160
  136. package/dist/coercion/number.js.map +0 -1
  137. package/dist/coercion/string.js.map +0 -1
  138. package/dist/compat/index.js +0 -14
  139. package/dist/compat/index.js.map +0 -1
  140. package/dist/events.js +0 -8
  141. package/dist/events.js.map +0 -1
  142. package/dist/guards.d.ts +0 -143
  143. package/dist/guards.d.ts.map +0 -1
  144. package/dist/guards.js +0 -238
  145. package/dist/guards.js.map +0 -1
  146. package/dist/index-new.d.ts.map +0 -1
  147. package/dist/locales/backup-en.js +0 -105
  148. package/dist/locales/backup-en.js.map +0 -1
  149. package/dist/locales/types.js +0 -2
  150. package/dist/locales/types.js.map +0 -1
  151. package/dist/locales.d.ts +0 -54
  152. package/dist/locales.d.ts.map +0 -1
  153. package/dist/locales.js +0 -732
  154. package/dist/locales.js.map +0 -1
  155. package/dist/logger.js +0 -184
  156. package/dist/logger.js.map +0 -1
  157. package/dist/plugins/codecs.d.ts +0 -17
  158. package/dist/plugins/codecs.d.ts.map +0 -1
  159. package/dist/plugins/codecs.js +0 -29
  160. package/dist/plugins/codecs.js.map +0 -1
  161. package/dist/plugins/coercion.d.ts +0 -13
  162. package/dist/plugins/coercion.d.ts.map +0 -1
  163. package/dist/plugins/coercion.js +0 -34
  164. package/dist/plugins/coercion.js.map +0 -1
  165. package/dist/plugins/core-validators.d.ts +0 -13
  166. package/dist/plugins/core-validators.d.ts.map +0 -1
  167. package/dist/plugins/core-validators.js +0 -96
  168. package/dist/plugins/core-validators.js.map +0 -1
  169. package/dist/plugins/index.js +0 -8
  170. package/dist/plugins/index.js.map +0 -1
  171. package/dist/plugins/kernel.d.ts +0 -29
  172. package/dist/plugins/kernel.d.ts.map +0 -1
  173. package/dist/plugins/kernel.js +0 -486
  174. package/dist/plugins/kernel.js.map +0 -1
  175. package/dist/plugins/types.js +0 -8
  176. package/dist/plugins/types.js.map +0 -1
  177. package/dist/style.d.ts +0 -123
  178. package/dist/style.d.ts.map +0 -1
  179. package/dist/style.js +0 -369
  180. package/dist/style.js.map +0 -1
  181. package/dist/utils/codec-utils.js +0 -229
  182. package/dist/utils/codec-utils.js.map +0 -1
  183. package/dist/utils/deep-merge.js +0 -76
  184. package/dist/utils/deep-merge.js.map +0 -1
  185. package/dist/utils/ip-validation.js +0 -98
  186. package/dist/utils/ip-validation.js.map +0 -1
  187. package/dist/utils/security.js +0 -61
  188. package/dist/utils/security.js.map +0 -1
  189. package/dist/validators/any.js +0 -25
  190. package/dist/validators/any.js.map +0 -1
  191. package/dist/validators/array.js +0 -190
  192. package/dist/validators/array.js.map +0 -1
  193. package/dist/validators/base.js +0 -499
  194. package/dist/validators/base.js.map +0 -1
  195. package/dist/validators/base64.js +0 -65
  196. package/dist/validators/base64.js.map +0 -1
  197. package/dist/validators/bigint.js +0 -142
  198. package/dist/validators/bigint.js.map +0 -1
  199. package/dist/validators/boolean.js +0 -114
  200. package/dist/validators/boolean.js.map +0 -1
  201. package/dist/validators/codec.js +0 -182
  202. package/dist/validators/codec.js.map +0 -1
  203. package/dist/validators/custom.js +0 -50
  204. package/dist/validators/custom.js.map +0 -1
  205. package/dist/validators/date.js +0 -227
  206. package/dist/validators/date.js.map +0 -1
  207. package/dist/validators/discriminated-union.js +0 -98
  208. package/dist/validators/discriminated-union.js.map +0 -1
  209. package/dist/validators/enum.js +0 -82
  210. package/dist/validators/enum.js.map +0 -1
  211. package/dist/validators/file.js +0 -114
  212. package/dist/validators/file.js.map +0 -1
  213. package/dist/validators/function.js +0 -45
  214. package/dist/validators/function.js.map +0 -1
  215. package/dist/validators/hex.js +0 -62
  216. package/dist/validators/hex.js.map +0 -1
  217. package/dist/validators/intersection.js +0 -64
  218. package/dist/validators/intersection.js.map +0 -1
  219. package/dist/validators/json.js +0 -64
  220. package/dist/validators/json.js.map +0 -1
  221. package/dist/validators/lazy.js +0 -42
  222. package/dist/validators/lazy.js.map +0 -1
  223. package/dist/validators/literal.js +0 -45
  224. package/dist/validators/literal.js.map +0 -1
  225. package/dist/validators/map.js +0 -54
  226. package/dist/validators/map.js.map +0 -1
  227. package/dist/validators/nan.js +0 -32
  228. package/dist/validators/nan.js.map +0 -1
  229. package/dist/validators/never.js +0 -29
  230. package/dist/validators/never.js.map +0 -1
  231. package/dist/validators/null.js +0 -31
  232. package/dist/validators/null.js.map +0 -1
  233. package/dist/validators/number.js +0 -225
  234. package/dist/validators/number.js.map +0 -1
  235. package/dist/validators/object-optimized.d.ts +0 -23
  236. package/dist/validators/object-optimized.d.ts.map +0 -1
  237. package/dist/validators/object-optimized.js +0 -179
  238. package/dist/validators/object-optimized.js.map +0 -1
  239. package/dist/validators/object-ultra.d.ts +0 -34
  240. package/dist/validators/object-ultra.d.ts.map +0 -1
  241. package/dist/validators/object-ultra.js +0 -175
  242. package/dist/validators/object-ultra.js.map +0 -1
  243. package/dist/validators/object.js +0 -458
  244. package/dist/validators/object.js.map +0 -1
  245. package/dist/validators/record.js +0 -128
  246. package/dist/validators/record.js.map +0 -1
  247. package/dist/validators/set.js +0 -51
  248. package/dist/validators/set.js.map +0 -1
  249. package/dist/validators/string-bool.js +0 -127
  250. package/dist/validators/string-bool.js.map +0 -1
  251. package/dist/validators/string-formats.js +0 -120
  252. package/dist/validators/string-formats.js.map +0 -1
  253. package/dist/validators/string-ultra.d.ts +0 -49
  254. package/dist/validators/string-ultra.d.ts.map +0 -1
  255. package/dist/validators/string-ultra.js +0 -217
  256. package/dist/validators/string-ultra.js.map +0 -1
  257. package/dist/validators/string.js +0 -253
  258. package/dist/validators/string.js.map +0 -1
  259. package/dist/validators/symbol.js +0 -42
  260. package/dist/validators/symbol.js.map +0 -1
  261. package/dist/validators/template-literal.js +0 -102
  262. package/dist/validators/template-literal.js.map +0 -1
  263. package/dist/validators/tuple.js +0 -55
  264. package/dist/validators/tuple.js.map +0 -1
  265. package/dist/validators/uint8array.js +0 -98
  266. package/dist/validators/uint8array.js.map +0 -1
  267. package/dist/validators/undefined.js +0 -31
  268. package/dist/validators/undefined.js.map +0 -1
  269. package/dist/validators/union-optimized.d.ts +0 -15
  270. package/dist/validators/union-optimized.d.ts.map +0 -1
  271. package/dist/validators/union-optimized.js +0 -92
  272. package/dist/validators/union-optimized.js.map +0 -1
  273. package/dist/validators/union.js +0 -126
  274. package/dist/validators/union.js.map +0 -1
  275. package/dist/validators/unknown.js.map +0 -1
  276. package/dist/validators/void.js +0 -35
  277. package/dist/validators/void.js.map +0 -1
  278. package/dist/validators/xor.js +0 -64
  279. package/dist/validators/xor.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/compat/result.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Result Pattern Implementation\r\n *\r\n * This module provides a Result type for functional error handling,\r\n * compatible with @oxog/types when available.\r\n */\r\n\r\nimport type { VldError } from '../errors';\r\n\r\n/**\r\n * Success result type\r\n */\r\nexport interface Ok<T> {\r\n readonly success: true;\r\n readonly data: T;\r\n readonly value: T; // Alias for @oxog/types compatibility\r\n readonly error?: never;\r\n}\r\n\r\n/**\r\n * Error result type\r\n */\r\nexport interface Err<E = Error> {\r\n readonly success: false;\r\n readonly error: E;\r\n readonly data?: never;\r\n readonly value?: never;\r\n}\r\n\r\n/**\r\n * Result type - Either success with data or failure with error\r\n */\r\nexport type Result<T, E = Error> = Ok<T> | Err<E>;\r\n\r\n/**\r\n * VLD-specific Result type with VldError\r\n */\r\nexport type VldResult<T> = Result<T, VldError>;\r\n\r\n/**\r\n * Create a success result\r\n */\r\nexport function Ok<T>(data: T): Ok<T> {\r\n return { success: true, data, value: data };\r\n}\r\n\r\n/**\r\n * Create an error result\r\n */\r\nexport function Err<E = Error>(error: E): Err<E> {\r\n return { success: false, error };\r\n}\r\n\r\n/**\r\n * Create a success result (alias)\r\n */\r\nexport const success = Ok;\r\n\r\n/**\r\n * Create a failure result (alias)\r\n */\r\nexport const failure = Err;\r\n\r\n/**\r\n * Check if result is Ok\r\n */\r\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\r\n return result.success === true;\r\n}\r\n\r\n/**\r\n * Check if result is Err\r\n */\r\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\r\n return result.success === false;\r\n}\r\n\r\n/**\r\n * Check if value is a Result\r\n */\r\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'success' in value &&\r\n typeof (value as Result<T, E>).success === 'boolean'\r\n );\r\n}\r\n\r\n/**\r\n * Unwrap a result, throwing the error if it's an Err\r\n */\r\nexport function unwrap<T, E extends Error>(result: Result<T, E>): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n throw result.error;\r\n}\r\n\r\n/**\r\n * Unwrap a result with a default value\r\n */\r\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Map over a successful result\r\n */\r\nexport function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {\r\n if (isOk(result)) {\r\n return Ok(fn(result.data));\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Map over an error result\r\n */\r\nexport function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> {\r\n if (isErr(result)) {\r\n return Err(fn(result.error));\r\n }\r\n return result as Ok<T>;\r\n}\r\n\r\n/**\r\n * Chain results (flatMap)\r\n */\r\nexport function flatMap<T, U, E>(\r\n result: Result<T, E>,\r\n fn: (value: T) => Result<U, E>\r\n): Result<U, E> {\r\n if (isOk(result)) {\r\n return fn(result.data);\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Pattern match on a result\r\n */\r\nexport function match<T, E, U>(\r\n result: Result<T, E>,\r\n handlers: {\r\n ok: (value: T) => U;\r\n err: (error: E) => U;\r\n }\r\n): U {\r\n if (isOk(result)) {\r\n return handlers.ok(result.data);\r\n }\r\n return handlers.err(result.error);\r\n}\r\n\r\n/**\r\n * Try to execute a function and wrap the result\r\n */\r\nexport function tryCatch<T>(fn: () => T): Result<T, Error> {\r\n try {\r\n return Ok(fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Try to execute an async function and wrap the result\r\n */\r\nexport async function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>> {\r\n try {\r\n return Ok(await fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Combine multiple results into a single result\r\n * Returns Ok with array of values if all succeed, Err with first error otherwise\r\n */\r\nexport function all<T, E>(results: Result<T, E>[]): Result<T[], E> {\r\n const values: T[] = [];\r\n\r\n for (const result of results) {\r\n if (isErr(result)) {\r\n return result;\r\n }\r\n values.push(result.data);\r\n }\r\n\r\n return Ok(values);\r\n}\r\n\r\n/**\r\n * Convert a nullable value to a Result\r\n */\r\nexport function fromNullable<T>(\r\n value: T | null | undefined,\r\n error: Error = new Error('Value is null or undefined')\r\n): Result<T, Error> {\r\n if (value === null || value === undefined) {\r\n return Err(error);\r\n }\r\n return Ok(value);\r\n}\r\n\r\n/**\r\n * Result utilities namespace\r\n */\r\nexport const ResultUtils = {\r\n Ok,\r\n Err,\r\n success,\r\n failure,\r\n isOk,\r\n isErr,\r\n isResult,\r\n unwrap,\r\n unwrapOr,\r\n map,\r\n mapErr,\r\n flatMap,\r\n match,\r\n tryCatch,\r\n tryCatchAsync,\r\n all,\r\n fromNullable\r\n};\r\n"]}
1
+ {"version":3,"file":"result.js","sources":["../../src/compat/result.ts"],"sourcesContent":["/**\r\n * Result Pattern Implementation\r\n *\r\n * This module provides a Result type for functional error handling,\r\n * compatible with @oxog/types when available.\r\n */\r\n\r\nimport type { VldError } from '../errors';\r\n\r\n/**\r\n * Success result type\r\n */\r\nexport interface Ok<T> {\r\n readonly success: true;\r\n readonly data: T;\r\n readonly value: T; // Alias for @oxog/types compatibility\r\n readonly error?: never;\r\n}\r\n\r\n/**\r\n * Error result type\r\n */\r\nexport interface Err<E = Error> {\r\n readonly success: false;\r\n readonly error: E;\r\n readonly data?: never;\r\n readonly value?: never;\r\n}\r\n\r\n/**\r\n * Result type - Either success with data or failure with error\r\n */\r\nexport type Result<T, E = Error> = Ok<T> | Err<E>;\r\n\r\n/**\r\n * VLD-specific Result type with VldError\r\n */\r\nexport type VldResult<T> = Result<T, VldError>;\r\n\r\n/**\r\n * Create a success result\r\n */\r\nexport function Ok<T>(data: T): Ok<T> {\r\n return { success: true, data, value: data };\r\n}\r\n\r\n/**\r\n * Create an error result\r\n */\r\nexport function Err<E = Error>(error: E): Err<E> {\r\n return { success: false, error };\r\n}\r\n\r\n/**\r\n * Create a success result (alias)\r\n */\r\nexport const success = Ok;\r\n\r\n/**\r\n * Create a failure result (alias)\r\n */\r\nexport const failure = Err;\r\n\r\n/**\r\n * Check if result is Ok\r\n */\r\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\r\n return result.success === true;\r\n}\r\n\r\n/**\r\n * Check if result is Err\r\n */\r\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\r\n return result.success === false;\r\n}\r\n\r\n/**\r\n * Check if value is a Result\r\n */\r\nexport function isResult<T, E>(value: unknown): value is Result<T, E> {\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'success' in value &&\r\n typeof (value as Result<T, E>).success === 'boolean'\r\n );\r\n}\r\n\r\n/**\r\n * Unwrap a result, throwing the error if it's an Err\r\n */\r\nexport function unwrap<T, E extends Error>(result: Result<T, E>): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n throw result.error;\r\n}\r\n\r\n/**\r\n * Unwrap a result with a default value\r\n */\r\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\r\n if (isOk(result)) {\r\n return result.data;\r\n }\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Map over a successful result\r\n */\r\nexport function map<T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> {\r\n if (isOk(result)) {\r\n return Ok(fn(result.data));\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Map over an error result\r\n */\r\nexport function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> {\r\n if (isErr(result)) {\r\n return Err(fn(result.error));\r\n }\r\n return result as Ok<T>;\r\n}\r\n\r\n/**\r\n * Chain results (flatMap)\r\n */\r\nexport function flatMap<T, U, E>(\r\n result: Result<T, E>,\r\n fn: (value: T) => Result<U, E>\r\n): Result<U, E> {\r\n if (isOk(result)) {\r\n return fn(result.data);\r\n }\r\n return result as Err<E>;\r\n}\r\n\r\n/**\r\n * Pattern match on a result\r\n */\r\nexport function match<T, E, U>(\r\n result: Result<T, E>,\r\n handlers: {\r\n ok: (value: T) => U;\r\n err: (error: E) => U;\r\n }\r\n): U {\r\n if (isOk(result)) {\r\n return handlers.ok(result.data);\r\n }\r\n return handlers.err(result.error);\r\n}\r\n\r\n/**\r\n * Try to execute a function and wrap the result\r\n */\r\nexport function tryCatch<T>(fn: () => T): Result<T, Error> {\r\n try {\r\n return Ok(fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Try to execute an async function and wrap the result\r\n */\r\nexport async function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>> {\r\n try {\r\n return Ok(await fn());\r\n } catch (error) {\r\n return Err(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n}\r\n\r\n/**\r\n * Combine multiple results into a single result\r\n * Returns Ok with array of values if all succeed, Err with first error otherwise\r\n */\r\nexport function all<T, E>(results: Result<T, E>[]): Result<T[], E> {\r\n const values: T[] = [];\r\n\r\n for (const result of results) {\r\n if (isErr(result)) {\r\n return result;\r\n }\r\n values.push(result.data);\r\n }\r\n\r\n return Ok(values);\r\n}\r\n\r\n/**\r\n * Convert a nullable value to a Result\r\n */\r\nexport function fromNullable<T>(\r\n value: T | null | undefined,\r\n error: Error = new Error('Value is null or undefined')\r\n): Result<T, Error> {\r\n if (value === null || value === undefined) {\r\n return Err(error);\r\n }\r\n return Ok(value);\r\n}\r\n\r\n/**\r\n * Result utilities namespace\r\n */\r\nexport const ResultUtils = {\r\n Ok,\r\n Err,\r\n success,\r\n failure,\r\n isOk,\r\n isErr,\r\n isResult,\r\n unwrap,\r\n unwrapOr,\r\n map,\r\n mapErr,\r\n flatMap,\r\n match,\r\n tryCatch,\r\n tryCatchAsync,\r\n all,\r\n fromNullable\r\n};\r\n"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -1,6 +1,7 @@
1
- // VLD Error System - Advanced error formatting and utilities
2
1
  import { vldTheme } from './pigment.js';
3
- export class VldError extends Error {
2
+
3
+ // VLD Error System - Advanced error formatting and utilities
4
+ class VldError extends Error {
4
5
  constructor(issues) {
5
6
  const message = issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;
6
7
  super(message);
@@ -68,7 +69,7 @@ export class VldError extends Error {
68
69
  /**
69
70
  * Convert VldError to a nested tree structure
70
71
  */
71
- export function treeifyError(error) {
72
+ function treeifyError(error) {
72
73
  const tree = { errors: [] };
73
74
  for (const issue of error.issues) {
74
75
  let currentNode = tree;
@@ -121,7 +122,7 @@ export function treeifyError(error) {
121
122
  /**
122
123
  * Convert VldError to human-readable string
123
124
  */
124
- export function prettifyError(error, options = {}) {
125
+ function prettifyError(error, options = {}) {
125
126
  const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } = options;
126
127
  const lines = [];
127
128
  for (const issue of error.issues) {
@@ -174,20 +175,20 @@ export function prettifyError(error, options = {}) {
174
175
  * Convert VldError to human-readable string with full colors
175
176
  * Shorthand for prettifyError with colored: true
176
177
  */
177
- export function prettifyErrorColored(error, options = {}) {
178
+ function prettifyErrorColored(error, options = {}) {
178
179
  return prettifyError(error, { ...options, colored: true });
179
180
  }
180
181
  /**
181
182
  * Convert VldError to plain text string (no colors)
182
183
  * Shorthand for prettifyError with colored: false
183
184
  */
184
- export function prettifyErrorPlain(error, options = {}) {
185
+ function prettifyErrorPlain(error, options = {}) {
185
186
  return prettifyError(error, { ...options, colored: false });
186
187
  }
187
188
  /**
188
189
  * Flatten VldError for simple form validation
189
190
  */
190
- export function flattenError(error) {
191
+ function flattenError(error) {
191
192
  const formErrors = [];
192
193
  const fieldErrors = {};
193
194
  for (const issue of error.issues) {
@@ -207,7 +208,7 @@ export function flattenError(error) {
207
208
  /**
208
209
  * Create a validation issue
209
210
  */
210
- export function createIssue(code, path, message, extra) {
211
+ function createIssue(code, path, message, extra) {
211
212
  return {
212
213
  code,
213
214
  path: [...path],
@@ -218,7 +219,7 @@ export function createIssue(code, path, message, extra) {
218
219
  /**
219
220
  * Helper to determine the type of a value for error messages
220
221
  */
221
- export function getValueType(value) {
222
+ function getValueType(value) {
222
223
  if (value === null)
223
224
  return 'null';
224
225
  if (value === undefined)
@@ -229,4 +230,6 @@ export function getValueType(value) {
229
230
  return 'date';
230
231
  return typeof value;
231
232
  }
232
- //# sourceMappingURL=errors.js.map
233
+
234
+ export { VldError, createIssue, flattenError, getValueType, prettifyError, prettifyErrorColored, prettifyErrorPlain, treeifyError };
235
+ //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["// VLD Error System - Advanced error formatting and utilities\r\n\r\nimport { type Theme, vldTheme } from './pigment';\r\n\r\nexport type VldErrorCode =\r\n | 'invalid_type'\r\n | 'invalid_string'\r\n | 'string_too_small'\r\n | 'string_too_big'\r\n | 'invalid_email'\r\n | 'invalid_url'\r\n | 'invalid_uuid'\r\n | 'invalid_regex'\r\n | 'invalid_number'\r\n | 'too_small'\r\n | 'too_big'\r\n | 'not_integer'\r\n | 'not_finite'\r\n | 'not_safe'\r\n | 'invalid_boolean'\r\n | 'invalid_date'\r\n | 'invalid_array'\r\n | 'invalid_object'\r\n | 'unrecognized_keys'\r\n | 'invalid_union'\r\n | 'invalid_literal'\r\n | 'invalid_enum'\r\n | 'custom';\r\n\r\nexport interface VldIssue {\r\n code: VldErrorCode;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n}\r\n\r\nexport class VldError extends Error {\r\n public readonly issues: VldIssue[];\r\n\r\n constructor(issues: VldIssue[]) {\r\n const message =\r\n issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;\r\n\r\n super(message);\r\n this.name = 'VldError';\r\n this.issues = issues;\r\n\r\n // Maintain proper stack trace\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, VldError);\r\n }\r\n }\r\n\r\n get firstError(): VldIssue | undefined {\r\n return this.issues[0];\r\n }\r\n\r\n get formattedErrors(): string[] {\r\n return this.issues.map((issue) => issue.message);\r\n }\r\n\r\n /**\r\n * Convert error to JSON representation\r\n * Compatible with @oxog/types OxogError\r\n */\r\n toJSON(): VldErrorJSON {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n code: 'VLD_VALIDATION_ERROR',\r\n issues: this.issues.map((issue) => ({\r\n code: issue.code,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * Create VldError from JSON representation\r\n */\r\n static fromJSON(json: VldErrorJSON): VldError {\r\n const issues: VldIssue[] = json.issues.map((issue) => ({\r\n code: issue.code as VldErrorCode,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }));\r\n return new VldError(issues);\r\n }\r\n\r\n /**\r\n * Check if a value is a VldError\r\n */\r\n static isVldError(value: unknown): value is VldError {\r\n return value instanceof VldError;\r\n }\r\n}\r\n\r\n/**\r\n * JSON representation of VldError\r\n */\r\nexport interface VldErrorJSON {\r\n name: string;\r\n message: string;\r\n code: string;\r\n issues: Array<{\r\n code: string;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n }>;\r\n}\r\n\r\n// Error tree structure for nested validation\r\nexport interface VldErrorTree {\r\n errors: string[];\r\n properties?: Record<string, VldErrorTree>;\r\n items?: (VldErrorTree | undefined)[];\r\n}\r\n\r\n// Flattened error structure for simple forms\r\nexport interface VldFlattenedError {\r\n formErrors: string[];\r\n fieldErrors: Record<string, string[]>;\r\n}\r\n\r\n/**\r\n * Convert VldError to a nested tree structure\r\n */\r\nexport function treeifyError(error: VldError): VldErrorTree {\r\n const tree: VldErrorTree = { errors: [] };\r\n\r\n for (const issue of error.issues) {\r\n let currentNode = tree;\r\n const path = issue.path;\r\n\r\n // Navigate to the correct position in the tree\r\n for (let i = 0; i < path.length; i++) {\r\n const segment = path[i];\r\n const isLast = i === path.length - 1;\r\n\r\n if (typeof segment === 'string') {\r\n // Object property\r\n if (!currentNode.properties) {\r\n currentNode.properties = {};\r\n }\r\n \r\n if (!currentNode.properties[segment]) {\r\n currentNode.properties[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.properties[segment].errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.properties[segment];\r\n }\r\n } else if (typeof segment === 'number') {\r\n // Array index\r\n if (!currentNode.items) {\r\n currentNode.items = [];\r\n }\r\n \r\n while (currentNode.items.length <= segment) {\r\n currentNode.items.push(undefined);\r\n }\r\n \r\n if (!currentNode.items[segment]) {\r\n currentNode.items[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.items[segment]!.errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.items[segment]!;\r\n }\r\n }\r\n }\r\n\r\n // If path is empty, add to root errors\r\n if (path.length === 0) {\r\n tree.errors.push(issue.message);\r\n }\r\n }\r\n\r\n return tree;\r\n}\r\n\r\n/**\r\n * Prettify error options\r\n */\r\nexport interface PrettifyOptions {\r\n /** Enable colored output */\r\n colored?: boolean;\r\n /** Custom theme for colors */\r\n theme?: Theme;\r\n /** Include error code in output */\r\n includeCode?: boolean;\r\n /** Include expected/received values */\r\n includeDetails?: boolean;\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string\r\n */\r\nexport function prettifyError(error: VldError, options: PrettifyOptions = {}): string {\r\n const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } =\r\n options;\r\n\r\n const lines: string[] = [];\r\n\r\n for (const issue of error.issues) {\r\n // Symbol and message\r\n const symbol = colored ? theme.symbol('✖') : '✖';\r\n const message = colored ? theme.error(issue.message) : issue.message;\r\n let line = `${symbol} ${message}`;\r\n\r\n // Error code\r\n if (includeCode) {\r\n const code = colored ? theme.muted(`[${issue.code}]`) : `[${issue.code}]`;\r\n line += ` ${code}`;\r\n }\r\n\r\n // Path\r\n if (issue.path.length > 0) {\r\n const pathStr = issue.path\r\n .map((segment, index) => {\r\n if (typeof segment === 'string') {\r\n const str = index === 0 ? segment : `.${segment}`;\r\n return colored ? theme.path(str) : str;\r\n } else {\r\n const str = `[${segment}]`;\r\n return colored ? theme.path(str) : str;\r\n }\r\n })\r\n .join('');\r\n\r\n const arrow = colored ? theme.muted('→ at ') : '→ at ';\r\n line += `\\n ${arrow}${pathStr}`;\r\n }\r\n\r\n // Details\r\n if (includeDetails) {\r\n if (issue.expected) {\r\n const expected = colored\r\n ? theme.muted('expected: ') + theme.success(issue.expected)\r\n : `expected: ${issue.expected}`;\r\n line += `\\n ${expected}`;\r\n }\r\n if (issue.received) {\r\n const received = colored\r\n ? theme.muted('received: ') + theme.warning(issue.received)\r\n : `received: ${issue.received}`;\r\n line += `\\n ${received}`;\r\n }\r\n }\r\n\r\n lines.push(line);\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string with full colors\r\n * Shorthand for prettifyError with colored: true\r\n */\r\nexport function prettifyErrorColored(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: true });\r\n}\r\n\r\n/**\r\n * Convert VldError to plain text string (no colors)\r\n * Shorthand for prettifyError with colored: false\r\n */\r\nexport function prettifyErrorPlain(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: false });\r\n}\r\n\r\n/**\r\n * Flatten VldError for simple form validation\r\n */\r\nexport function flattenError(error: VldError): VldFlattenedError {\r\n const formErrors: string[] = [];\r\n const fieldErrors: Record<string, string[]> = {};\r\n\r\n for (const issue of error.issues) {\r\n if (issue.path.length === 0) {\r\n formErrors.push(issue.message);\r\n } else {\r\n const fieldName = issue.path[0].toString();\r\n if (!fieldErrors[fieldName]) {\r\n fieldErrors[fieldName] = [];\r\n }\r\n fieldErrors[fieldName].push(issue.message);\r\n }\r\n }\r\n\r\n return { formErrors, fieldErrors };\r\n}\r\n\r\n/**\r\n * Create a validation issue\r\n */\r\nexport function createIssue(\r\n code: VldErrorCode,\r\n path: (string | number)[],\r\n message: string,\r\n extra?: Partial<VldIssue>\r\n): VldIssue {\r\n return {\r\n code,\r\n path: [...path],\r\n message,\r\n ...extra\r\n };\r\n}\r\n\r\n/**\r\n * Helper to determine the type of a value for error messages\r\n */\r\nexport function getValueType(value: unknown): string {\r\n if (value === null) return 'null';\r\n if (value === undefined) return 'undefined';\r\n if (Array.isArray(value)) return 'array';\r\n if (value instanceof Date) return 'date';\r\n return typeof value;\r\n}"]}
1
+ {"version":3,"file":"errors.js","sources":["../src/errors.ts"],"sourcesContent":["// VLD Error System - Advanced error formatting and utilities\r\n\r\nimport { type Theme, vldTheme } from './pigment';\r\n\r\nexport type VldErrorCode =\r\n | 'invalid_type'\r\n | 'invalid_string'\r\n | 'string_too_small'\r\n | 'string_too_big'\r\n | 'invalid_email'\r\n | 'invalid_url'\r\n | 'invalid_uuid'\r\n | 'invalid_regex'\r\n | 'invalid_number'\r\n | 'too_small'\r\n | 'too_big'\r\n | 'not_integer'\r\n | 'not_finite'\r\n | 'not_safe'\r\n | 'invalid_boolean'\r\n | 'invalid_date'\r\n | 'invalid_array'\r\n | 'invalid_object'\r\n | 'unrecognized_keys'\r\n | 'invalid_union'\r\n | 'invalid_literal'\r\n | 'invalid_enum'\r\n | 'custom';\r\n\r\nexport interface VldIssue {\r\n code: VldErrorCode;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n}\r\n\r\nexport class VldError extends Error {\r\n public readonly issues: VldIssue[];\r\n\r\n constructor(issues: VldIssue[]) {\r\n const message =\r\n issues.length === 1 ? issues[0].message : `${issues.length} validation errors`;\r\n\r\n super(message);\r\n this.name = 'VldError';\r\n this.issues = issues;\r\n\r\n // Maintain proper stack trace\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, VldError);\r\n }\r\n }\r\n\r\n get firstError(): VldIssue | undefined {\r\n return this.issues[0];\r\n }\r\n\r\n get formattedErrors(): string[] {\r\n return this.issues.map((issue) => issue.message);\r\n }\r\n\r\n /**\r\n * Convert error to JSON representation\r\n * Compatible with @oxog/types OxogError\r\n */\r\n toJSON(): VldErrorJSON {\r\n return {\r\n name: this.name,\r\n message: this.message,\r\n code: 'VLD_VALIDATION_ERROR',\r\n issues: this.issues.map((issue) => ({\r\n code: issue.code,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * Create VldError from JSON representation\r\n */\r\n static fromJSON(json: VldErrorJSON): VldError {\r\n const issues: VldIssue[] = json.issues.map((issue) => ({\r\n code: issue.code as VldErrorCode,\r\n path: issue.path,\r\n message: issue.message,\r\n expected: issue.expected,\r\n received: issue.received,\r\n keys: issue.keys,\r\n minimum: issue.minimum,\r\n maximum: issue.maximum,\r\n exact: issue.exact,\r\n inclusive: issue.inclusive\r\n }));\r\n return new VldError(issues);\r\n }\r\n\r\n /**\r\n * Check if a value is a VldError\r\n */\r\n static isVldError(value: unknown): value is VldError {\r\n return value instanceof VldError;\r\n }\r\n}\r\n\r\n/**\r\n * JSON representation of VldError\r\n */\r\nexport interface VldErrorJSON {\r\n name: string;\r\n message: string;\r\n code: string;\r\n issues: Array<{\r\n code: string;\r\n path: (string | number)[];\r\n message: string;\r\n expected?: string;\r\n received?: string;\r\n keys?: string[];\r\n minimum?: number;\r\n maximum?: number;\r\n exact?: number;\r\n inclusive?: boolean;\r\n }>;\r\n}\r\n\r\n// Error tree structure for nested validation\r\nexport interface VldErrorTree {\r\n errors: string[];\r\n properties?: Record<string, VldErrorTree>;\r\n items?: (VldErrorTree | undefined)[];\r\n}\r\n\r\n// Flattened error structure for simple forms\r\nexport interface VldFlattenedError {\r\n formErrors: string[];\r\n fieldErrors: Record<string, string[]>;\r\n}\r\n\r\n/**\r\n * Convert VldError to a nested tree structure\r\n */\r\nexport function treeifyError(error: VldError): VldErrorTree {\r\n const tree: VldErrorTree = { errors: [] };\r\n\r\n for (const issue of error.issues) {\r\n let currentNode = tree;\r\n const path = issue.path;\r\n\r\n // Navigate to the correct position in the tree\r\n for (let i = 0; i < path.length; i++) {\r\n const segment = path[i];\r\n const isLast = i === path.length - 1;\r\n\r\n if (typeof segment === 'string') {\r\n // Object property\r\n if (!currentNode.properties) {\r\n currentNode.properties = {};\r\n }\r\n \r\n if (!currentNode.properties[segment]) {\r\n currentNode.properties[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.properties[segment].errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.properties[segment];\r\n }\r\n } else if (typeof segment === 'number') {\r\n // Array index\r\n if (!currentNode.items) {\r\n currentNode.items = [];\r\n }\r\n \r\n while (currentNode.items.length <= segment) {\r\n currentNode.items.push(undefined);\r\n }\r\n \r\n if (!currentNode.items[segment]) {\r\n currentNode.items[segment] = { errors: [] };\r\n }\r\n \r\n if (isLast) {\r\n currentNode.items[segment]!.errors.push(issue.message);\r\n } else {\r\n currentNode = currentNode.items[segment]!;\r\n }\r\n }\r\n }\r\n\r\n // If path is empty, add to root errors\r\n if (path.length === 0) {\r\n tree.errors.push(issue.message);\r\n }\r\n }\r\n\r\n return tree;\r\n}\r\n\r\n/**\r\n * Prettify error options\r\n */\r\nexport interface PrettifyOptions {\r\n /** Enable colored output */\r\n colored?: boolean;\r\n /** Custom theme for colors */\r\n theme?: Theme;\r\n /** Include error code in output */\r\n includeCode?: boolean;\r\n /** Include expected/received values */\r\n includeDetails?: boolean;\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string\r\n */\r\nexport function prettifyError(error: VldError, options: PrettifyOptions = {}): string {\r\n const { colored = true, theme = vldTheme, includeCode = false, includeDetails = false } =\r\n options;\r\n\r\n const lines: string[] = [];\r\n\r\n for (const issue of error.issues) {\r\n // Symbol and message\r\n const symbol = colored ? theme.symbol('✖') : '✖';\r\n const message = colored ? theme.error(issue.message) : issue.message;\r\n let line = `${symbol} ${message}`;\r\n\r\n // Error code\r\n if (includeCode) {\r\n const code = colored ? theme.muted(`[${issue.code}]`) : `[${issue.code}]`;\r\n line += ` ${code}`;\r\n }\r\n\r\n // Path\r\n if (issue.path.length > 0) {\r\n const pathStr = issue.path\r\n .map((segment, index) => {\r\n if (typeof segment === 'string') {\r\n const str = index === 0 ? segment : `.${segment}`;\r\n return colored ? theme.path(str) : str;\r\n } else {\r\n const str = `[${segment}]`;\r\n return colored ? theme.path(str) : str;\r\n }\r\n })\r\n .join('');\r\n\r\n const arrow = colored ? theme.muted('→ at ') : '→ at ';\r\n line += `\\n ${arrow}${pathStr}`;\r\n }\r\n\r\n // Details\r\n if (includeDetails) {\r\n if (issue.expected) {\r\n const expected = colored\r\n ? theme.muted('expected: ') + theme.success(issue.expected)\r\n : `expected: ${issue.expected}`;\r\n line += `\\n ${expected}`;\r\n }\r\n if (issue.received) {\r\n const received = colored\r\n ? theme.muted('received: ') + theme.warning(issue.received)\r\n : `received: ${issue.received}`;\r\n line += `\\n ${received}`;\r\n }\r\n }\r\n\r\n lines.push(line);\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Convert VldError to human-readable string with full colors\r\n * Shorthand for prettifyError with colored: true\r\n */\r\nexport function prettifyErrorColored(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: true });\r\n}\r\n\r\n/**\r\n * Convert VldError to plain text string (no colors)\r\n * Shorthand for prettifyError with colored: false\r\n */\r\nexport function prettifyErrorPlain(error: VldError, options: Omit<PrettifyOptions, 'colored'> = {}): string {\r\n return prettifyError(error, { ...options, colored: false });\r\n}\r\n\r\n/**\r\n * Flatten VldError for simple form validation\r\n */\r\nexport function flattenError(error: VldError): VldFlattenedError {\r\n const formErrors: string[] = [];\r\n const fieldErrors: Record<string, string[]> = {};\r\n\r\n for (const issue of error.issues) {\r\n if (issue.path.length === 0) {\r\n formErrors.push(issue.message);\r\n } else {\r\n const fieldName = issue.path[0].toString();\r\n if (!fieldErrors[fieldName]) {\r\n fieldErrors[fieldName] = [];\r\n }\r\n fieldErrors[fieldName].push(issue.message);\r\n }\r\n }\r\n\r\n return { formErrors, fieldErrors };\r\n}\r\n\r\n/**\r\n * Create a validation issue\r\n */\r\nexport function createIssue(\r\n code: VldErrorCode,\r\n path: (string | number)[],\r\n message: string,\r\n extra?: Partial<VldIssue>\r\n): VldIssue {\r\n return {\r\n code,\r\n path: [...path],\r\n message,\r\n ...extra\r\n };\r\n}\r\n\r\n/**\r\n * Helper to determine the type of a value for error messages\r\n */\r\nexport function getValueType(value: unknown): string {\r\n if (value === null) return 'null';\r\n if (value === undefined) return 'undefined';\r\n if (Array.isArray(value)) return 'array';\r\n if (value instanceof Date) return 'date';\r\n return typeof value;\r\n}"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,196 @@
1
+ import { h as VldPreprocess, g as VldNullish, f as VldNullable, e as VldOptional, d as VldBigInt, c as VldDate, b as VldBoolean, a as VldNumber, V as VldString } from './chunks/bigint-ZKkWLdmi.js';
2
+ export { i as VldBase, r as getLocale, t as getMessages, s as setLocale } from './chunks/bigint-ZKkWLdmi.js';
3
+ import { u as VldJson, t as VldLazy, p as VldNever, s as VldNan, r as VldUndefined, q as VldNull, o as VldVoid, n as VldAny, m as VldEnum, l as VldLiteral, k as VldXor, j as VldDiscriminatedUnion, i as VldIntersection, h as VldUnion, g as VldMap, f as VldSet, e as VldRecord, d as VldTuple, c as VldObject, b as VldArray, a as VldStringBool, V as VldSymbol } from './chunks/json-nIhyRPOU.js';
4
+ import { V as VldUnknown } from './chunks/unknown-CjSRcELI.js';
5
+ import { t as templateLiteral, s as stringFormat, i as iso, h as hash, e as e164, c as cidrv6, a as cidrv4, m as mac, b as ipv6, d as ipv4, u as ulid, f as cuid2, g as cuid, n as nanoid, j as jwt, k as hex, l as base64url, o as base64, p as emoji, q as hostname, r as uuidv4, v as uuid, w as email, x as functionValidator, y as file, z as custom } from './chunks/index-eWXdjyyy.js';
6
+ import { V as VldCodec, a as VldUint8Array, b as VldHex, c as VldBase64 } from './chunks/index-BoV-4S1F.js';
7
+ export { D as base64Json, w as base64ToBytes, d as base64ToUint8Array, x as base64UrlToBytes, y as base64urlToBytes, C as bytesToUtf8, p as epochMillisToDate, o as epochSecondsToDate, A as hexLowerToBytes, z as hexToBytes, h as hexToUint8Array, m as isoDatetimeToDate, q as jsonCodec, E as jwtPayload, n as numberToBigInt, k as stringToBigInt, l as stringToBoolean, t as stringToHttpURL, j as stringToInt, i as stringToNumber, r as stringToURL, s as stringToUint8Array, u as uint8ArrayToBase64, e as uint8ArrayToBase64Url, f as uint8ArrayToHex, g as uint8ArrayToString, v as uriComponent, B as utf8ToBytes } from './chunks/index-BoV-4S1F.js';
8
+ import { V as VldCoerceDate, a as VldCoerceBoolean, b as VldCoerceNumber, c as VldCoerceString } from './chunks/date-7Iz2BGsL.js';
9
+ import { VldCoerceBigInt } from './coercion/index.js';
10
+ export { VldError, flattenError, prettifyError, prettifyErrorColored, prettifyErrorPlain, treeifyError } from './errors.js';
11
+ export { Err, Ok, ResultUtils, all, failure, flatMap, fromNullable, isErr, isOk, isResult, map, mapErr, match, success, tryCatch, tryCatchAsync, unwrap, unwrapOr } from './compat/result.js';
12
+ export { createEmitter, createEventBus, withEmitter } from './compat/emitter.js';
13
+ export { createVldKernel, definePlugin, getVldKernel, resetVldKernel, usePlugin } from './kernel.js';
14
+ export { blue, bold, createTheme, cyan, dim, gray, green, grey, italic, magenta, pigment, red, strip, supportsColor, underline, vldTheme, white, yellow } from './pigment.js';
15
+
16
+ /**
17
+ * VLD Logger
18
+ *
19
+ * This module provides a debug logging system for VLD,
20
+ * compatible with @oxog/log when available.
21
+ */
22
+ /**
23
+ * Log level priorities (lower = more verbose)
24
+ */
25
+ const LOG_LEVEL_PRIORITY = {
26
+ debug: 0,
27
+ info: 1,
28
+ warn: 2,
29
+ error: 3,
30
+ silent: 4
31
+ };
32
+ /**
33
+ * ANSI color codes for terminal output
34
+ */
35
+ const COLORS = {
36
+ reset: '\x1b[0m',
37
+ dim: '\x1b[2m',
38
+ red: '\x1b[31m',
39
+ yellow: '\x1b[33m',
40
+ blue: '\x1b[34m',
41
+ cyan: '\x1b[36m',
42
+ gray: '\x1b[90m'
43
+ };
44
+ /**
45
+ * Level colors
46
+ */
47
+ const LEVEL_COLORS = {
48
+ debug: COLORS.gray,
49
+ info: COLORS.blue,
50
+ warn: COLORS.yellow,
51
+ error: COLORS.red
52
+ };
53
+ /**
54
+ * Level labels
55
+ */
56
+ const LEVEL_LABELS = {
57
+ debug: 'DEBUG',
58
+ info: 'INFO ',
59
+ warn: 'WARN ',
60
+ error: 'ERROR'
61
+ };
62
+ /**
63
+ * Default log handler
64
+ */
65
+ function createDefaultHandler(options) {
66
+ const colored = options.colored ?? true;
67
+ const timestamps = options.timestamps ?? true;
68
+ return (entry) => {
69
+ const parts = [];
70
+ // Timestamp
71
+ if (timestamps) {
72
+ const time = entry.timestamp.toISOString().slice(11, 23);
73
+ parts.push(colored ? `${COLORS.dim}${time}${COLORS.reset}` : time);
74
+ }
75
+ // Level
76
+ const levelLabel = LEVEL_LABELS[entry.level];
77
+ const levelColor = LEVEL_COLORS[entry.level];
78
+ parts.push(colored ? `${levelColor}${levelLabel}${COLORS.reset}` : levelLabel);
79
+ // Name
80
+ parts.push(colored ? `${COLORS.cyan}[${entry.name}]${COLORS.reset}` : `[${entry.name}]`);
81
+ // Message
82
+ parts.push(entry.message);
83
+ // Output
84
+ const output = parts.join(' ');
85
+ // Use appropriate console method
86
+ switch (entry.level) {
87
+ case 'debug':
88
+ console.debug(output, entry.data !== undefined ? entry.data : '');
89
+ break;
90
+ case 'info':
91
+ console.info(output, entry.data !== undefined ? entry.data : '');
92
+ break;
93
+ case 'warn':
94
+ console.warn(output, entry.data !== undefined ? entry.data : '');
95
+ break;
96
+ case 'error':
97
+ console.error(output, entry.data !== undefined ? entry.data : '');
98
+ break;
99
+ }
100
+ };
101
+ }
102
+ /**
103
+ * Create a logger instance
104
+ */
105
+ function createLogger(options = {}) {
106
+ const name = options.name ?? 'vld';
107
+ let level = options.level ?? 'warn';
108
+ const handler = options.handler ?? createDefaultHandler(options);
109
+ const log = (logLevel, message, data) => {
110
+ if (LOG_LEVEL_PRIORITY[logLevel] < LOG_LEVEL_PRIORITY[level]) {
111
+ return;
112
+ }
113
+ const entry = {
114
+ level: logLevel,
115
+ message,
116
+ data,
117
+ timestamp: new Date(),
118
+ name
119
+ };
120
+ handler(entry);
121
+ };
122
+ const logger = {
123
+ debug: (message, data) => log('debug', message, data),
124
+ info: (message, data) => log('info', message, data),
125
+ warn: (message, data) => log('warn', message, data),
126
+ error: (message, data) => log('error', message, data),
127
+ isLevelEnabled: (checkLevel) => LOG_LEVEL_PRIORITY[checkLevel] >= LOG_LEVEL_PRIORITY[level],
128
+ setLevel: (newLevel) => {
129
+ level = newLevel;
130
+ },
131
+ getLevel: () => level,
132
+ child: (childName) => createLogger({
133
+ ...options,
134
+ name: `${name}:${childName}`
135
+ })
136
+ };
137
+ return logger;
138
+ }
139
+ // ============================================
140
+ // Global Logger Management
141
+ // ============================================
142
+ let globalLogger = null;
143
+ /**
144
+ * Initialize the global VLD logger
145
+ */
146
+ function initLogger(options) {
147
+ globalLogger = createLogger({
148
+ name: 'vld',
149
+ ...options
150
+ });
151
+ return globalLogger;
152
+ }
153
+ /**
154
+ * Get the global VLD logger
155
+ * Returns null if not initialized
156
+ */
157
+ function getLogger() {
158
+ return globalLogger;
159
+ }
160
+ /**
161
+ * Set log level for the global logger
162
+ */
163
+ function setLogLevel(level) {
164
+ if (globalLogger) {
165
+ globalLogger.setLevel(level);
166
+ }
167
+ }
168
+ /**
169
+ * Enable debug mode for VLD
170
+ */
171
+ function enableDebug() {
172
+ if (!globalLogger) {
173
+ initLogger({ level: 'debug' });
174
+ }
175
+ else {
176
+ globalLogger.setLevel('debug');
177
+ }
178
+ }
179
+ /**
180
+ * Disable all VLD logging
181
+ */
182
+ function disableLogging() {
183
+ if (globalLogger) {
184
+ globalLogger.setLevel('silent');
185
+ }
186
+ }
187
+ /**
188
+ * Create a no-op logger for testing
189
+ */
190
+ function createNoOpLogger() {
191
+ return createLogger({ level: 'silent' });
192
+ }
193
+
1
194
  /**
2
195
  * VLD - Fast, Type-Safe Validation Library
3
196
  * Zero dependencies, blazing fast performance
@@ -14,81 +207,10 @@
14
207
  * - Debug logging system
15
208
  */
16
209
  // Import validators
17
- import { VldString } from './validators/string.js';
18
- import { VldNumber } from './validators/number.js';
19
- import { VldBoolean } from './validators/boolean.js';
20
- import { VldDate } from './validators/date.js';
21
- import { VldStringBool } from './validators/string-bool.js';
22
- import { VldArray } from './validators/array.js';
23
- import { VldObject } from './validators/object.js';
24
- import { VldUnion } from './validators/union.js';
25
- import { VldLiteral } from './validators/literal.js';
26
- import { VldBigInt } from './validators/bigint.js';
27
- import { VldSymbol } from './validators/symbol.js';
28
- import { VldTuple } from './validators/tuple.js';
29
- import { VldRecord } from './validators/record.js';
30
- import { VldSet } from './validators/set.js';
31
- import { VldMap } from './validators/map.js';
32
- import { VldEnum } from './validators/enum.js';
33
- import { VldIntersection } from './validators/intersection.js';
34
- import { VldAny } from './validators/any.js';
35
- import { VldUnknown } from './validators/unknown.js';
36
- import { VldVoid } from './validators/void.js';
37
- import { VldNever } from './validators/never.js';
38
- import { VldNull } from './validators/null.js';
39
- import { VldUndefined } from './validators/undefined.js';
40
- import { VldNan } from './validators/nan.js';
41
- import { VldLazy } from './validators/lazy.js';
42
- import { VldDiscriminatedUnion } from './validators/discriminated-union.js';
43
- import { VldXor } from './validators/xor.js';
44
- import { VldJson } from './validators/json.js';
45
- import { templateLiteral } from './validators/template-literal.js';
46
- import { custom as customFn } from './validators/custom.js';
47
- import { file as fileFn } from './validators/file.js';
48
- import { functionValidator as functionFn } from './validators/function.js';
49
- import { VldPreprocess } from './validators/base.js';
50
- import { VldOptional } from './validators/base.js';
51
- import { VldNullable } from './validators/base.js';
52
- import { VldNullish } from './validators/base.js';
53
- import { VldCodec } from './validators/codec.js';
54
- import { VldBase64 } from './validators/base64.js';
55
- import { VldHex } from './validators/hex.js';
56
- import { VldUint8Array } from './validators/uint8array.js';
57
- // Import coercion validators
58
- import { VldCoerceString } from './coercion/string.js';
59
- import { VldCoerceNumber } from './coercion/number.js';
60
- import { VldCoerceBoolean } from './coercion/boolean.js';
61
- import { VldCoerceDate } from './coercion/date.js';
62
- import { VldCoerceBigInt } from './coercion/bigint.js';
63
- // Import string format validators
64
- import * as stringFormats from './validators/string-formats.js';
65
- // Re-export base classes for extension
66
- export { VldBase } from './validators/base.js';
67
- export { VldIntersection } from './validators/intersection.js';
68
- // Re-export locale functionality
69
- export { setLocale, getLocale, getMessages } from './locales/index.js';
70
- // Re-export error formatting utilities
71
- export { VldError, treeifyError, prettifyError, prettifyErrorColored, prettifyErrorPlain, flattenError } from './errors.js';
72
- // Re-export codec utilities
73
- export { base64ToUint8Array, uint8ArrayToBase64, uint8ArrayToBase64Url, hexToUint8Array, uint8ArrayToHex, stringToUint8Array, uint8ArrayToString } from './utils/codec-utils.js';
74
- // Re-export predefined codecs
75
- export {
76
- // String conversion codecs
77
- stringToNumber, stringToInt, stringToBigInt, numberToBigInt, stringToBoolean,
78
- // Date conversion codecs
79
- isoDatetimeToDate, epochSecondsToDate, epochMillisToDate,
80
- // JSON codec
81
- jsonCodec,
82
- // URL codecs
83
- stringToURL, stringToHttpURL, uriComponent,
84
- // Byte conversion codecs
85
- base64ToBytes, base64UrlToBytes, base64urlToBytes, hexToBytes, hexLowerToBytes, utf8ToBytes, bytesToUtf8,
86
- // Complex codecs
87
- base64Json, jwtPayload } from './codecs/index.js';
88
210
  /**
89
211
  * Main API object with factory methods for all validators
90
212
  */
91
- export const v = {
213
+ const v = {
92
214
  // Primitive validators
93
215
  string: () => VldString.create(),
94
216
  number: () => VldNumber.create(),
@@ -137,11 +259,11 @@ export const v = {
137
259
  // JSON validator
138
260
  json: (schema) => VldJson.create(schema),
139
261
  // Custom validator for type-safe user-defined schemas
140
- custom: (options) => customFn(options),
262
+ custom: (options) => custom(options),
141
263
  // File validator for file uploads
142
- file: () => fileFn(),
264
+ file: () => file(),
143
265
  // Function validator for function validation
144
- function: () => functionFn(),
266
+ function: () => functionValidator(),
145
267
  // Preprocessing
146
268
  preprocess: (preprocessor, schema) => VldPreprocess.create(preprocessor, schema),
147
269
  // Coercion API
@@ -153,33 +275,33 @@ export const v = {
153
275
  bigint: () => VldCoerceBigInt.create(),
154
276
  },
155
277
  // String format validators (Zod 4 parity)
156
- email: (options) => stringFormats.email(options),
157
- uuid: (options) => stringFormats.uuid(options),
158
- uuidv4: () => stringFormats.uuidv4(),
159
- hostname: () => stringFormats.hostname(),
160
- emoji: () => stringFormats.emoji(),
161
- base64: () => stringFormats.base64(),
162
- base64url: () => stringFormats.base64url(),
163
- hex: () => stringFormats.hex(),
164
- jwt: () => stringFormats.jwt(),
165
- nanoid: () => stringFormats.nanoid(),
166
- cuid: () => stringFormats.cuid(),
167
- cuid2: () => stringFormats.cuid2(),
168
- ulid: () => stringFormats.ulid(),
169
- ipv4: () => stringFormats.ipv4(),
170
- ipv6: () => stringFormats.ipv6(),
171
- mac: () => stringFormats.mac(),
172
- cidrv4: () => stringFormats.cidrv4(),
173
- cidrv6: () => stringFormats.cidrv6(),
174
- e164: () => stringFormats.e164(),
175
- hash: (algorithm) => stringFormats.hash(algorithm),
278
+ email: (options) => email(options),
279
+ uuid: (options) => uuid(options),
280
+ uuidv4: () => uuidv4(),
281
+ hostname: () => hostname(),
282
+ emoji: () => emoji(),
283
+ base64: () => base64(),
284
+ base64url: () => base64url(),
285
+ hex: () => hex(),
286
+ jwt: () => jwt(),
287
+ nanoid: () => nanoid(),
288
+ cuid: () => cuid(),
289
+ cuid2: () => cuid2(),
290
+ ulid: () => ulid(),
291
+ ipv4: () => ipv4(),
292
+ ipv6: () => ipv6(),
293
+ mac: () => mac(),
294
+ cidrv4: () => cidrv4(),
295
+ cidrv6: () => cidrv6(),
296
+ e164: () => e164(),
297
+ hash: (algorithm) => hash(algorithm),
176
298
  iso: {
177
- date: () => stringFormats.iso.date(),
178
- time: () => stringFormats.iso.time(),
179
- dateTime: () => stringFormats.iso.dateTime(),
180
- duration: () => stringFormats.iso.duration(),
299
+ date: () => iso.date(),
300
+ time: () => iso.time(),
301
+ dateTime: () => iso.dateTime(),
302
+ duration: () => iso.duration(),
181
303
  },
182
- stringFormat: (name, validator) => stringFormats.stringFormat(name, validator),
304
+ stringFormat: (name, validator) => stringFormat(name, validator),
183
305
  // Template literal validator
184
306
  templateLiteral: (...components) => templateLiteral(...components),
185
307
  // Codec validators (binary data validators)
@@ -189,29 +311,6 @@ export const v = {
189
311
  // Codec factory
190
312
  codec: (inputValidator, outputValidator, transform) => VldCodec.create(inputValidator, outputValidator, transform)
191
313
  };
192
- export { Ok, Err, success, failure, isOk, isErr, isResult, unwrap, unwrapOr, map, mapErr, flatMap, match, tryCatch, tryCatchAsync, all, fromNullable, ResultUtils } from './compat/result.js';
193
- // ============================================
194
- // Event Emitter (v1.5+ features)
195
- // ============================================
196
- export {
197
- // Factory functions
198
- createEmitter, createEventBus, withEmitter } from './compat/emitter.js';
199
- // ============================================
200
- // Plugin System (v1.5+ features)
201
- // ============================================
202
- export {
203
- // Kernel
204
- createVldKernel, getVldKernel, resetVldKernel, usePlugin, definePlugin } from './kernel.js';
205
- // ============================================
206
- // Logger (v1.5+ features)
207
- // ============================================
208
- export {
209
- // Logger
210
- createLogger, initLogger, getLogger, setLogLevel, enableDebug, disableLogging, createNoOpLogger } from './logger.js';
211
- // ============================================
212
- // Pigment - Colored Output (v1.5+ features)
213
- // ============================================
214
- export { pigment, supportsColor, bold, dim, italic, underline, red, green, yellow, blue, magenta, cyan, white, gray, grey, strip, vldTheme, createTheme } from './pigment.js';
215
- // For backward compatibility during migration
216
- export default v;
217
- //# sourceMappingURL=index.js.map
314
+
315
+ export { VldIntersection, createLogger, createNoOpLogger, v as default, disableLogging, enableDebug, getLogger, initLogger, setLogLevel, v };
316
+ //# sourceMappingURL=index.js.map