@oxog/vld 1.4.0 → 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 (187) hide show
  1. package/CHANGELOG.md +333 -333
  2. package/README.md +1130 -1130
  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/boolean.d.ts.map +1 -1
  35. package/dist/coercion/boolean.js +23 -31
  36. package/dist/coercion/boolean.js.map +1 -1
  37. package/dist/coercion/date.js +1 -1
  38. package/dist/coercion/date.js.map +1 -1
  39. package/dist/compat/emitter.d.ts +73 -0
  40. package/dist/compat/emitter.d.ts.map +1 -0
  41. package/dist/compat/emitter.js +179 -0
  42. package/dist/compat/emitter.js.map +1 -0
  43. package/dist/compat/index.d.ts +15 -0
  44. package/dist/compat/index.d.ts.map +1 -0
  45. package/dist/compat/index.js +14 -0
  46. package/dist/compat/index.js.map +1 -0
  47. package/dist/compat/result.d.ts +128 -0
  48. package/dist/compat/result.d.ts.map +1 -0
  49. package/dist/compat/result.js +169 -0
  50. package/dist/compat/result.js.map +1 -0
  51. package/dist/errors.d.ts +58 -1
  52. package/dist/errors.d.ts.map +1 -1
  53. package/dist/errors.js +97 -9
  54. package/dist/errors.js.map +1 -1
  55. package/dist/events.d.ts +140 -0
  56. package/dist/events.d.ts.map +1 -0
  57. package/dist/events.js +8 -0
  58. package/dist/events.js.map +1 -0
  59. package/dist/guards.d.ts +143 -0
  60. package/dist/guards.d.ts.map +1 -0
  61. package/dist/guards.js +238 -0
  62. package/dist/guards.js.map +1 -0
  63. package/dist/index-new.d.ts.map +1 -0
  64. package/dist/index.d.ts +13 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +29 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/kernel.d.ts +29 -0
  69. package/dist/kernel.d.ts.map +1 -0
  70. package/dist/kernel.js +402 -0
  71. package/dist/kernel.js.map +1 -0
  72. package/dist/locales/af.js.map +1 -1
  73. package/dist/locales/ar.js.map +1 -1
  74. package/dist/locales/backup-en.js.map +1 -1
  75. package/dist/locales/bn.js.map +1 -1
  76. package/dist/locales/da.js.map +1 -1
  77. package/dist/locales/de.js.map +1 -1
  78. package/dist/locales/en.js.map +1 -1
  79. package/dist/locales/es-MX.js.map +1 -1
  80. package/dist/locales/es.js.map +1 -1
  81. package/dist/locales/fi.js.map +1 -1
  82. package/dist/locales/fr.js.map +1 -1
  83. package/dist/locales/hi.js.map +1 -1
  84. package/dist/locales/id.js.map +1 -1
  85. package/dist/locales/it.js.map +1 -1
  86. package/dist/locales/ja.js.map +1 -1
  87. package/dist/locales/ko.js.map +1 -1
  88. package/dist/locales/nl.js.map +1 -1
  89. package/dist/locales/no.js.map +1 -1
  90. package/dist/locales/pl.js.map +1 -1
  91. package/dist/locales/pt-BR.js.map +1 -1
  92. package/dist/locales/pt.js.map +1 -1
  93. package/dist/locales/ru.js.map +1 -1
  94. package/dist/locales/sv.js.map +1 -1
  95. package/dist/locales/sw.js.map +1 -1
  96. package/dist/locales/th.js.map +1 -1
  97. package/dist/locales/tr.js.map +1 -1
  98. package/dist/locales/types.js.map +1 -1
  99. package/dist/locales/vi.js.map +1 -1
  100. package/dist/locales/zh.js.map +1 -1
  101. package/dist/locales.d.ts +54 -0
  102. package/dist/locales.d.ts.map +1 -0
  103. package/dist/locales.js +732 -0
  104. package/dist/locales.js.map +1 -0
  105. package/dist/logger.d.ts +94 -0
  106. package/dist/logger.d.ts.map +1 -0
  107. package/dist/logger.js +184 -0
  108. package/dist/logger.js.map +1 -0
  109. package/dist/pigment.d.ts +124 -0
  110. package/dist/pigment.d.ts.map +1 -0
  111. package/dist/pigment.js +177 -0
  112. package/dist/pigment.js.map +1 -0
  113. package/dist/plugins/codecs.d.ts +17 -0
  114. package/dist/plugins/codecs.d.ts.map +1 -0
  115. package/dist/plugins/codecs.js +29 -0
  116. package/dist/plugins/codecs.js.map +1 -0
  117. package/dist/plugins/coercion.d.ts +13 -0
  118. package/dist/plugins/coercion.d.ts.map +1 -0
  119. package/dist/plugins/coercion.js +34 -0
  120. package/dist/plugins/coercion.js.map +1 -0
  121. package/dist/plugins/core-validators.d.ts +13 -0
  122. package/dist/plugins/core-validators.d.ts.map +1 -0
  123. package/dist/plugins/core-validators.js +96 -0
  124. package/dist/plugins/core-validators.js.map +1 -0
  125. package/dist/plugins/index.d.ts +8 -0
  126. package/dist/plugins/index.d.ts.map +1 -0
  127. package/dist/plugins/index.js +8 -0
  128. package/dist/plugins/index.js.map +1 -0
  129. package/dist/plugins/kernel.d.ts +29 -0
  130. package/dist/plugins/kernel.d.ts.map +1 -0
  131. package/dist/plugins/kernel.js +486 -0
  132. package/dist/plugins/kernel.js.map +1 -0
  133. package/dist/plugins/types.d.ts +186 -0
  134. package/dist/plugins/types.d.ts.map +1 -0
  135. package/dist/plugins/types.js +8 -0
  136. package/dist/plugins/types.js.map +1 -0
  137. package/dist/style.d.ts +123 -0
  138. package/dist/style.d.ts.map +1 -0
  139. package/dist/style.js +369 -0
  140. package/dist/style.js.map +1 -0
  141. package/dist/utils/codec-utils.d.ts.map +1 -1
  142. package/dist/utils/codec-utils.js +6 -0
  143. package/dist/utils/codec-utils.js.map +1 -1
  144. package/dist/utils/ip-validation.d.ts.map +1 -1
  145. package/dist/utils/ip-validation.js +34 -14
  146. package/dist/utils/ip-validation.js.map +1 -1
  147. package/dist/validators/base.d.ts +3 -0
  148. package/dist/validators/base.d.ts.map +1 -1
  149. package/dist/validators/base.js +8 -0
  150. package/dist/validators/base.js.map +1 -1
  151. package/dist/validators/bigint.js.map +1 -1
  152. package/dist/validators/custom.js.map +1 -1
  153. package/dist/validators/discriminated-union.js.map +1 -1
  154. package/dist/validators/file.js.map +1 -1
  155. package/dist/validators/function.js.map +1 -1
  156. package/dist/validators/index.js.map +1 -1
  157. package/dist/validators/json.js.map +1 -1
  158. package/dist/validators/lazy.js.map +1 -1
  159. package/dist/validators/nan.js.map +1 -1
  160. package/dist/validators/null.js.map +1 -1
  161. package/dist/validators/object-optimized.d.ts +23 -0
  162. package/dist/validators/object-optimized.d.ts.map +1 -0
  163. package/dist/validators/object-optimized.js +179 -0
  164. package/dist/validators/object-optimized.js.map +1 -0
  165. package/dist/validators/object-ultra.d.ts +34 -0
  166. package/dist/validators/object-ultra.d.ts.map +1 -0
  167. package/dist/validators/object-ultra.js +175 -0
  168. package/dist/validators/object-ultra.js.map +1 -0
  169. package/dist/validators/object.d.ts.map +1 -1
  170. package/dist/validators/object.js +1 -1
  171. package/dist/validators/object.js.map +1 -1
  172. package/dist/validators/string-bool.js.map +1 -1
  173. package/dist/validators/string-formats.js.map +1 -1
  174. package/dist/validators/string-ultra.d.ts +49 -0
  175. package/dist/validators/string-ultra.d.ts.map +1 -0
  176. package/dist/validators/string-ultra.js +217 -0
  177. package/dist/validators/string-ultra.js.map +1 -0
  178. package/dist/validators/template-literal.d.ts.map +1 -1
  179. package/dist/validators/template-literal.js +13 -12
  180. package/dist/validators/template-literal.js.map +1 -1
  181. package/dist/validators/undefined.js.map +1 -1
  182. package/dist/validators/union-optimized.d.ts +15 -0
  183. package/dist/validators/union-optimized.d.ts.map +1 -0
  184. package/dist/validators/union-optimized.js +92 -0
  185. package/dist/validators/union-optimized.js.map +1 -0
  186. package/dist/validators/xor.js.map +1 -1
  187. package/package.json +95 -79
