@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.
- package/CHANGELOG.md +333 -333
- package/README.md +1130 -1130
- package/dist/cli/benchmark.d.ts +15 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +248 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +204 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +157 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +233 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +59 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/validate.d.ts +15 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +162 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/codecs/index.d.ts.map +1 -1
- package/dist/codecs/index.js +29 -10
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/boolean.d.ts.map +1 -1
- package/dist/coercion/boolean.js +23 -31
- package/dist/coercion/boolean.js.map +1 -1
- package/dist/coercion/date.js +1 -1
- package/dist/coercion/date.js.map +1 -1
- package/dist/compat/emitter.d.ts +73 -0
- package/dist/compat/emitter.d.ts.map +1 -0
- package/dist/compat/emitter.js +179 -0
- package/dist/compat/emitter.js.map +1 -0
- package/dist/compat/index.d.ts +15 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +14 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/result.d.ts +128 -0
- package/dist/compat/result.d.ts.map +1 -0
- package/dist/compat/result.js +169 -0
- package/dist/compat/result.js.map +1 -0
- package/dist/errors.d.ts +58 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -9
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +140 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/guards.d.ts +143 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +238 -0
- package/dist/guards.js.map +1 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +29 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +402 -0
- package/dist/kernel.js.map +1 -0
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/backup-en.js.map +1 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/locales.d.ts +54 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +732 -0
- package/dist/locales.js.map +1 -0
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +184 -0
- package/dist/logger.js.map +1 -0
- package/dist/pigment.d.ts +124 -0
- package/dist/pigment.d.ts.map +1 -0
- package/dist/pigment.js +177 -0
- package/dist/pigment.js.map +1 -0
- package/dist/plugins/codecs.d.ts +17 -0
- package/dist/plugins/codecs.d.ts.map +1 -0
- package/dist/plugins/codecs.js +29 -0
- package/dist/plugins/codecs.js.map +1 -0
- package/dist/plugins/coercion.d.ts +13 -0
- package/dist/plugins/coercion.d.ts.map +1 -0
- package/dist/plugins/coercion.js +34 -0
- package/dist/plugins/coercion.js.map +1 -0
- package/dist/plugins/core-validators.d.ts +13 -0
- package/dist/plugins/core-validators.d.ts.map +1 -0
- package/dist/plugins/core-validators.js +96 -0
- package/dist/plugins/core-validators.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/kernel.d.ts +29 -0
- package/dist/plugins/kernel.d.ts.map +1 -0
- package/dist/plugins/kernel.js +486 -0
- package/dist/plugins/kernel.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/style.d.ts +123 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +369 -0
- package/dist/style.js.map +1 -0
- package/dist/utils/codec-utils.d.ts.map +1 -1
- package/dist/utils/codec-utils.js +6 -0
- package/dist/utils/codec-utils.js.map +1 -1
- package/dist/utils/ip-validation.d.ts.map +1 -1
- package/dist/utils/ip-validation.js +34 -14
- package/dist/utils/ip-validation.js.map +1 -1
- package/dist/validators/base.d.ts +3 -0
- package/dist/validators/base.d.ts.map +1 -1
- package/dist/validators/base.js +8 -0
- package/dist/validators/base.js.map +1 -1
- package/dist/validators/bigint.js.map +1 -1
- package/dist/validators/custom.js.map +1 -1
- package/dist/validators/discriminated-union.js.map +1 -1
- package/dist/validators/file.js.map +1 -1
- package/dist/validators/function.js.map +1 -1
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/json.js.map +1 -1
- package/dist/validators/lazy.js.map +1 -1
- package/dist/validators/nan.js.map +1 -1
- package/dist/validators/null.js.map +1 -1
- package/dist/validators/object-optimized.d.ts +23 -0
- package/dist/validators/object-optimized.d.ts.map +1 -0
- package/dist/validators/object-optimized.js +179 -0
- package/dist/validators/object-optimized.js.map +1 -0
- package/dist/validators/object-ultra.d.ts +34 -0
- package/dist/validators/object-ultra.d.ts.map +1 -0
- package/dist/validators/object-ultra.js +175 -0
- package/dist/validators/object-ultra.js.map +1 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +1 -1
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/string-bool.js.map +1 -1
- package/dist/validators/string-formats.js.map +1 -1
- package/dist/validators/string-ultra.d.ts +49 -0
- package/dist/validators/string-ultra.d.ts.map +1 -0
- package/dist/validators/string-ultra.js +217 -0
- package/dist/validators/string-ultra.js.map +1 -0
- package/dist/validators/template-literal.d.ts.map +1 -1
- package/dist/validators/template-literal.js +13 -12
- package/dist/validators/template-literal.js.map +1 -1
- package/dist/validators/undefined.js.map +1 -1
- package/dist/validators/union-optimized.d.ts +15 -0
- package/dist/validators/union-optimized.d.ts.map +1 -0
- package/dist/validators/union-optimized.js +92 -0
- package/dist/validators/union-optimized.js.map +1 -0
- package/dist/validators/xor.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
package/dist/cli/bin.js
ADDED
|
@@ -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"}
|