@oxog/vld 1.3.1 → 1.5.0

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 (334) hide show
  1. package/CHANGELOG.md +333 -284
  2. package/README.md +13 -12
  3. package/dist/cli/benchmark.d.ts +15 -0
  4. package/dist/cli/benchmark.d.ts.map +1 -0
  5. package/dist/cli/benchmark.js +248 -0
  6. package/dist/cli/benchmark.js.map +1 -0
  7. package/dist/cli/bin.d.ts +8 -0
  8. package/dist/cli/bin.d.ts.map +1 -0
  9. package/dist/cli/bin.js +35 -0
  10. package/dist/cli/bin.js.map +1 -0
  11. package/dist/cli/commands/benchmark.d.ts +11 -0
  12. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  13. package/dist/cli/commands/benchmark.js +204 -0
  14. package/dist/cli/commands/benchmark.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +11 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +157 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/generate.d.ts +14 -0
  20. package/dist/cli/generate.d.ts.map +1 -0
  21. package/dist/cli/generate.js +233 -0
  22. package/dist/cli/generate.js.map +1 -0
  23. package/dist/cli/index.d.ts +59 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +182 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/validate.d.ts +15 -0
  28. package/dist/cli/validate.d.ts.map +1 -0
  29. package/dist/cli/validate.js +162 -0
  30. package/dist/cli/validate.js.map +1 -0
  31. package/dist/codecs/index.d.ts.map +1 -1
  32. package/dist/codecs/index.js +29 -10
  33. package/dist/codecs/index.js.map +1 -1
  34. package/dist/coercion/bigint.js +1 -1
  35. package/dist/coercion/boolean.d.ts.map +1 -1
  36. package/dist/coercion/boolean.js +24 -32
  37. package/dist/coercion/boolean.js.map +1 -1
  38. package/dist/coercion/date.js +2 -2
  39. package/dist/coercion/date.js.map +1 -1
  40. package/dist/coercion/number.d.ts.map +1 -1
  41. package/dist/coercion/number.js +20 -4
  42. package/dist/coercion/number.js.map +1 -1
  43. package/dist/coercion/string.d.ts.map +1 -1
  44. package/dist/coercion/string.js +9 -73
  45. package/dist/coercion/string.js.map +1 -1
  46. package/dist/compat/emitter.d.ts +73 -0
  47. package/dist/compat/emitter.d.ts.map +1 -0
  48. package/dist/compat/emitter.js +179 -0
  49. package/dist/compat/emitter.js.map +1 -0
  50. package/dist/compat/index.d.ts +15 -0
  51. package/dist/compat/index.d.ts.map +1 -0
  52. package/dist/compat/index.js +14 -0
  53. package/dist/compat/index.js.map +1 -0
  54. package/dist/compat/result.d.ts +128 -0
  55. package/dist/compat/result.d.ts.map +1 -0
  56. package/dist/compat/result.js +169 -0
  57. package/dist/compat/result.js.map +1 -0
  58. package/dist/errors.d.ts +58 -1
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js +97 -9
  61. package/dist/errors.js.map +1 -1
  62. package/dist/events.d.ts +140 -0
  63. package/dist/events.d.ts.map +1 -0
  64. package/dist/events.js +8 -0
  65. package/dist/events.js.map +1 -0
  66. package/dist/guards.d.ts +143 -0
  67. package/dist/guards.d.ts.map +1 -0
  68. package/dist/guards.js +238 -0
  69. package/dist/guards.js.map +1 -0
  70. package/dist/index.d.ts +606 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +105 -6
  73. package/dist/index.js.map +1 -1
  74. package/dist/kernel.d.ts +29 -0
  75. package/dist/kernel.d.ts.map +1 -0
  76. package/dist/kernel.js +402 -0
  77. package/dist/kernel.js.map +1 -0
  78. package/dist/locales/af.d.ts.map +1 -1
  79. package/dist/locales/af.js +18 -1
  80. package/dist/locales/af.js.map +1 -1
  81. package/dist/locales/ar.d.ts.map +1 -1
  82. package/dist/locales/ar.js +18 -1
  83. package/dist/locales/ar.js.map +1 -1
  84. package/dist/locales/backup-en.d.ts +3 -0
  85. package/dist/locales/backup-en.d.ts.map +1 -0
  86. package/dist/locales/backup-en.js +105 -0
  87. package/dist/locales/backup-en.js.map +1 -0
  88. package/dist/locales/bn.d.ts.map +1 -1
  89. package/dist/locales/bn.js +18 -1
  90. package/dist/locales/bn.js.map +1 -1
  91. package/dist/locales/da.d.ts.map +1 -1
  92. package/dist/locales/da.js +18 -1
  93. package/dist/locales/da.js.map +1 -1
  94. package/dist/locales/de.d.ts.map +1 -1
  95. package/dist/locales/de.js +18 -1
  96. package/dist/locales/de.js.map +1 -1
  97. package/dist/locales/en.d.ts.map +1 -1
  98. package/dist/locales/en.js +18 -1
  99. package/dist/locales/en.js.map +1 -1
  100. package/dist/locales/es-MX.d.ts.map +1 -1
  101. package/dist/locales/es-MX.js +17 -1
  102. package/dist/locales/es-MX.js.map +1 -1
  103. package/dist/locales/es.d.ts.map +1 -1
  104. package/dist/locales/es.js +18 -1
  105. package/dist/locales/es.js.map +1 -1
  106. package/dist/locales/fi.d.ts.map +1 -1
  107. package/dist/locales/fi.js +18 -1
  108. package/dist/locales/fi.js.map +1 -1
  109. package/dist/locales/fr.d.ts.map +1 -1
  110. package/dist/locales/fr.js +18 -1
  111. package/dist/locales/fr.js.map +1 -1
  112. package/dist/locales/hi.d.ts.map +1 -1
  113. package/dist/locales/hi.js +18 -1
  114. package/dist/locales/hi.js.map +1 -1
  115. package/dist/locales/id.d.ts.map +1 -1
  116. package/dist/locales/id.js +18 -1
  117. package/dist/locales/id.js.map +1 -1
  118. package/dist/locales/it.d.ts.map +1 -1
  119. package/dist/locales/it.js +18 -1
  120. package/dist/locales/it.js.map +1 -1
  121. package/dist/locales/ja.d.ts.map +1 -1
  122. package/dist/locales/ja.js +18 -1
  123. package/dist/locales/ja.js.map +1 -1
  124. package/dist/locales/ko.d.ts.map +1 -1
  125. package/dist/locales/ko.js +18 -1
  126. package/dist/locales/ko.js.map +1 -1
  127. package/dist/locales/nl.d.ts.map +1 -1
  128. package/dist/locales/nl.js +18 -1
  129. package/dist/locales/nl.js.map +1 -1
  130. package/dist/locales/no.d.ts.map +1 -1
  131. package/dist/locales/no.js +18 -1
  132. package/dist/locales/no.js.map +1 -1
  133. package/dist/locales/pl.d.ts.map +1 -1
  134. package/dist/locales/pl.js +18 -1
  135. package/dist/locales/pl.js.map +1 -1
  136. package/dist/locales/pt-BR.d.ts.map +1 -1
  137. package/dist/locales/pt-BR.js +18 -1
  138. package/dist/locales/pt-BR.js.map +1 -1
  139. package/dist/locales/pt.d.ts.map +1 -1
  140. package/dist/locales/pt.js +18 -1
  141. package/dist/locales/pt.js.map +1 -1
  142. package/dist/locales/ru.d.ts.map +1 -1
  143. package/dist/locales/ru.js +18 -1
  144. package/dist/locales/ru.js.map +1 -1
  145. package/dist/locales/sv.d.ts.map +1 -1
  146. package/dist/locales/sv.js +18 -1
  147. package/dist/locales/sv.js.map +1 -1
  148. package/dist/locales/sw.d.ts.map +1 -1
  149. package/dist/locales/sw.js +18 -1
  150. package/dist/locales/sw.js.map +1 -1
  151. package/dist/locales/th.d.ts.map +1 -1
  152. package/dist/locales/th.js +18 -1
  153. package/dist/locales/th.js.map +1 -1
  154. package/dist/locales/tr.d.ts.map +1 -1
  155. package/dist/locales/tr.js +18 -1
  156. package/dist/locales/tr.js.map +1 -1
  157. package/dist/locales/types.d.ts +13 -0
  158. package/dist/locales/types.d.ts.map +1 -1
  159. package/dist/locales/types.js.map +1 -1
  160. package/dist/locales/vi.d.ts.map +1 -1
  161. package/dist/locales/vi.js +18 -1
  162. package/dist/locales/vi.js.map +1 -1
  163. package/dist/locales/zh.d.ts.map +1 -1
  164. package/dist/locales/zh.js +18 -1
  165. package/dist/locales/zh.js.map +1 -1
  166. package/dist/logger.d.ts +94 -0
  167. package/dist/logger.d.ts.map +1 -0
  168. package/dist/logger.js +184 -0
  169. package/dist/logger.js.map +1 -0
  170. package/dist/pigment.d.ts +124 -0
  171. package/dist/pigment.d.ts.map +1 -0
  172. package/dist/pigment.js +177 -0
  173. package/dist/pigment.js.map +1 -0
  174. package/dist/plugins/codecs.d.ts +17 -0
  175. package/dist/plugins/codecs.d.ts.map +1 -0
  176. package/dist/plugins/codecs.js +29 -0
  177. package/dist/plugins/codecs.js.map +1 -0
  178. package/dist/plugins/coercion.d.ts +13 -0
  179. package/dist/plugins/coercion.d.ts.map +1 -0
  180. package/dist/plugins/coercion.js +34 -0
  181. package/dist/plugins/coercion.js.map +1 -0
  182. package/dist/plugins/core-validators.d.ts +13 -0
  183. package/dist/plugins/core-validators.d.ts.map +1 -0
  184. package/dist/plugins/core-validators.js +96 -0
  185. package/dist/plugins/core-validators.js.map +1 -0
  186. package/dist/plugins/index.d.ts +8 -0
  187. package/dist/plugins/index.d.ts.map +1 -0
  188. package/dist/plugins/index.js +8 -0
  189. package/dist/plugins/index.js.map +1 -0
  190. package/dist/plugins/kernel.d.ts +29 -0
  191. package/dist/plugins/kernel.d.ts.map +1 -0
  192. package/dist/plugins/kernel.js +486 -0
  193. package/dist/plugins/kernel.js.map +1 -0
  194. package/dist/plugins/types.d.ts +186 -0
  195. package/dist/plugins/types.d.ts.map +1 -0
  196. package/dist/plugins/types.js +8 -0
  197. package/dist/plugins/types.js.map +1 -0
  198. package/dist/style.d.ts +123 -0
  199. package/dist/style.d.ts.map +1 -0
  200. package/dist/style.js +369 -0
  201. package/dist/style.js.map +1 -0
  202. package/dist/utils/codec-utils.d.ts +2 -0
  203. package/dist/utils/codec-utils.d.ts.map +1 -1
  204. package/dist/utils/codec-utils.js +28 -4
  205. package/dist/utils/codec-utils.js.map +1 -1
  206. package/dist/utils/deep-merge.d.ts +2 -0
  207. package/dist/utils/deep-merge.d.ts.map +1 -1
  208. package/dist/utils/deep-merge.js +22 -39
  209. package/dist/utils/deep-merge.js.map +1 -1
  210. package/dist/utils/ip-validation.d.ts +11 -0
  211. package/dist/utils/ip-validation.d.ts.map +1 -0
  212. package/dist/utils/ip-validation.js +98 -0
  213. package/dist/utils/ip-validation.js.map +1 -0
  214. package/dist/utils/security.d.ts +12 -0
  215. package/dist/utils/security.d.ts.map +1 -0
  216. package/dist/utils/security.js +61 -0
  217. package/dist/utils/security.js.map +1 -0
  218. package/dist/validators/array.d.ts +3 -1
  219. package/dist/validators/array.d.ts.map +1 -1
  220. package/dist/validators/array.js +41 -15
  221. package/dist/validators/array.js.map +1 -1
  222. package/dist/validators/base.d.ts +134 -0
  223. package/dist/validators/base.d.ts.map +1 -1
  224. package/dist/validators/base.js +255 -1
  225. package/dist/validators/base.js.map +1 -1
  226. package/dist/validators/base64.js +1 -1
  227. package/dist/validators/bigint.d.ts +20 -0
  228. package/dist/validators/bigint.d.ts.map +1 -1
  229. package/dist/validators/bigint.js +39 -1
  230. package/dist/validators/bigint.js.map +1 -1
  231. package/dist/validators/boolean.js +29 -1
  232. package/dist/validators/boolean.js.map +1 -1
  233. package/dist/validators/codec.js +1 -1
  234. package/dist/validators/custom.d.ts +47 -0
  235. package/dist/validators/custom.d.ts.map +1 -0
  236. package/dist/validators/custom.js +50 -0
  237. package/dist/validators/custom.js.map +1 -0
  238. package/dist/validators/date.d.ts +16 -0
  239. package/dist/validators/date.d.ts.map +1 -1
  240. package/dist/validators/date.js +62 -7
  241. package/dist/validators/date.js.map +1 -1
  242. package/dist/validators/discriminated-union.d.ts +29 -0
  243. package/dist/validators/discriminated-union.d.ts.map +1 -0
  244. package/dist/validators/discriminated-union.js +98 -0
  245. package/dist/validators/discriminated-union.js.map +1 -0
  246. package/dist/validators/enum.d.ts +10 -0
  247. package/dist/validators/enum.d.ts.map +1 -1
  248. package/dist/validators/enum.js +38 -1
  249. package/dist/validators/enum.js.map +1 -1
  250. package/dist/validators/file.d.ts +57 -0
  251. package/dist/validators/file.d.ts.map +1 -0
  252. package/dist/validators/file.js +114 -0
  253. package/dist/validators/file.js.map +1 -0
  254. package/dist/validators/function.d.ts +26 -0
  255. package/dist/validators/function.d.ts.map +1 -0
  256. package/dist/validators/function.js +45 -0
  257. package/dist/validators/function.js.map +1 -0
  258. package/dist/validators/hex.d.ts.map +1 -1
  259. package/dist/validators/hex.js +3 -2
  260. package/dist/validators/hex.js.map +1 -1
  261. package/dist/validators/index.d.ts +18 -1
  262. package/dist/validators/index.d.ts.map +1 -1
  263. package/dist/validators/index.js +16 -1
  264. package/dist/validators/index.js.map +1 -1
  265. package/dist/validators/intersection.d.ts.map +1 -1
  266. package/dist/validators/intersection.js +15 -8
  267. package/dist/validators/intersection.js.map +1 -1
  268. package/dist/validators/json.d.ts +26 -0
  269. package/dist/validators/json.d.ts.map +1 -0
  270. package/dist/validators/json.js +64 -0
  271. package/dist/validators/json.js.map +1 -0
  272. package/dist/validators/lazy.d.ts +28 -0
  273. package/dist/validators/lazy.d.ts.map +1 -0
  274. package/dist/validators/lazy.js +42 -0
  275. package/dist/validators/lazy.js.map +1 -0
  276. package/dist/validators/literal.js +1 -1
  277. package/dist/validators/map.js +1 -1
  278. package/dist/validators/nan.d.ts +17 -0
  279. package/dist/validators/nan.d.ts.map +1 -0
  280. package/dist/validators/nan.js +32 -0
  281. package/dist/validators/nan.js.map +1 -0
  282. package/dist/validators/never.js +1 -1
  283. package/dist/validators/null.d.ts +16 -0
  284. package/dist/validators/null.d.ts.map +1 -0
  285. package/dist/validators/null.js +31 -0
  286. package/dist/validators/null.js.map +1 -0
  287. package/dist/validators/number.d.ts +22 -0
  288. package/dist/validators/number.d.ts.map +1 -1
  289. package/dist/validators/number.js +47 -8
  290. package/dist/validators/number.js.map +1 -1
  291. package/dist/validators/object.d.ts +32 -0
  292. package/dist/validators/object.d.ts.map +1 -1
  293. package/dist/validators/object.js +125 -8
  294. package/dist/validators/object.js.map +1 -1
  295. package/dist/validators/record.d.ts +15 -2
  296. package/dist/validators/record.d.ts.map +1 -1
  297. package/dist/validators/record.js +74 -4
  298. package/dist/validators/record.js.map +1 -1
  299. package/dist/validators/set.js +1 -1
  300. package/dist/validators/string-bool.d.ts +61 -0
  301. package/dist/validators/string-bool.d.ts.map +1 -0
  302. package/dist/validators/string-bool.js +127 -0
  303. package/dist/validators/string-bool.js.map +1 -0
  304. package/dist/validators/string-formats.d.ts +97 -0
  305. package/dist/validators/string-formats.d.ts.map +1 -0
  306. package/dist/validators/string-formats.js +120 -0
  307. package/dist/validators/string-formats.js.map +1 -0
  308. package/dist/validators/string.d.ts.map +1 -1
  309. package/dist/validators/string.js +2 -73
  310. package/dist/validators/string.js.map +1 -1
  311. package/dist/validators/symbol.js +1 -1
  312. package/dist/validators/template-literal.d.ts +32 -0
  313. package/dist/validators/template-literal.d.ts.map +1 -0
  314. package/dist/validators/template-literal.js +102 -0
  315. package/dist/validators/template-literal.js.map +1 -0
  316. package/dist/validators/tuple.js +1 -1
  317. package/dist/validators/uint8array.d.ts +21 -4
  318. package/dist/validators/uint8array.d.ts.map +1 -1
  319. package/dist/validators/uint8array.js +34 -23
  320. package/dist/validators/uint8array.js.map +1 -1
  321. package/dist/validators/undefined.d.ts +16 -0
  322. package/dist/validators/undefined.d.ts.map +1 -0
  323. package/dist/validators/undefined.js +31 -0
  324. package/dist/validators/undefined.js.map +1 -0
  325. package/dist/validators/union.d.ts +2 -0
  326. package/dist/validators/union.d.ts.map +1 -1
  327. package/dist/validators/union.js +15 -21
  328. package/dist/validators/union.js.map +1 -1
  329. package/dist/validators/void.js +1 -1
  330. package/dist/validators/xor.d.ts +23 -0
  331. package/dist/validators/xor.d.ts.map +1 -0
  332. package/dist/validators/xor.js +64 -0
  333. package/dist/validators/xor.js.map +1 -0
  334. package/package.json +95 -79
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * VLD CLI - Benchmark Command\r\n *\r\n * Run performance benchmarks for VLD validation.\r\n */\r\n\r\nimport { pigment } from '../../pigment';\r\nimport { v } from '../../index';\r\nimport type { CliCommand } from '../index';\r\n\r\n/**\r\n * Benchmark result\r\n */\r\ninterface BenchmarkResult {\r\n name: string;\r\n iterations: number;\r\n totalMs: number;\r\n avgMs: number;\r\n opsPerSec: number;\r\n}\r\n\r\n/**\r\n * Run a single benchmark\r\n */\r\nfunction runBenchmark(\r\n name: string,\r\n fn: () => void,\r\n iterations: number\r\n): BenchmarkResult {\r\n // Warm up\r\n for (let i = 0; i < Math.min(100, iterations / 10); i++) {\r\n fn();\r\n }\r\n\r\n // Run benchmark\r\n const start = performance.now();\r\n for (let i = 0; i < iterations; i++) {\r\n fn();\r\n }\r\n const end = performance.now();\r\n\r\n const totalMs = end - start;\r\n const avgMs = totalMs / iterations;\r\n const opsPerSec = 1000 / avgMs;\r\n\r\n return { name, iterations, totalMs, avgMs, opsPerSec };\r\n}\r\n\r\n/**\r\n * Format number with comma separators\r\n */\r\nfunction formatNumber(n: number): string {\r\n return n.toLocaleString('en-US', { maximumFractionDigits: 2 });\r\n}\r\n\r\n/**\r\n * Format benchmark result\r\n */\r\nfunction formatResult(result: BenchmarkResult, colored: boolean): string {\r\n const name = colored ? pigment.cyan(result.name.padEnd(30)) : result.name.padEnd(30);\r\n const ops = colored\r\n ? pigment.green(formatNumber(result.opsPerSec).padStart(12))\r\n : formatNumber(result.opsPerSec).padStart(12);\r\n const avg = colored\r\n ? pigment.yellow(result.avgMs.toFixed(6).padStart(12))\r\n : result.avgMs.toFixed(6).padStart(12);\r\n\r\n return `${name} ${ops} ops/sec ${avg} ms/op`;\r\n}\r\n\r\n/**\r\n * Benchmark command\r\n */\r\nexport const benchmarkCommand: CliCommand = {\r\n name: 'benchmark',\r\n description: 'Run performance benchmarks',\r\n aliases: ['bench', 'b'],\r\n options: [\r\n {\r\n name: 'iterations',\r\n short: 'n',\r\n description: 'Number of iterations',\r\n type: 'number',\r\n default: 10000\r\n },\r\n {\r\n name: 'suite',\r\n short: 's',\r\n description: 'Benchmark suite to run (all, primitives, objects, arrays)',\r\n type: 'string',\r\n default: 'all'\r\n },\r\n {\r\n name: 'json',\r\n short: 'j',\r\n description: 'Output as JSON',\r\n type: 'boolean',\r\n default: false\r\n },\r\n {\r\n name: 'no-color',\r\n description: 'Disable colored output',\r\n type: 'boolean',\r\n default: false\r\n }\r\n ],\r\n action: async (_args, options) => {\r\n const iterations = options.iterations as number;\r\n const suite = options.suite as string;\r\n const json = options.json as boolean;\r\n const noColor = options['no-color'] as boolean;\r\n const colored = !noColor;\r\n\r\n const results: BenchmarkResult[] = [];\r\n\r\n // Primitive validators\r\n const stringSchema = v.string();\r\n const numberSchema = v.number();\r\n const booleanSchema = v.boolean();\r\n const dateSchema = v.date();\r\n\r\n // Object validator\r\n const userSchema = v.object({\r\n name: v.string(),\r\n email: v.string(),\r\n age: v.number(),\r\n active: v.boolean()\r\n });\r\n\r\n // Array validator\r\n const numbersSchema = v.array(v.number());\r\n\r\n // Nested object validator\r\n const nestedSchema = v.object({\r\n user: v.object({\r\n name: v.string(),\r\n email: v.string()\r\n }),\r\n items: v.array(\r\n v.object({\r\n id: v.number(),\r\n name: v.string(),\r\n price: v.number()\r\n })\r\n )\r\n });\r\n\r\n // Test data\r\n const testString = 'hello world';\r\n const testNumber = 42;\r\n const testBoolean = true;\r\n const testDate = new Date();\r\n const testUser = { name: 'John', email: 'john@example.com', age: 30, active: true };\r\n const testNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\r\n const testNested = {\r\n user: { name: 'John', email: 'john@example.com' },\r\n items: [\r\n { id: 1, name: 'Item 1', price: 10.99 },\r\n { id: 2, name: 'Item 2', price: 20.99 },\r\n { id: 3, name: 'Item 3', price: 30.99 }\r\n ]\r\n };\r\n\r\n if (!json) {\r\n console.log(pigment.bold('VLD Performance Benchmark'));\r\n console.log(pigment.dim(`Running ${formatNumber(iterations)} iterations per test`));\r\n console.log('');\r\n }\r\n\r\n // Primitive benchmarks\r\n if (suite === 'all' || suite === 'primitives') {\r\n if (!json) {\r\n console.log(pigment.bold('Primitives:'));\r\n }\r\n\r\n results.push(\r\n runBenchmark('string.parse()', () => stringSchema.parse(testString), iterations)\r\n );\r\n results.push(\r\n runBenchmark('number.parse()', () => numberSchema.parse(testNumber), iterations)\r\n );\r\n results.push(\r\n runBenchmark('boolean.parse()', () => booleanSchema.parse(testBoolean), iterations)\r\n );\r\n results.push(\r\n runBenchmark('date.parse()', () => dateSchema.parse(testDate), iterations)\r\n );\r\n results.push(\r\n runBenchmark('string.safeParse()', () => stringSchema.safeParse(testString), iterations)\r\n );\r\n\r\n if (!json) {\r\n for (const result of results.slice(-5)) {\r\n console.log(' ' + formatResult(result, colored));\r\n }\r\n console.log('');\r\n }\r\n }\r\n\r\n // Object benchmarks\r\n if (suite === 'all' || suite === 'objects') {\r\n if (!json) {\r\n console.log(pigment.bold('Objects:'));\r\n }\r\n\r\n results.push(\r\n runBenchmark('object.parse()', () => userSchema.parse(testUser), iterations)\r\n );\r\n results.push(\r\n runBenchmark('object.safeParse()', () => userSchema.safeParse(testUser), iterations)\r\n );\r\n results.push(\r\n runBenchmark('nested.parse()', () => nestedSchema.parse(testNested), iterations)\r\n );\r\n\r\n if (!json) {\r\n for (const result of results.slice(-3)) {\r\n console.log(' ' + formatResult(result, colored));\r\n }\r\n console.log('');\r\n }\r\n }\r\n\r\n // Array benchmarks\r\n if (suite === 'all' || suite === 'arrays') {\r\n if (!json) {\r\n console.log(pigment.bold('Arrays:'));\r\n }\r\n\r\n results.push(\r\n runBenchmark('array.parse()', () => numbersSchema.parse(testNumbers), iterations)\r\n );\r\n results.push(\r\n runBenchmark('array.safeParse()', () => numbersSchema.safeParse(testNumbers), iterations)\r\n );\r\n\r\n if (!json) {\r\n for (const result of results.slice(-2)) {\r\n console.log(' ' + formatResult(result, colored));\r\n }\r\n console.log('');\r\n }\r\n }\r\n\r\n // Summary\r\n if (!json) {\r\n const totalOps = results.reduce((sum, r) => sum + r.opsPerSec, 0);\r\n const avgOps = totalOps / results.length;\r\n\r\n console.log(pigment.bold('Summary:'));\r\n console.log(` Total benchmarks: ${results.length}`);\r\n console.log(` Average ops/sec: ${formatNumber(avgOps)}`);\r\n } else {\r\n console.log(\r\n JSON.stringify({\r\n iterations,\r\n suite,\r\n results: results.map((r) => ({\r\n name: r.name,\r\n iterations: r.iterations,\r\n totalMs: r.totalMs,\r\n avgMs: r.avgMs,\r\n opsPerSec: r.opsPerSec\r\n }))\r\n })\r\n );\r\n }\r\n }\r\n};\r\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * VLD CLI - Validate Command
3
+ *
4
+ * Validate JSON data against a VLD schema file.
5
+ */
6
+ import type { CliCommand } from '../index';
7
+ /**
8
+ * Validate command
9
+ */
10
+ export declare const validateCommand: CliCommand;
11
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,UAmJ7B,CAAC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * VLD CLI - Validate Command
3
+ *
4
+ * Validate JSON data against a VLD schema file.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { pigment } from '../../pigment.js';
9
+ import { prettifyError, prettifyErrorColored } from '../../errors.js';
10
+ /**
11
+ * Validate command
12
+ */
13
+ export const validateCommand = {
14
+ name: 'validate',
15
+ description: 'Validate JSON data against a VLD schema',
16
+ aliases: ['v'],
17
+ arguments: [
18
+ {
19
+ name: 'schema',
20
+ description: 'Path to schema file (.ts or .js)',
21
+ required: true
22
+ },
23
+ {
24
+ name: 'data',
25
+ description: 'Path to JSON data file or JSON string',
26
+ required: true
27
+ }
28
+ ],
29
+ options: [
30
+ {
31
+ name: 'strict',
32
+ short: 's',
33
+ description: 'Enable strict mode (no extra keys)',
34
+ type: 'boolean',
35
+ default: false
36
+ },
37
+ {
38
+ name: 'quiet',
39
+ short: 'q',
40
+ description: 'Only output errors',
41
+ type: 'boolean',
42
+ default: false
43
+ },
44
+ {
45
+ name: 'json',
46
+ short: 'j',
47
+ description: 'Output as JSON',
48
+ type: 'boolean',
49
+ default: false
50
+ },
51
+ {
52
+ name: 'no-color',
53
+ description: 'Disable colored output',
54
+ type: 'boolean',
55
+ default: false
56
+ }
57
+ ],
58
+ action: async (args, options) => {
59
+ const schemaPath = args.schema;
60
+ const dataArg = args.data;
61
+ const quiet = options.quiet;
62
+ const json = options.json;
63
+ const noColor = options['no-color'];
64
+ // Load schema
65
+ let schema;
66
+ try {
67
+ const absoluteSchemaPath = path.resolve(process.cwd(), schemaPath);
68
+ if (!fs.existsSync(absoluteSchemaPath)) {
69
+ throw new Error(`Schema file not found: ${schemaPath}`);
70
+ }
71
+ // Dynamic import for ESM/CJS compatibility
72
+ const schemaModule = await import(absoluteSchemaPath);
73
+ schema = schemaModule.default || schemaModule.schema || schemaModule;
74
+ if (!schema || typeof schema.parse !== 'function') {
75
+ throw new Error('Schema must export a VLD validator with parse() method');
76
+ }
77
+ }
78
+ catch (error) {
79
+ if (json) {
80
+ console.log(JSON.stringify({ success: false, error: error.message }));
81
+ }
82
+ else {
83
+ console.error(pigment.red('Schema Error:'), error.message);
84
+ }
85
+ process.exitCode = 1;
86
+ return;
87
+ }
88
+ // Load data
89
+ let data;
90
+ try {
91
+ // Check if it's a file path or JSON string
92
+ if (dataArg.startsWith('{') || dataArg.startsWith('[')) {
93
+ data = JSON.parse(dataArg);
94
+ }
95
+ else {
96
+ const absoluteDataPath = path.resolve(process.cwd(), dataArg);
97
+ if (!fs.existsSync(absoluteDataPath)) {
98
+ throw new Error(`Data file not found: ${dataArg}`);
99
+ }
100
+ const content = fs.readFileSync(absoluteDataPath, 'utf-8');
101
+ data = JSON.parse(content);
102
+ }
103
+ }
104
+ catch (error) {
105
+ if (json) {
106
+ console.log(JSON.stringify({ success: false, error: error.message }));
107
+ }
108
+ else {
109
+ console.error(pigment.red('Data Error:'), error.message);
110
+ }
111
+ process.exitCode = 1;
112
+ return;
113
+ }
114
+ // Validate
115
+ const result = schema.safeParse(data);
116
+ if (json) {
117
+ if (result.success) {
118
+ console.log(JSON.stringify({ success: true, data: result.data }));
119
+ }
120
+ else {
121
+ const err = result.error;
122
+ const errorJson = {
123
+ success: false,
124
+ error: err?.message,
125
+ issues: err?.issues
126
+ };
127
+ console.log(JSON.stringify(errorJson));
128
+ }
129
+ }
130
+ else {
131
+ if (result.success) {
132
+ if (!quiet) {
133
+ console.log(pigment.green('✓ Validation passed'));
134
+ console.log('');
135
+ console.log(pigment.dim('Data:'));
136
+ console.log(JSON.stringify(result.data, null, 2));
137
+ }
138
+ }
139
+ else {
140
+ console.error(pigment.red('✗ Validation failed'));
141
+ console.error('');
142
+ // Check if it's a VldError with issues
143
+ if (result.error && 'issues' in result.error) {
144
+ const formatted = noColor
145
+ ? prettifyError(result.error, { colored: false })
146
+ : prettifyErrorColored(result.error);
147
+ console.error(formatted);
148
+ }
149
+ else {
150
+ console.error(result.error?.message || 'Unknown error');
151
+ }
152
+ process.exitCode = 1;
153
+ }
154
+ }
155
+ }
156
+ };
157
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGnE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,yCAAyC;IACtD,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,SAAS,EAAE;QACT;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACf;KACF;IACD,OAAO,EAAE;QACP;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,oCAAoC;YACjD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,gBAAgB;YAC7B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,wBAAwB;YACrC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF;IACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAgB,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAc,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAgB,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAe,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAY,CAAC;QAE/C,cAAc;QACd,IAAI,MAAkI,CAAC;QAEvI,IAAI,CAAC;YACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;YAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,2CAA2C;YAC3C,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACtD,MAAM,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC;YAErE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,IAAa,CAAC;QAElB,IAAI,CAAC;YACH,2CAA2C;YAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;gBAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBAC3D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,WAAW;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,CAAC,KAA6D,CAAC;gBACjF,MAAM,SAAS,GAAG;oBAChB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,GAAG,EAAE,OAAO;oBACnB,MAAM,EAAE,GAAG,EAAE,MAAM;iBACpB,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAElB,uCAAuC;gBACvC,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7C,MAAM,SAAS,GAAG,OAAO;wBACvB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAA4C,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;wBACxF,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAmD,CAAC,CAAC;oBACrF,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC,CAAC;gBAC1D,CAAC;gBAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/**\r\n * VLD CLI - Validate Command\r\n *\r\n * Validate JSON data against a VLD schema file.\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { pigment } from '../../pigment';\r\nimport { prettifyError, prettifyErrorColored } from '../../errors';\r\nimport type { CliCommand } from '../index';\r\n\r\n/**\r\n * Validate command\r\n */\r\nexport const validateCommand: CliCommand = {\r\n name: 'validate',\r\n description: 'Validate JSON data against a VLD schema',\r\n aliases: ['v'],\r\n arguments: [\r\n {\r\n name: 'schema',\r\n description: 'Path to schema file (.ts or .js)',\r\n required: true\r\n },\r\n {\r\n name: 'data',\r\n description: 'Path to JSON data file or JSON string',\r\n required: true\r\n }\r\n ],\r\n options: [\r\n {\r\n name: 'strict',\r\n short: 's',\r\n description: 'Enable strict mode (no extra keys)',\r\n type: 'boolean',\r\n default: false\r\n },\r\n {\r\n name: 'quiet',\r\n short: 'q',\r\n description: 'Only output errors',\r\n type: 'boolean',\r\n default: false\r\n },\r\n {\r\n name: 'json',\r\n short: 'j',\r\n description: 'Output as JSON',\r\n type: 'boolean',\r\n default: false\r\n },\r\n {\r\n name: 'no-color',\r\n description: 'Disable colored output',\r\n type: 'boolean',\r\n default: false\r\n }\r\n ],\r\n action: async (args, options) => {\r\n const schemaPath = args.schema as string;\r\n const dataArg = args.data as string;\r\n const quiet = options.quiet as boolean;\r\n const json = options.json as boolean;\r\n const noColor = options['no-color'] as boolean;\r\n\r\n // Load schema\r\n let schema: { parse: (value: unknown) => unknown; safeParse: (value: unknown) => { success: boolean; data?: unknown; error?: Error } };\r\n\r\n try {\r\n const absoluteSchemaPath = path.resolve(process.cwd(), schemaPath);\r\n\r\n if (!fs.existsSync(absoluteSchemaPath)) {\r\n throw new Error(`Schema file not found: ${schemaPath}`);\r\n }\r\n\r\n // Dynamic import for ESM/CJS compatibility\r\n const schemaModule = await import(absoluteSchemaPath);\r\n schema = schemaModule.default || schemaModule.schema || schemaModule;\r\n\r\n if (!schema || typeof schema.parse !== 'function') {\r\n throw new Error('Schema must export a VLD validator with parse() method');\r\n }\r\n } catch (error) {\r\n if (json) {\r\n console.log(JSON.stringify({ success: false, error: (error as Error).message }));\r\n } else {\r\n console.error(pigment.red('Schema Error:'), (error as Error).message);\r\n }\r\n process.exitCode = 1;\r\n return;\r\n }\r\n\r\n // Load data\r\n let data: unknown;\r\n\r\n try {\r\n // Check if it's a file path or JSON string\r\n if (dataArg.startsWith('{') || dataArg.startsWith('[')) {\r\n data = JSON.parse(dataArg);\r\n } else {\r\n const absoluteDataPath = path.resolve(process.cwd(), dataArg);\r\n\r\n if (!fs.existsSync(absoluteDataPath)) {\r\n throw new Error(`Data file not found: ${dataArg}`);\r\n }\r\n\r\n const content = fs.readFileSync(absoluteDataPath, 'utf-8');\r\n data = JSON.parse(content);\r\n }\r\n } catch (error) {\r\n if (json) {\r\n console.log(JSON.stringify({ success: false, error: (error as Error).message }));\r\n } else {\r\n console.error(pigment.red('Data Error:'), (error as Error).message);\r\n }\r\n process.exitCode = 1;\r\n return;\r\n }\r\n\r\n // Validate\r\n const result = schema.safeParse(data);\r\n\r\n if (json) {\r\n if (result.success) {\r\n console.log(JSON.stringify({ success: true, data: result.data }));\r\n } else {\r\n const err = result.error as { message?: string; issues?: unknown[] } | undefined;\r\n const errorJson = {\r\n success: false,\r\n error: err?.message,\r\n issues: err?.issues\r\n };\r\n console.log(JSON.stringify(errorJson));\r\n }\r\n } else {\r\n if (result.success) {\r\n if (!quiet) {\r\n console.log(pigment.green('✓ Validation passed'));\r\n console.log('');\r\n console.log(pigment.dim('Data:'));\r\n console.log(JSON.stringify(result.data, null, 2));\r\n }\r\n } else {\r\n console.error(pigment.red('✗ Validation failed'));\r\n console.error('');\r\n\r\n // Check if it's a VldError with issues\r\n if (result.error && 'issues' in result.error) {\r\n const formatted = noColor\r\n ? prettifyError(result.error as Parameters<typeof prettifyError>[0], { colored: false })\r\n : prettifyErrorColored(result.error as Parameters<typeof prettifyErrorColored>[0]);\r\n console.error(formatted);\r\n } else {\r\n console.error(result.error?.message || 'Unknown error');\r\n }\r\n\r\n process.exitCode = 1;\r\n }\r\n }\r\n }\r\n};\r\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * VLD CLI - Generate Command
3
+ *
4
+ * TypeScript interface'lerinden VLD schema üretir.
5
+ *
6
+ * Kullanım:
7
+ * vld generate <input.ts> -o <output.ts>
8
+ */
9
+ import type { Command } from './index.js';
10
+ /**
11
+ * Generate command
12
+ */
13
+ export declare const generateCommand: Command;
14
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,OA6F7B,CAAC"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * VLD CLI - Generate Command
3
+ *
4
+ * TypeScript interface'lerinden VLD schema üretir.
5
+ *
6
+ * Kullanım:
7
+ * vld generate <input.ts> -o <output.ts>
8
+ */
9
+ import { style } from '../style.js';
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ /**
13
+ * Generate command
14
+ */
15
+ export const generateCommand = {
16
+ name: 'generate',
17
+ description: 'Generate VLD schema from TypeScript interface',
18
+ aliases: ['gen', 'g'],
19
+ arguments: [
20
+ {
21
+ name: 'input',
22
+ description: 'Input TypeScript file',
23
+ required: true
24
+ }
25
+ ],
26
+ options: [
27
+ {
28
+ name: 'output',
29
+ short: 'o',
30
+ description: 'Output file path',
31
+ type: 'string'
32
+ },
33
+ {
34
+ name: 'export-name',
35
+ short: 'e',
36
+ description: 'Export name for the schema',
37
+ type: 'string',
38
+ default: 'schema'
39
+ },
40
+ {
41
+ name: 'strict',
42
+ short: 's',
43
+ description: 'Enable strict mode',
44
+ type: 'boolean',
45
+ default: false
46
+ },
47
+ {
48
+ name: 'dry-run',
49
+ description: 'Print output without writing file',
50
+ type: 'boolean',
51
+ default: false
52
+ }
53
+ ],
54
+ async action(args, opts) {
55
+ const inputPath = path.resolve(args.input);
56
+ const outputPath = opts.output
57
+ ? path.resolve(opts.output)
58
+ : inputPath.replace(/\.ts$/, '.schema.ts');
59
+ console.log(style.cyan('VLD Schema Generator'));
60
+ console.log('');
61
+ // Check input file exists
62
+ if (!fs.existsSync(inputPath)) {
63
+ throw new Error(`Input file not found: ${inputPath}`);
64
+ }
65
+ console.log(`${style.dim('Input:')} ${inputPath}`);
66
+ console.log(`${style.dim('Output:')} ${outputPath}`);
67
+ console.log('');
68
+ // Read input file
69
+ const content = fs.readFileSync(inputPath, 'utf-8');
70
+ // Parse TypeScript interfaces
71
+ const interfaces = parseInterfaces(content);
72
+ if (interfaces.length === 0) {
73
+ console.log(style.yellow('No interfaces found in input file.'));
74
+ return;
75
+ }
76
+ console.log(`Found ${style.bold(String(interfaces.length))} interface(s):`);
77
+ for (const iface of interfaces) {
78
+ console.log(` - ${style.cyan(iface.name)}`);
79
+ }
80
+ console.log('');
81
+ // Generate schema
82
+ const schema = generateSchema(interfaces, {
83
+ exportName: opts['export-name'],
84
+ strict: opts.strict
85
+ });
86
+ // Output
87
+ if (opts['dry-run']) {
88
+ console.log(style.bold('Generated Schema:'));
89
+ console.log('');
90
+ console.log(schema);
91
+ }
92
+ else {
93
+ fs.writeFileSync(outputPath, schema, 'utf-8');
94
+ console.log(style.green('✔') + ` Schema written to ${outputPath}`);
95
+ }
96
+ }
97
+ };
98
+ /**
99
+ * Basit TypeScript interface parser
100
+ */
101
+ function parseInterfaces(content) {
102
+ const interfaces = [];
103
+ // Interface regex (basit versiyon)
104
+ const interfaceRegex = /(?:export\s+)?interface\s+(\w+)(?:\s+extends\s+([\w,\s]+))?\s*\{([^}]+)\}/g;
105
+ const propertyRegex = /(?:readonly\s+)?(\w+)(\?)?:\s*([^;]+);/g;
106
+ let match;
107
+ while ((match = interfaceRegex.exec(content)) !== null) {
108
+ const name = match[1];
109
+ const extendsStr = match[2];
110
+ const bodyStr = match[3];
111
+ const extendsArr = extendsStr
112
+ ? extendsStr.split(',').map((s) => s.trim())
113
+ : undefined;
114
+ const properties = [];
115
+ let propMatch;
116
+ while ((propMatch = propertyRegex.exec(bodyStr)) !== null) {
117
+ const isReadonly = propMatch[0].startsWith('readonly');
118
+ properties.push({
119
+ name: propMatch[1],
120
+ optional: !!propMatch[2],
121
+ type: propMatch[3].trim(),
122
+ readonly: isReadonly
123
+ });
124
+ }
125
+ interfaces.push({ name, properties, extends: extendsArr });
126
+ }
127
+ return interfaces;
128
+ }
129
+ /**
130
+ * VLD schema üretir
131
+ */
132
+ function generateSchema(interfaces, options) {
133
+ const lines = [];
134
+ // Import statement
135
+ lines.push("import { v } from '@oxog/vld';");
136
+ lines.push('');
137
+ // Generate schema for each interface
138
+ for (const iface of interfaces) {
139
+ lines.push(`/**`);
140
+ lines.push(` * Schema for ${iface.name}`);
141
+ lines.push(` */`);
142
+ lines.push(`export const ${camelCase(iface.name)}Schema = v.object({`);
143
+ for (const prop of iface.properties) {
144
+ const schemaType = typeToSchema(prop.type);
145
+ const optionalSuffix = prop.optional ? '.optional()' : '';
146
+ lines.push(` ${prop.name}: ${schemaType}${optionalSuffix},`);
147
+ }
148
+ lines.push(`})${options.strict ? '.strict()' : ''};`);
149
+ lines.push('');
150
+ // Infer type
151
+ lines.push(`export type ${iface.name} = typeof ${camelCase(iface.name)}Schema._type;`);
152
+ lines.push('');
153
+ }
154
+ // Combined schema if requested
155
+ if (interfaces.length > 1 && options.exportName !== 'schema') {
156
+ lines.push(`/**`);
157
+ lines.push(` * Combined schemas`);
158
+ lines.push(` */`);
159
+ lines.push(`export const ${options.exportName} = {`);
160
+ for (const iface of interfaces) {
161
+ lines.push(` ${camelCase(iface.name)}: ${camelCase(iface.name)}Schema,`);
162
+ }
163
+ lines.push(`};`);
164
+ }
165
+ return lines.join('\n');
166
+ }
167
+ /**
168
+ * TypeScript tipini VLD schema'ya çevirir
169
+ */
170
+ function typeToSchema(type) {
171
+ // Array type
172
+ if (type.endsWith('[]')) {
173
+ const itemType = type.slice(0, -2);
174
+ return `v.array(${typeToSchema(itemType)})`;
175
+ }
176
+ // Generic array
177
+ if (type.startsWith('Array<') && type.endsWith('>')) {
178
+ const itemType = type.slice(6, -1);
179
+ return `v.array(${typeToSchema(itemType)})`;
180
+ }
181
+ // Union type
182
+ if (type.includes(' | ')) {
183
+ const types = type.split(' | ').map((t) => t.trim());
184
+ return `v.union(${types.map(typeToSchema).join(', ')})`;
185
+ }
186
+ // Literal types
187
+ if (type.startsWith("'") || type.startsWith('"')) {
188
+ return `v.literal(${type})`;
189
+ }
190
+ if (type === 'true' || type === 'false') {
191
+ return `v.literal(${type})`;
192
+ }
193
+ if (/^\d+$/.test(type)) {
194
+ return `v.literal(${type})`;
195
+ }
196
+ // Primitive types
197
+ switch (type) {
198
+ case 'string':
199
+ return 'v.string()';
200
+ case 'number':
201
+ return 'v.number()';
202
+ case 'boolean':
203
+ return 'v.boolean()';
204
+ case 'Date':
205
+ return 'v.date()';
206
+ case 'bigint':
207
+ return 'v.bigint()';
208
+ case 'symbol':
209
+ return 'v.symbol()';
210
+ case 'null':
211
+ return 'v.null()';
212
+ case 'undefined':
213
+ return 'v.undefined()';
214
+ case 'any':
215
+ return 'v.any()';
216
+ case 'unknown':
217
+ return 'v.unknown()';
218
+ case 'never':
219
+ return 'v.never()';
220
+ case 'void':
221
+ return 'v.void()';
222
+ default:
223
+ // Reference to another schema
224
+ return `${camelCase(type)}Schema`;
225
+ }
226
+ }
227
+ /**
228
+ * PascalCase'i camelCase'e çevirir
229
+ */
230
+ function camelCase(str) {
231
+ return str.charAt(0).toLowerCase() + str.slice(1);
232
+ }
233
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * VLD CLI - Generate Command\n *\n * TypeScript interface'lerinden VLD schema üretir.\n *\n * Kullanım:\n * vld generate <input.ts> -o <output.ts>\n */\n\nimport type { Command } from './index.js';\nimport { style } from '../style.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Generate command\n */\nexport const generateCommand: Command = {\n name: 'generate',\n description: 'Generate VLD schema from TypeScript interface',\n aliases: ['gen', 'g'],\n\n arguments: [\n {\n name: 'input',\n description: 'Input TypeScript file',\n required: true\n }\n ],\n\n options: [\n {\n name: 'output',\n short: 'o',\n description: 'Output file path',\n type: 'string'\n },\n {\n name: 'export-name',\n short: 'e',\n description: 'Export name for the schema',\n type: 'string',\n default: 'schema'\n },\n {\n name: 'strict',\n short: 's',\n description: 'Enable strict mode',\n type: 'boolean',\n default: false\n },\n {\n name: 'dry-run',\n description: 'Print output without writing file',\n type: 'boolean',\n default: false\n }\n ],\n\n async action(args, opts) {\n const inputPath = path.resolve(args.input);\n const outputPath = opts.output\n ? path.resolve(opts.output as string)\n : inputPath.replace(/\\.ts$/, '.schema.ts');\n\n console.log(style.cyan('VLD Schema Generator'));\n console.log('');\n\n // Check input file exists\n if (!fs.existsSync(inputPath)) {\n throw new Error(`Input file not found: ${inputPath}`);\n }\n\n console.log(`${style.dim('Input:')} ${inputPath}`);\n console.log(`${style.dim('Output:')} ${outputPath}`);\n console.log('');\n\n // Read input file\n const content = fs.readFileSync(inputPath, 'utf-8');\n\n // Parse TypeScript interfaces\n const interfaces = parseInterfaces(content);\n\n if (interfaces.length === 0) {\n console.log(style.yellow('No interfaces found in input file.'));\n return;\n }\n\n console.log(`Found ${style.bold(String(interfaces.length))} interface(s):`);\n for (const iface of interfaces) {\n console.log(` - ${style.cyan(iface.name)}`);\n }\n console.log('');\n\n // Generate schema\n const schema = generateSchema(interfaces, {\n exportName: opts['export-name'] as string,\n strict: opts.strict as boolean\n });\n\n // Output\n if (opts['dry-run']) {\n console.log(style.bold('Generated Schema:'));\n console.log('');\n console.log(schema);\n } else {\n fs.writeFileSync(outputPath, schema, 'utf-8');\n console.log(style.green('✔') + ` Schema written to ${outputPath}`);\n }\n }\n};\n\n// ============================================================================\n// TypeScript Parser (Simple)\n// ============================================================================\n\ninterface ParsedInterface {\n name: string;\n properties: ParsedProperty[];\n extends?: string[];\n}\n\ninterface ParsedProperty {\n name: string;\n type: string;\n optional: boolean;\n readonly: boolean;\n}\n\n/**\n * Basit TypeScript interface parser\n */\nfunction parseInterfaces(content: string): ParsedInterface[] {\n const interfaces: ParsedInterface[] = [];\n\n // Interface regex (basit versiyon)\n const interfaceRegex = /(?:export\\s+)?interface\\s+(\\w+)(?:\\s+extends\\s+([\\w,\\s]+))?\\s*\\{([^}]+)\\}/g;\n const propertyRegex = /(?:readonly\\s+)?(\\w+)(\\?)?:\\s*([^;]+);/g;\n\n let match: RegExpExecArray | null;\n\n while ((match = interfaceRegex.exec(content)) !== null) {\n const name = match[1];\n const extendsStr = match[2];\n const bodyStr = match[3];\n\n const extendsArr = extendsStr\n ? extendsStr.split(',').map((s) => s.trim())\n : undefined;\n\n const properties: ParsedProperty[] = [];\n let propMatch: RegExpExecArray | null;\n\n while ((propMatch = propertyRegex.exec(bodyStr)) !== null) {\n const isReadonly = propMatch[0].startsWith('readonly');\n properties.push({\n name: propMatch[1],\n optional: !!propMatch[2],\n type: propMatch[3].trim(),\n readonly: isReadonly\n });\n }\n\n interfaces.push({ name, properties, extends: extendsArr });\n }\n\n return interfaces;\n}\n\n// ============================================================================\n// Schema Generator\n// ============================================================================\n\ninterface GenerateOptions {\n exportName: string;\n strict: boolean;\n}\n\n/**\n * VLD schema üretir\n */\nfunction generateSchema(interfaces: ParsedInterface[], options: GenerateOptions): string {\n const lines: string[] = [];\n\n // Import statement\n lines.push(\"import { v } from '@oxog/vld';\");\n lines.push('');\n\n // Generate schema for each interface\n for (const iface of interfaces) {\n lines.push(`/**`);\n lines.push(` * Schema for ${iface.name}`);\n lines.push(` */`);\n lines.push(`export const ${camelCase(iface.name)}Schema = v.object({`);\n\n for (const prop of iface.properties) {\n const schemaType = typeToSchema(prop.type);\n const optionalSuffix = prop.optional ? '.optional()' : '';\n lines.push(` ${prop.name}: ${schemaType}${optionalSuffix},`);\n }\n\n lines.push(`})${options.strict ? '.strict()' : ''};`);\n lines.push('');\n\n // Infer type\n lines.push(`export type ${iface.name} = typeof ${camelCase(iface.name)}Schema._type;`);\n lines.push('');\n }\n\n // Combined schema if requested\n if (interfaces.length > 1 && options.exportName !== 'schema') {\n lines.push(`/**`);\n lines.push(` * Combined schemas`);\n lines.push(` */`);\n lines.push(`export const ${options.exportName} = {`);\n for (const iface of interfaces) {\n lines.push(` ${camelCase(iface.name)}: ${camelCase(iface.name)}Schema,`);\n }\n lines.push(`};`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * TypeScript tipini VLD schema'ya çevirir\n */\nfunction typeToSchema(type: string): string {\n // Array type\n if (type.endsWith('[]')) {\n const itemType = type.slice(0, -2);\n return `v.array(${typeToSchema(itemType)})`;\n }\n\n // Generic array\n if (type.startsWith('Array<') && type.endsWith('>')) {\n const itemType = type.slice(6, -1);\n return `v.array(${typeToSchema(itemType)})`;\n }\n\n // Union type\n if (type.includes(' | ')) {\n const types = type.split(' | ').map((t) => t.trim());\n return `v.union(${types.map(typeToSchema).join(', ')})`;\n }\n\n // Literal types\n if (type.startsWith(\"'\") || type.startsWith('\"')) {\n return `v.literal(${type})`;\n }\n\n if (type === 'true' || type === 'false') {\n return `v.literal(${type})`;\n }\n\n if (/^\\d+$/.test(type)) {\n return `v.literal(${type})`;\n }\n\n // Primitive types\n switch (type) {\n case 'string':\n return 'v.string()';\n case 'number':\n return 'v.number()';\n case 'boolean':\n return 'v.boolean()';\n case 'Date':\n return 'v.date()';\n case 'bigint':\n return 'v.bigint()';\n case 'symbol':\n return 'v.symbol()';\n case 'null':\n return 'v.null()';\n case 'undefined':\n return 'v.undefined()';\n case 'any':\n return 'v.any()';\n case 'unknown':\n return 'v.unknown()';\n case 'never':\n return 'v.never()';\n case 'void':\n return 'v.void()';\n default:\n // Reference to another schema\n return `${camelCase(type)}Schema`;\n }\n}\n\n/**\n * PascalCase'i camelCase'e çevirir\n */\nfunction camelCase(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n"]}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * VLD CLI Tool
3
+ *
4
+ * Command-line interface for VLD validation library.
5
+ * Provides commands for validation, schema generation, and benchmarking.
6
+ */
7
+ /**
8
+ * CLI command definition
9
+ */
10
+ export interface CliCommand {
11
+ name: string;
12
+ description: string;
13
+ aliases?: string[];
14
+ arguments?: CliArgument[];
15
+ options?: CliOption[];
16
+ action: (args: Record<string, unknown>, options: Record<string, unknown>) => void | Promise<void>;
17
+ }
18
+ /**
19
+ * CLI argument definition
20
+ */
21
+ export interface CliArgument {
22
+ name: string;
23
+ description: string;
24
+ required?: boolean;
25
+ default?: unknown;
26
+ }
27
+ /**
28
+ * CLI option definition
29
+ */
30
+ export interface CliOption {
31
+ name: string;
32
+ short?: string;
33
+ description: string;
34
+ type?: 'string' | 'number' | 'boolean';
35
+ default?: unknown;
36
+ required?: boolean;
37
+ }
38
+ /**
39
+ * CLI instance
40
+ */
41
+ export interface Cli {
42
+ name: string;
43
+ version: string;
44
+ description: string;
45
+ commands: Map<string, CliCommand>;
46
+ command(cmd: CliCommand): Cli;
47
+ help(): string;
48
+ run(args: string[]): Promise<void>;
49
+ }
50
+ /**
51
+ * Create a CLI instance
52
+ */
53
+ export declare function createCli(name: string, version: string, description: string): Cli;
54
+ /**
55
+ * VLD CLI instance
56
+ */
57
+ export declare const vldCli: Cli;
58
+ export { createCli as cli };
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnG;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAGlC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,CAAC;IAC9B,IAAI,IAAI,MAAM,CAAC;IACf,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAmED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,GAAG,CAsHjF;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,KAAkE,CAAC;AAGtF,OAAO,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC"}