@@ -0,0 +1,15 @@
1
+ /**
2
+ * VLD CLI - Benchmark Command
3
+ *
4
+ * VLD performans testlerini çalıştırır.
5
+ *
6
+ * Kullanım:
7
+ * vld benchmark
8
+ * vld benchmark --iterations 10000
9
+ */
10
+ import type { Command } from './index.js';
11
+ /**
12
+ * Benchmark command
13
+ */
14
+ export declare const benchmarkCommand: Command;
15
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAoD9B,CAAC"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * VLD CLI - Benchmark Command
3
+ *
4
+ * VLD performans testlerini çalıştırır.
5
+ *
6
+ * Kullanım:
7
+ * vld benchmark
8
+ * vld benchmark --iterations 10000
9
+ */
10
+ import { style, formatTable } from '../style.js';
11
+ import { v } from '../index.js';
12
+ /**
13
+ * Benchmark command
14
+ */
15
+ export const benchmarkCommand = {
16
+ name: 'benchmark',
17
+ description: 'Run VLD performance benchmarks',
18
+ aliases: ['bench', 'b'],
19
+ arguments: [],
20
+ options: [
21
+ {
22
+ name: 'iterations',
23
+ short: 'i',
24
+ description: 'Number of iterations',
25
+ type: 'string',
26
+ default: '10000'
27
+ },
28
+ {
29
+ name: 'warmup',
30
+ short: 'w',
31
+ description: 'Warmup iterations',
32
+ type: 'string',
33
+ default: '1000'
34
+ },
35
+ {
36
+ name: 'format',
37
+ short: 'f',
38
+ description: 'Output format (pretty, json)',
39
+ type: 'string',
40
+ default: 'pretty'
41
+ }
42
+ ],
43
+ async action(_args, opts) {
44
+ const iterations = parseInt(opts.iterations, 10);
45
+ const warmup = parseInt(opts.warmup, 10);
46
+ const format = opts.format;
47
+ console.log(style.cyan('VLD Performance Benchmark'));
48
+ console.log('');
49
+ console.log(`${style.dim('Iterations:')} ${iterations.toLocaleString()}`);
50
+ console.log(`${style.dim('Warmup:')} ${warmup.toLocaleString()}`);
51
+ console.log('');
52
+ // Run benchmarks
53
+ const results = await runBenchmarks(iterations, warmup);
54
+ // Output results
55
+ if (format === 'json') {
56
+ console.log(JSON.stringify(results, null, 2));
57
+ }
58
+ else {
59
+ printResults(results);
60
+ }
61
+ }
62
+ };
63
+ /**
64
+ * Benchmark suite'leri
65
+ */
66
+ function getBenchmarkSuites() {
67
+ // Test data
68
+ const simpleStringData = 'hello world';
69
+ const simpleNumberData = 42;
70
+ const simpleObjectData = { name: 'John', age: 30, email: 'john@example.com' };
71
+ const complexObjectData = {
72
+ user: {
73
+ id: 1,
74
+ name: 'John Doe',
75
+ email: 'john@example.com',
76
+ roles: ['admin', 'user'],
77
+ profile: {
78
+ bio: 'A software developer',
79
+ avatar: 'https://example.com/avatar.jpg',
80
+ settings: {
81
+ theme: 'dark',
82
+ notifications: true
83
+ }
84
+ }
85
+ },
86
+ posts: [
87
+ { id: 1, title: 'Hello', content: 'World' },
88
+ { id: 2, title: 'Foo', content: 'Bar' }
89
+ ]
90
+ };
91
+ const arrayData = Array.from({ length: 100 }, (_, i) => ({
92
+ id: i,
93
+ name: `Item ${i}`,
94
+ value: i * 10
95
+ }));
96
+ // Schemas
97
+ const stringSchema = v.string();
98
+ const numberSchema = v.number();
99
+ const simpleObjectSchema = v.object({
100
+ name: v.string(),
101
+ age: v.number(),
102
+ email: v.string().email()
103
+ });
104
+ const complexObjectSchema = v.object({
105
+ user: v.object({
106
+ id: v.number(),
107
+ name: v.string(),
108
+ email: v.string().email(),
109
+ roles: v.array(v.string()),
110
+ profile: v.object({
111
+ bio: v.string(),
112
+ avatar: v.string().url(),
113
+ settings: v.object({
114
+ theme: v.string(),
115
+ notifications: v.boolean()
116
+ })
117
+ })
118
+ }),
119
+ posts: v.array(v.object({
120
+ id: v.number(),
121
+ title: v.string(),
122
+ content: v.string()
123
+ }))
124
+ });
125
+ const arraySchema = v.array(v.object({
126
+ id: v.number(),
127
+ name: v.string(),
128
+ value: v.number()
129
+ }));
130
+ return [
131
+ {
132
+ name: 'String validation',
133
+ run: (n) => {
134
+ for (let i = 0; i < n; i++) {
135
+ stringSchema.parse(simpleStringData);
136
+ }
137
+ }
138
+ },
139
+ {
140
+ name: 'Number validation',
141
+ run: (n) => {
142
+ for (let i = 0; i < n; i++) {
143
+ numberSchema.parse(simpleNumberData);
144
+ }
145
+ }
146
+ },
147
+ {
148
+ name: 'Simple object',
149
+ run: (n) => {
150
+ for (let i = 0; i < n; i++) {
151
+ simpleObjectSchema.parse(simpleObjectData);
152
+ }
153
+ }
154
+ },
155
+ {
156
+ name: 'Complex object',
157
+ run: (n) => {
158
+ for (let i = 0; i < n; i++) {
159
+ complexObjectSchema.parse(complexObjectData);
160
+ }
161
+ }
162
+ },
163
+ {
164
+ name: 'Array (100 items)',
165
+ run: (n) => {
166
+ for (let i = 0; i < n; i++) {
167
+ arraySchema.parse(arrayData);
168
+ }
169
+ }
170
+ },
171
+ {
172
+ name: 'safeParse (success)',
173
+ run: (n) => {
174
+ for (let i = 0; i < n; i++) {
175
+ simpleObjectSchema.safeParse(simpleObjectData);
176
+ }
177
+ }
178
+ },
179
+ {
180
+ name: 'safeParse (failure)',
181
+ run: (n) => {
182
+ const invalidData = { name: 123, age: 'invalid', email: 'invalid' };
183
+ for (let i = 0; i < n; i++) {
184
+ simpleObjectSchema.safeParse(invalidData);
185
+ }
186
+ }
187
+ }
188
+ ];
189
+ }
190
+ // ============================================================================
191
+ // Benchmark Runner
192
+ // ============================================================================
193
+ /**
194
+ * Benchmark'ları çalıştırır
195
+ */
196
+ async function runBenchmarks(iterations, warmup) {
197
+ const suites = getBenchmarkSuites();
198
+ const results = [];
199
+ for (const suite of suites) {
200
+ // Warmup
201
+ process.stdout.write(`${style.dim('Warming up:')} ${suite.name}...`);
202
+ suite.run(warmup);
203
+ process.stdout.write('\r' + ' '.repeat(60) + '\r');
204
+ // Benchmark
205
+ process.stdout.write(`${style.dim('Running:')} ${suite.name}...`);
206
+ const start = performance.now();
207
+ suite.run(iterations);
208
+ const end = performance.now();
209
+ process.stdout.write('\r' + ' '.repeat(60) + '\r');
210
+ const ms = end - start;
211
+ const opsPerSec = Math.round((iterations / ms) * 1000);
212
+ results.push({
213
+ name: suite.name,
214
+ ops: iterations,
215
+ ms: Math.round(ms * 100) / 100,
216
+ opsPerSec
217
+ });
218
+ console.log(`${style.green('✔')} ${suite.name}: ${style.bold(opsPerSec.toLocaleString())} ops/sec`);
219
+ }
220
+ return results;
221
+ }
222
+ /**
223
+ * Sonuçları yazdırır
224
+ */
225
+ function printResults(results) {
226
+ console.log('');
227
+ console.log(style.bold('Results:'));
228
+ console.log('');
229
+ const table = formatTable(results.map((r) => [
230
+ r.name,
231
+ r.opsPerSec.toLocaleString(),
232
+ `${r.ms.toFixed(2)}ms`
233
+ ]), {
234
+ columns: [
235
+ { header: 'Benchmark', align: 'left' },
236
+ { header: 'ops/sec', align: 'right' },
237
+ { header: 'Time', align: 'right' }
238
+ ],
239
+ headerColor: style.bold
240
+ });
241
+ console.log(table);
242
+ console.log('');
243
+ // Summary
244
+ const totalOps = results.reduce((sum, r) => sum + r.opsPerSec, 0);
245
+ const avgOps = Math.round(totalOps / results.length);
246
+ console.log(style.dim('Average:') + ` ${avgOps.toLocaleString()} ops/sec`);
247
+ }
248
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/cli/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * VLD CLI - Benchmark Command\n *\n * VLD performans testlerini çalıştırır.\n *\n * Kullanım:\n * vld benchmark\n * vld benchmark --iterations 10000\n */\n\nimport type { Command } from './index.js';\nimport { style, formatTable } from '../style.js';\nimport { v } from '../index.js';\n\n/**\n * Benchmark command\n */\nexport const benchmarkCommand: Command = {\n name: 'benchmark',\n description: 'Run VLD performance benchmarks',\n aliases: ['bench', 'b'],\n\n arguments: [],\n\n options: [\n {\n name: 'iterations',\n short: 'i',\n description: 'Number of iterations',\n type: 'string',\n default: '10000'\n },\n {\n name: 'warmup',\n short: 'w',\n description: 'Warmup iterations',\n type: 'string',\n default: '1000'\n },\n {\n name: 'format',\n short: 'f',\n description: 'Output format (pretty, json)',\n type: 'string',\n default: 'pretty'\n }\n ],\n\n async action(_args, opts) {\n const iterations = parseInt(opts.iterations as string, 10);\n const warmup = parseInt(opts.warmup as string, 10);\n const format = opts.format as string;\n\n console.log(style.cyan('VLD Performance Benchmark'));\n console.log('');\n console.log(`${style.dim('Iterations:')} ${iterations.toLocaleString()}`);\n console.log(`${style.dim('Warmup:')} ${warmup.toLocaleString()}`);\n console.log('');\n\n // Run benchmarks\n const results = await runBenchmarks(iterations, warmup);\n\n // Output results\n if (format === 'json') {\n console.log(JSON.stringify(results, null, 2));\n } else {\n printResults(results);\n }\n }\n};\n\n// ============================================================================\n// Benchmark Definitions\n// ============================================================================\n\ninterface BenchmarkResult {\n name: string;\n ops: number;\n ms: number;\n opsPerSec: number;\n}\n\ninterface BenchmarkSuite {\n name: string;\n run: (iterations: number) => void;\n}\n\n/**\n * Benchmark suite'leri\n */\nfunction getBenchmarkSuites(): BenchmarkSuite[] {\n // Test data\n const simpleStringData = 'hello world';\n const simpleNumberData = 42;\n const simpleObjectData = { name: 'John', age: 30, email: 'john@example.com' };\n const complexObjectData = {\n user: {\n id: 1,\n name: 'John Doe',\n email: 'john@example.com',\n roles: ['admin', 'user'],\n profile: {\n bio: 'A software developer',\n avatar: 'https://example.com/avatar.jpg',\n settings: {\n theme: 'dark',\n notifications: true\n }\n }\n },\n posts: [\n { id: 1, title: 'Hello', content: 'World' },\n { id: 2, title: 'Foo', content: 'Bar' }\n ]\n };\n const arrayData = Array.from({ length: 100 }, (_, i) => ({\n id: i,\n name: `Item ${i}`,\n value: i * 10\n }));\n\n // Schemas\n const stringSchema = v.string();\n const numberSchema = v.number();\n const simpleObjectSchema = v.object({\n name: v.string(),\n age: v.number(),\n email: v.string().email()\n });\n const complexObjectSchema = v.object({\n user: v.object({\n id: v.number(),\n name: v.string(),\n email: v.string().email(),\n roles: v.array(v.string()),\n profile: v.object({\n bio: v.string(),\n avatar: v.string().url(),\n settings: v.object({\n theme: v.string(),\n notifications: v.boolean()\n })\n })\n }),\n posts: v.array(v.object({\n id: v.number(),\n title: v.string(),\n content: v.string()\n }))\n });\n const arraySchema = v.array(v.object({\n id: v.number(),\n name: v.string(),\n value: v.number()\n }));\n\n return [\n {\n name: 'String validation',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n stringSchema.parse(simpleStringData);\n }\n }\n },\n {\n name: 'Number validation',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n numberSchema.parse(simpleNumberData);\n }\n }\n },\n {\n name: 'Simple object',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n simpleObjectSchema.parse(simpleObjectData);\n }\n }\n },\n {\n name: 'Complex object',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n complexObjectSchema.parse(complexObjectData);\n }\n }\n },\n {\n name: 'Array (100 items)',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n arraySchema.parse(arrayData);\n }\n }\n },\n {\n name: 'safeParse (success)',\n run: (n) => {\n for (let i = 0; i < n; i++) {\n simpleObjectSchema.safeParse(simpleObjectData);\n }\n }\n },\n {\n name: 'safeParse (failure)',\n run: (n) => {\n const invalidData = { name: 123, age: 'invalid', email: 'invalid' };\n for (let i = 0; i < n; i++) {\n simpleObjectSchema.safeParse(invalidData);\n }\n }\n }\n ];\n}\n\n// ============================================================================\n// Benchmark Runner\n// ============================================================================\n\n/**\n * Benchmark'ları çalıştırır\n */\nasync function runBenchmarks(iterations: number, warmup: number): Promise<BenchmarkResult[]> {\n const suites = getBenchmarkSuites();\n const results: BenchmarkResult[] = [];\n\n for (const suite of suites) {\n // Warmup\n process.stdout.write(`${style.dim('Warming up:')} ${suite.name}...`);\n suite.run(warmup);\n process.stdout.write('\\r' + ' '.repeat(60) + '\\r');\n\n // Benchmark\n process.stdout.write(`${style.dim('Running:')} ${suite.name}...`);\n\n const start = performance.now();\n suite.run(iterations);\n const end = performance.now();\n\n process.stdout.write('\\r' + ' '.repeat(60) + '\\r');\n\n const ms = end - start;\n const opsPerSec = Math.round((iterations / ms) * 1000);\n\n results.push({\n name: suite.name,\n ops: iterations,\n ms: Math.round(ms * 100) / 100,\n opsPerSec\n });\n\n console.log(`${style.green('✔')} ${suite.name}: ${style.bold(opsPerSec.toLocaleString())} ops/sec`);\n }\n\n return results;\n}\n\n/**\n * Sonuçları yazdırır\n */\nfunction printResults(results: BenchmarkResult[]): void {\n console.log('');\n console.log(style.bold('Results:'));\n console.log('');\n\n const table = formatTable(\n results.map((r) => [\n r.name,\n r.opsPerSec.toLocaleString(),\n `${r.ms.toFixed(2)}ms`\n ]),\n {\n columns: [\n { header: 'Benchmark', align: 'left' },\n { header: 'ops/sec', align: 'right' },\n { header: 'Time', align: 'right' }\n ],\n headerColor: style.bold\n }\n );\n\n console.log(table);\n console.log('');\n\n // Summary\n const totalOps = results.reduce((sum, r) => sum + r.opsPerSec, 0);\n const avgOps = Math.round(totalOps / results.length);\n\n console.log(style.dim('Average:') + ` ${avgOps.toLocaleString()} ops/sec`);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VLD CLI Entry Point
4
+ *
5
+ * This is the main entry point for the `vld` command-line tool.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VLD CLI Entry Point
4
+ *
5
+ * This is the main entry point for the `vld` command-line tool.
6
+ */
7
+ import { vldCli } from './index.js';
8
+ import { validateCommand } from './commands/validate.js';
9
+ import { benchmarkCommand } from './commands/benchmark.js';
10
+ // Register commands
11
+ vldCli.command(validateCommand);
12
+ vldCli.command(benchmarkCommand);
13
+ // Help command
14
+ vldCli.command({
15
+ name: 'help',
16
+ description: 'Show help information',
17
+ aliases: ['h'],
18
+ action: () => {
19
+ console.log(vldCli.help());
20
+ }
21
+ });
22
+ // Version command
23
+ vldCli.command({
24
+ name: 'version',
25
+ description: 'Show version information',
26
+ action: () => {
27
+ console.log('vld v1.5.0');
28
+ }
29
+ });
30
+ // Run CLI
31
+ vldCli.run(process.argv.slice(2)).catch((error) => {
32
+ console.error('Fatal error:', error);
33
+ process.exitCode = 1;
34
+ });
35
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,oBAAoB;AACpB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAChC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEjC,eAAe;AACf,MAAM,CAAC,OAAO,CAAC;IACb,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,MAAM,EAAE,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC,CAAC;AAEH,kBAAkB;AAClB,MAAM,CAAC,OAAO,CAAC;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,0BAA0B;IACvC,MAAM,EAAE,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,UAAU;AACV,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChD,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * VLD CLI Entry Point\r\n *\r\n * This is the main entry point for the `vld` command-line tool.\r\n */\r\n\r\nimport { vldCli } from './index';\r\nimport { validateCommand } from './commands/validate';\r\nimport { benchmarkCommand } from './commands/benchmark';\r\n\r\n// Register commands\r\nvldCli.command(validateCommand);\r\nvldCli.command(benchmarkCommand);\r\n\r\n// Help command\r\nvldCli.command({\r\n name: 'help',\r\n description: 'Show help information',\r\n aliases: ['h'],\r\n action: () => {\r\n console.log(vldCli.help());\r\n }\r\n});\r\n\r\n// Version command\r\nvldCli.command({\r\n name: 'version',\r\n description: 'Show version information',\r\n action: () => {\r\n console.log('vld v1.5.0');\r\n }\r\n});\r\n\r\n// Run CLI\r\nvldCli.run(process.argv.slice(2)).catch((error) => {\r\n console.error('Fatal error:', error);\r\n process.exitCode = 1;\r\n});\r\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * VLD CLI - Benchmark Command
3
+ *
4
+ * Run performance benchmarks for VLD validation.
5
+ */
6
+ import type { CliCommand } from '../index';
7
+ /**
8
+ * Benchmark command
9
+ */
10
+ export declare const benchmarkCommand: CliCommand;
11
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA8D3C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAmM9B,CAAC"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * VLD CLI - Benchmark Command
3
+ *
4
+ * Run performance benchmarks for VLD validation.
5
+ */
6
+ import { pigment } from '../../pigment.js';
7
+ import { v } from '../../index.js';
8
+ /**
9
+ * Run a single benchmark
10
+ */
11
+ function runBenchmark(name, fn, iterations) {
12
+ // Warm up
13
+ for (let i = 0; i < Math.min(100, iterations / 10); i++) {
14
+ fn();
15
+ }
16
+ // Run benchmark
17
+ const start = performance.now();
18
+ for (let i = 0; i < iterations; i++) {
19
+ fn();
20
+ }
21
+ const end = performance.now();
22
+ const totalMs = end - start;
23
+ const avgMs = totalMs / iterations;
24
+ const opsPerSec = 1000 / avgMs;
25
+ return { name, iterations, totalMs, avgMs, opsPerSec };
26
+ }
27
+ /**
28
+ * Format number with comma separators
29
+ */
30
+ function formatNumber(n) {
31
+ return n.toLocaleString('en-US', { maximumFractionDigits: 2 });
32
+ }
33
+ /**
34
+ * Format benchmark result
35
+ */
36
+ function formatResult(result, colored) {
37
+ const name = colored ? pigment.cyan(result.name.padEnd(30)) : result.name.padEnd(30);
38
+ const ops = colored
39
+ ? pigment.green(formatNumber(result.opsPerSec).padStart(12))
40
+ : formatNumber(result.opsPerSec).padStart(12);
41
+ const avg = colored
42
+ ? pigment.yellow(result.avgMs.toFixed(6).padStart(12))
43
+ : result.avgMs.toFixed(6).padStart(12);
44
+ return `${name} ${ops} ops/sec ${avg} ms/op`;
45
+ }
46
+ /**
47
+ * Benchmark command
48
+ */
49
+ export const benchmarkCommand = {
50
+ name: 'benchmark',
51
+ description: 'Run performance benchmarks',
52
+ aliases: ['bench', 'b'],
53
+ options: [
54
+ {
55
+ name: 'iterations',
56
+ short: 'n',
57
+ description: 'Number of iterations',
58
+ type: 'number',
59
+ default: 10000
60
+ },
61
+ {
62
+ name: 'suite',
63
+ short: 's',
64
+ description: 'Benchmark suite to run (all, primitives, objects, arrays)',
65
+ type: 'string',
66
+ default: 'all'
67
+ },
68
+ {
69
+ name: 'json',
70
+ short: 'j',
71
+ description: 'Output as JSON',
72
+ type: 'boolean',
73
+ default: false
74
+ },
75
+ {
76
+ name: 'no-color',
77
+ description: 'Disable colored output',
78
+ type: 'boolean',
79
+ default: false
80
+ }
81
+ ],
82
+ action: async (_args, options) => {
83
+ const iterations = options.iterations;
84
+ const suite = options.suite;
85
+ const json = options.json;
86
+ const noColor = options['no-color'];
87
+ const colored = !noColor;
88
+ const results = [];
89
+ // Primitive validators
90
+ const stringSchema = v.string();
91
+ const numberSchema = v.number();
92
+ const booleanSchema = v.boolean();
93
+ const dateSchema = v.date();
94
+ // Object validator
95
+ const userSchema = v.object({
96
+ name: v.string(),
97
+ email: v.string(),
98
+ age: v.number(),
99
+ active: v.boolean()
100
+ });
101
+ // Array validator
102
+ const numbersSchema = v.array(v.number());
103
+ // Nested object validator
104
+ const nestedSchema = v.object({
105
+ user: v.object({
106
+ name: v.string(),
107
+ email: v.string()
108
+ }),
109
+ items: v.array(v.object({
110
+ id: v.number(),
111
+ name: v.string(),
112
+ price: v.number()
113
+ }))
114
+ });
115
+ // Test data
116
+ const testString = 'hello world';
117
+ const testNumber = 42;
118
+ const testBoolean = true;
119
+ const testDate = new Date();
120
+ const testUser = { name: 'John', email: 'john@example.com', age: 30, active: true };
121
+ const testNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
122
+ const testNested = {
123
+ user: { name: 'John', email: 'john@example.com' },
124
+ items: [
125
+ { id: 1, name: 'Item 1', price: 10.99 },
126
+ { id: 2, name: 'Item 2', price: 20.99 },
127
+ { id: 3, name: 'Item 3', price: 30.99 }
128
+ ]
129
+ };
130
+ if (!json) {
131
+ console.log(pigment.bold('VLD Performance Benchmark'));
132
+ console.log(pigment.dim(`Running ${formatNumber(iterations)} iterations per test`));
133
+ console.log('');
134
+ }
135
+ // Primitive benchmarks
136
+ if (suite === 'all' || suite === 'primitives') {
137
+ if (!json) {
138
+ console.log(pigment.bold('Primitives:'));
139
+ }
140
+ results.push(runBenchmark('string.parse()', () => stringSchema.parse(testString), iterations));
141
+ results.push(runBenchmark('number.parse()', () => numberSchema.parse(testNumber), iterations));
142
+ results.push(runBenchmark('boolean.parse()', () => booleanSchema.parse(testBoolean), iterations));
143
+ results.push(runBenchmark('date.parse()', () => dateSchema.parse(testDate), iterations));
144
+ results.push(runBenchmark('string.safeParse()', () => stringSchema.safeParse(testString), iterations));
145
+ if (!json) {
146
+ for (const result of results.slice(-5)) {
147
+ console.log(' ' + formatResult(result, colored));
148
+ }
149
+ console.log('');
150
+ }
151
+ }
152
+ // Object benchmarks
153
+ if (suite === 'all' || suite === 'objects') {
154
+ if (!json) {
155
+ console.log(pigment.bold('Objects:'));
156
+ }
157
+ results.push(runBenchmark('object.parse()', () => userSchema.parse(testUser), iterations));
158
+ results.push(runBenchmark('object.safeParse()', () => userSchema.safeParse(testUser), iterations));
159
+ results.push(runBenchmark('nested.parse()', () => nestedSchema.parse(testNested), iterations));
160
+ if (!json) {
161
+ for (const result of results.slice(-3)) {
162
+ console.log(' ' + formatResult(result, colored));
163
+ }
164
+ console.log('');
165
+ }
166
+ }
167
+ // Array benchmarks
168
+ if (suite === 'all' || suite === 'arrays') {
169
+ if (!json) {
170
+ console.log(pigment.bold('Arrays:'));
171
+ }
172
+ results.push(runBenchmark('array.parse()', () => numbersSchema.parse(testNumbers), iterations));
173
+ results.push(runBenchmark('array.safeParse()', () => numbersSchema.safeParse(testNumbers), iterations));
174
+ if (!json) {
175
+ for (const result of results.slice(-2)) {
176
+ console.log(' ' + formatResult(result, colored));
177
+ }
178
+ console.log('');
179
+ }
180
+ }
181
+ // Summary
182
+ if (!json) {
183
+ const totalOps = results.reduce((sum, r) => sum + r.opsPerSec, 0);
184
+ const avgOps = totalOps / results.length;
185
+ console.log(pigment.bold('Summary:'));
186
+ console.log(` Total benchmarks: ${results.length}`);
187
+ console.log(` Average ops/sec: ${formatNumber(avgOps)}`);
188
+ }
189
+ else {
190
+ console.log(JSON.stringify({
191
+ iterations,
192
+ suite,
193
+ results: results.map((r) => ({
194
+ name: r.name,
195
+ iterations: r.iterations,
196
+ totalMs: r.totalMs,
197
+ avgMs: r.avgMs,
198
+ opsPerSec: r.opsPerSec
199
+ }))
200
+ }));
201
+ }
202
+ }
203
+ };
204
+ //# sourceMappingURL=benchmark.js.map
@@ -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"}