@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,182 @@
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
+ import { pigment } from '../pigment.js';
8
+ /**
9
+ * Parse command line arguments
10
+ */
11
+ function parseArgs(args, options = []) {
12
+ const result = {
13
+ positional: [],
14
+ options: {}
15
+ };
16
+ // Set defaults
17
+ for (const opt of options) {
18
+ if (opt.default !== undefined) {
19
+ result.options[opt.name] = opt.default;
20
+ }
21
+ }
22
+ let i = 0;
23
+ while (i < args.length) {
24
+ const arg = args[i];
25
+ if (arg.startsWith('--')) {
26
+ // Long option
27
+ const [name, value] = arg.slice(2).split('=');
28
+ const option = options.find((o) => o.name === name);
29
+ if (option) {
30
+ if (option.type === 'boolean') {
31
+ result.options[name] = value !== 'false';
32
+ }
33
+ else if (value !== undefined) {
34
+ result.options[name] = option.type === 'number' ? Number(value) : value;
35
+ }
36
+ else if (i + 1 < args.length && !args[i + 1].startsWith('-')) {
37
+ i++;
38
+ result.options[name] = option.type === 'number' ? Number(args[i]) : args[i];
39
+ }
40
+ else {
41
+ result.options[name] = true;
42
+ }
43
+ }
44
+ }
45
+ else if (arg.startsWith('-')) {
46
+ // Short option
47
+ const short = arg.slice(1);
48
+ const option = options.find((o) => o.short === short);
49
+ if (option) {
50
+ if (option.type === 'boolean') {
51
+ result.options[option.name] = true;
52
+ }
53
+ else if (i + 1 < args.length && !args[i + 1].startsWith('-')) {
54
+ i++;
55
+ result.options[option.name] =
56
+ option.type === 'number' ? Number(args[i]) : args[i];
57
+ }
58
+ }
59
+ }
60
+ else {
61
+ // Positional argument
62
+ result.positional.push(arg);
63
+ }
64
+ i++;
65
+ }
66
+ return result;
67
+ }
68
+ /**
69
+ * Create a CLI instance
70
+ */
71
+ export function createCli(name, version, description) {
72
+ const commands = new Map();
73
+ const cli = {
74
+ name,
75
+ version,
76
+ description,
77
+ commands,
78
+ command(cmd) {
79
+ commands.set(cmd.name, cmd);
80
+ if (cmd.aliases) {
81
+ for (const alias of cmd.aliases) {
82
+ commands.set(alias, cmd);
83
+ }
84
+ }
85
+ return this;
86
+ },
87
+ help() {
88
+ const lines = [];
89
+ lines.push(pigment.bold(`${name} v${version}`));
90
+ lines.push(pigment.dim(description));
91
+ lines.push('');
92
+ lines.push(pigment.bold('Usage:'));
93
+ lines.push(` ${name} <command> [options]`);
94
+ lines.push('');
95
+ lines.push(pigment.bold('Commands:'));
96
+ const uniqueCommands = new Map();
97
+ for (const [_cmdName, cmd] of commands) {
98
+ if (!uniqueCommands.has(cmd.name)) {
99
+ uniqueCommands.set(cmd.name, cmd);
100
+ }
101
+ }
102
+ for (const [cmdName, cmd] of uniqueCommands) {
103
+ const aliases = cmd.aliases?.length ? pigment.dim(` (${cmd.aliases.join(', ')})`) : '';
104
+ lines.push(` ${pigment.cyan(cmdName)}${aliases}`);
105
+ lines.push(` ${cmd.description}`);
106
+ }
107
+ lines.push('');
108
+ lines.push(pigment.bold('Options:'));
109
+ lines.push(` ${pigment.cyan('-h, --help')} Show help`);
110
+ lines.push(` ${pigment.cyan('-v, --version')} Show version`);
111
+ return lines.join('\n');
112
+ },
113
+ async run(args) {
114
+ // Handle help
115
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
116
+ console.log(this.help());
117
+ return;
118
+ }
119
+ // Handle version
120
+ if (args.includes('--version') || args.includes('-v')) {
121
+ console.log(`${name} v${version}`);
122
+ return;
123
+ }
124
+ // Get command
125
+ const cmdName = args[0];
126
+ const cmd = commands.get(cmdName);
127
+ if (!cmd) {
128
+ console.error(pigment.red(`Unknown command: ${cmdName}`));
129
+ console.log('');
130
+ console.log(this.help());
131
+ process.exitCode = 1;
132
+ return;
133
+ }
134
+ // Parse arguments
135
+ const parsed = parseArgs(args.slice(1), cmd.options);
136
+ // Map positional arguments
137
+ const positionalArgs = {};
138
+ if (cmd.arguments) {
139
+ for (let i = 0; i < cmd.arguments.length; i++) {
140
+ const arg = cmd.arguments[i];
141
+ if (i < parsed.positional.length) {
142
+ positionalArgs[arg.name] = parsed.positional[i];
143
+ }
144
+ else if (arg.default !== undefined) {
145
+ positionalArgs[arg.name] = arg.default;
146
+ }
147
+ else if (arg.required) {
148
+ console.error(pigment.red(`Missing required argument: ${arg.name}`));
149
+ process.exitCode = 1;
150
+ return;
151
+ }
152
+ }
153
+ }
154
+ // Check required options
155
+ if (cmd.options) {
156
+ for (const opt of cmd.options) {
157
+ if (opt.required && parsed.options[opt.name] === undefined) {
158
+ console.error(pigment.red(`Missing required option: --${opt.name}`));
159
+ process.exitCode = 1;
160
+ return;
161
+ }
162
+ }
163
+ }
164
+ // Execute command
165
+ try {
166
+ await cmd.action(positionalArgs, parsed.options);
167
+ }
168
+ catch (error) {
169
+ console.error(pigment.red('Error:'), error.message);
170
+ process.exitCode = 1;
171
+ }
172
+ }
173
+ };
174
+ return cli;
175
+ }
176
+ /**
177
+ * VLD CLI instance
178
+ */
179
+ export const vldCli = createCli('vld', '1.5.0', 'Fast TypeScript Validation Library');
180
+ // Export CLI components
181
+ export { createCli as cli };
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * VLD CLI Tool\r\n *\r\n * Command-line interface for VLD validation library.\r\n * Provides commands for validation, schema generation, and benchmarking.\r\n */\r\n\r\nimport { pigment } from '../pigment';\r\n\r\n/**\r\n * CLI command definition\r\n */\r\nexport interface CliCommand {\r\n name: string;\r\n description: string;\r\n aliases?: string[];\r\n arguments?: CliArgument[];\r\n options?: CliOption[];\r\n action: (args: Record<string, unknown>, options: Record<string, unknown>) => void | Promise<void>;\r\n}\r\n\r\n/**\r\n * CLI argument definition\r\n */\r\nexport interface CliArgument {\r\n name: string;\r\n description: string;\r\n required?: boolean;\r\n default?: unknown;\r\n}\r\n\r\n/**\r\n * CLI option definition\r\n */\r\nexport interface CliOption {\r\n name: string;\r\n short?: string;\r\n description: string;\r\n type?: 'string' | 'number' | 'boolean';\r\n default?: unknown;\r\n required?: boolean;\r\n}\r\n\r\n/**\r\n * CLI instance\r\n */\r\nexport interface Cli {\r\n name: string;\r\n version: string;\r\n description: string;\r\n commands: Map<string, CliCommand>;\r\n\r\n // Builder methods\r\n command(cmd: CliCommand): Cli;\r\n help(): string;\r\n run(args: string[]): Promise<void>;\r\n}\r\n\r\n/**\r\n * Parse command line arguments\r\n */\r\nfunction parseArgs(args: string[], options: CliOption[] = []): {\r\n positional: string[];\r\n options: Record<string, unknown>;\r\n} {\r\n const result = {\r\n positional: [] as string[],\r\n options: {} as Record<string, unknown>\r\n };\r\n\r\n // Set defaults\r\n for (const opt of options) {\r\n if (opt.default !== undefined) {\r\n result.options[opt.name] = opt.default;\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < args.length) {\r\n const arg = args[i];\r\n\r\n if (arg.startsWith('--')) {\r\n // Long option\r\n const [name, value] = arg.slice(2).split('=');\r\n const option = options.find((o) => o.name === name);\r\n\r\n if (option) {\r\n if (option.type === 'boolean') {\r\n result.options[name] = value !== 'false';\r\n } else if (value !== undefined) {\r\n result.options[name] = option.type === 'number' ? Number(value) : value;\r\n } else if (i + 1 < args.length && !args[i + 1].startsWith('-')) {\r\n i++;\r\n result.options[name] = option.type === 'number' ? Number(args[i]) : args[i];\r\n } else {\r\n result.options[name] = true;\r\n }\r\n }\r\n } else if (arg.startsWith('-')) {\r\n // Short option\r\n const short = arg.slice(1);\r\n const option = options.find((o) => o.short === short);\r\n\r\n if (option) {\r\n if (option.type === 'boolean') {\r\n result.options[option.name] = true;\r\n } else if (i + 1 < args.length && !args[i + 1].startsWith('-')) {\r\n i++;\r\n result.options[option.name] =\r\n option.type === 'number' ? Number(args[i]) : args[i];\r\n }\r\n }\r\n } else {\r\n // Positional argument\r\n result.positional.push(arg);\r\n }\r\n\r\n i++;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Create a CLI instance\r\n */\r\nexport function createCli(name: string, version: string, description: string): Cli {\r\n const commands = new Map<string, CliCommand>();\r\n\r\n const cli: Cli = {\r\n name,\r\n version,\r\n description,\r\n commands,\r\n\r\n command(cmd: CliCommand): Cli {\r\n commands.set(cmd.name, cmd);\r\n if (cmd.aliases) {\r\n for (const alias of cmd.aliases) {\r\n commands.set(alias, cmd);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n help(): string {\r\n const lines: string[] = [];\r\n\r\n lines.push(pigment.bold(`${name} v${version}`));\r\n lines.push(pigment.dim(description));\r\n lines.push('');\r\n lines.push(pigment.bold('Usage:'));\r\n lines.push(` ${name} <command> [options]`);\r\n lines.push('');\r\n lines.push(pigment.bold('Commands:'));\r\n\r\n const uniqueCommands = new Map<string, CliCommand>();\r\n for (const [_cmdName, cmd] of commands) {\r\n if (!uniqueCommands.has(cmd.name)) {\r\n uniqueCommands.set(cmd.name, cmd);\r\n }\r\n }\r\n\r\n for (const [cmdName, cmd] of uniqueCommands) {\r\n const aliases = cmd.aliases?.length ? pigment.dim(` (${cmd.aliases.join(', ')})`) : '';\r\n lines.push(` ${pigment.cyan(cmdName)}${aliases}`);\r\n lines.push(` ${cmd.description}`);\r\n }\r\n\r\n lines.push('');\r\n lines.push(pigment.bold('Options:'));\r\n lines.push(` ${pigment.cyan('-h, --help')} Show help`);\r\n lines.push(` ${pigment.cyan('-v, --version')} Show version`);\r\n\r\n return lines.join('\\n');\r\n },\r\n\r\n async run(args: string[]): Promise<void> {\r\n // Handle help\r\n if (args.includes('--help') || args.includes('-h') || args.length === 0) {\r\n console.log(this.help());\r\n return;\r\n }\r\n\r\n // Handle version\r\n if (args.includes('--version') || args.includes('-v')) {\r\n console.log(`${name} v${version}`);\r\n return;\r\n }\r\n\r\n // Get command\r\n const cmdName = args[0];\r\n const cmd = commands.get(cmdName);\r\n\r\n if (!cmd) {\r\n console.error(pigment.red(`Unknown command: ${cmdName}`));\r\n console.log('');\r\n console.log(this.help());\r\n process.exitCode = 1;\r\n return;\r\n }\r\n\r\n // Parse arguments\r\n const parsed = parseArgs(args.slice(1), cmd.options);\r\n\r\n // Map positional arguments\r\n const positionalArgs: Record<string, unknown> = {};\r\n if (cmd.arguments) {\r\n for (let i = 0; i < cmd.arguments.length; i++) {\r\n const arg = cmd.arguments[i];\r\n if (i < parsed.positional.length) {\r\n positionalArgs[arg.name] = parsed.positional[i];\r\n } else if (arg.default !== undefined) {\r\n positionalArgs[arg.name] = arg.default;\r\n } else if (arg.required) {\r\n console.error(pigment.red(`Missing required argument: ${arg.name}`));\r\n process.exitCode = 1;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // Check required options\r\n if (cmd.options) {\r\n for (const opt of cmd.options) {\r\n if (opt.required && parsed.options[opt.name] === undefined) {\r\n console.error(pigment.red(`Missing required option: --${opt.name}`));\r\n process.exitCode = 1;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // Execute command\r\n try {\r\n await cmd.action(positionalArgs, parsed.options);\r\n } catch (error) {\r\n console.error(pigment.red('Error:'), (error as Error).message);\r\n process.exitCode = 1;\r\n }\r\n }\r\n };\r\n\r\n return cli;\r\n}\r\n\r\n/**\r\n * VLD CLI instance\r\n */\r\nexport const vldCli = createCli('vld', '1.5.0', 'Fast TypeScript Validation Library');\r\n\r\n// Export CLI components\r\nexport { createCli as cli };\r\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * VLD CLI - Validate Command
3
+ *
4
+ * JSON verisini VLD schema'sına karşı doğrular.
5
+ *
6
+ * Kullanım:
7
+ * vld validate <schema.ts> <data.json>
8
+ * echo '{"name":"John"}' | vld validate <schema.ts>
9
+ */
10
+ import type { Command } from './index.js';
11
+ /**
12
+ * Validate command
13
+ */
14
+ export declare const validateCommand: Command;
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,OA+H7B,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * VLD CLI - Validate Command
3
+ *
4
+ * JSON verisini VLD schema'sına karşı doğrular.
5
+ *
6
+ * Kullanım:
7
+ * vld validate <schema.ts> <data.json>
8
+ * echo '{"name":"John"}' | vld validate <schema.ts>
9
+ */
10
+ import { style, prettifyErrorColored } from '../style.js';
11
+ import { VldError, flattenError } from '../errors.js';
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ /**
15
+ * Validate command
16
+ */
17
+ export const validateCommand = {
18
+ name: 'validate',
19
+ description: 'Validate JSON data against a VLD schema',
20
+ aliases: ['val', 'v'],
21
+ arguments: [
22
+ {
23
+ name: 'schema',
24
+ description: 'Schema file (TypeScript)',
25
+ required: true
26
+ },
27
+ {
28
+ name: 'data',
29
+ description: 'JSON data file (or stdin)',
30
+ required: false
31
+ }
32
+ ],
33
+ options: [
34
+ {
35
+ name: 'strict',
36
+ short: 's',
37
+ description: 'Enable strict mode',
38
+ type: 'boolean',
39
+ default: false
40
+ },
41
+ {
42
+ name: 'format',
43
+ short: 'f',
44
+ description: 'Output format (pretty, json, silent)',
45
+ type: 'string',
46
+ default: 'pretty'
47
+ },
48
+ {
49
+ name: 'export',
50
+ short: 'e',
51
+ description: 'Export name to use from schema file',
52
+ type: 'string',
53
+ default: 'schema'
54
+ }
55
+ ],
56
+ async action(args, opts) {
57
+ const schemaPath = path.resolve(args.schema);
58
+ const dataPath = args.data ? path.resolve(args.data) : null;
59
+ const format = opts.format;
60
+ // Check schema file exists
61
+ if (!fs.existsSync(schemaPath)) {
62
+ throw new Error(`Schema file not found: ${schemaPath}`);
63
+ }
64
+ // Read data
65
+ let dataStr;
66
+ if (dataPath) {
67
+ if (!fs.existsSync(dataPath)) {
68
+ throw new Error(`Data file not found: ${dataPath}`);
69
+ }
70
+ dataStr = fs.readFileSync(dataPath, 'utf-8');
71
+ }
72
+ else {
73
+ // Read from stdin
74
+ dataStr = await readStdin();
75
+ if (!dataStr) {
76
+ throw new Error('No data provided. Specify a data file or pipe JSON via stdin.');
77
+ }
78
+ }
79
+ // Parse JSON
80
+ let data;
81
+ try {
82
+ data = JSON.parse(dataStr);
83
+ }
84
+ catch {
85
+ throw new Error('Invalid JSON data');
86
+ }
87
+ // Import schema
88
+ let schema;
89
+ try {
90
+ const schemaModule = await import(schemaPath);
91
+ const exportName = opts.export;
92
+ schema = schemaModule[exportName] || schemaModule.default;
93
+ if (!schema) {
94
+ throw new Error(`Export "${exportName}" not found in schema file`);
95
+ }
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Failed to load schema: ${error.message}`);
99
+ }
100
+ // Validate
101
+ const result = schema.safeParse(data);
102
+ // Output result
103
+ if (result.success) {
104
+ if (format === 'json') {
105
+ console.log(JSON.stringify({ success: true, data: result.data }, null, 2));
106
+ }
107
+ else if (format !== 'silent') {
108
+ console.log(style.green('✔') + ' Validation successful');
109
+ if (format === 'pretty') {
110
+ console.log('');
111
+ console.log(style.dim('Validated data:'));
112
+ console.log(JSON.stringify(result.data, null, 2));
113
+ }
114
+ }
115
+ process.exit(0);
116
+ }
117
+ else {
118
+ const error = result.error instanceof VldError
119
+ ? result.error
120
+ : VldError.from(result.error);
121
+ if (format === 'json') {
122
+ console.log(JSON.stringify({
123
+ success: false,
124
+ errors: flattenError(error)
125
+ }, null, 2));
126
+ }
127
+ else if (format !== 'silent') {
128
+ console.log(style.red('✖') + ' Validation failed');
129
+ console.log('');
130
+ console.log(prettifyErrorColored(error));
131
+ }
132
+ process.exit(1);
133
+ }
134
+ }
135
+ };
136
+ /**
137
+ * stdin'den okur
138
+ */
139
+ async function readStdin() {
140
+ return new Promise((resolve) => {
141
+ // stdin açık değilse boş döner
142
+ if (process.stdin.isTTY) {
143
+ resolve('');
144
+ return;
145
+ }
146
+ let data = '';
147
+ process.stdin.setEncoding('utf-8');
148
+ process.stdin.on('data', (chunk) => {
149
+ data += chunk;
150
+ });
151
+ process.stdin.on('end', () => {
152
+ resolve(data.trim());
153
+ });
154
+ // 100ms timeout (stdin yoksa)
155
+ setTimeout(() => {
156
+ if (!data) {
157
+ resolve('');
158
+ }
159
+ }, 100);
160
+ });
161
+ }
162
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * VLD CLI - Validate Command\n *\n * JSON verisini VLD schema'sına karşı doğrular.\n *\n * Kullanım:\n * vld validate <schema.ts> <data.json>\n * echo '{\"name\":\"John\"}' | vld validate <schema.ts>\n */\n\nimport type { Command } from './index.js';\nimport { style, prettifyErrorColored } from '../style.js';\nimport { VldError, flattenError } from '../errors.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Validate command\n */\nexport const validateCommand: Command = {\n name: 'validate',\n description: 'Validate JSON data against a VLD schema',\n aliases: ['val', 'v'],\n\n arguments: [\n {\n name: 'schema',\n description: 'Schema file (TypeScript)',\n required: true\n },\n {\n name: 'data',\n description: 'JSON data file (or stdin)',\n required: false\n }\n ],\n\n options: [\n {\n name: 'strict',\n short: 's',\n description: 'Enable strict mode',\n type: 'boolean',\n default: false\n },\n {\n name: 'format',\n short: 'f',\n description: 'Output format (pretty, json, silent)',\n type: 'string',\n default: 'pretty'\n },\n {\n name: 'export',\n short: 'e',\n description: 'Export name to use from schema file',\n type: 'string',\n default: 'schema'\n }\n ],\n\n async action(args, opts) {\n const schemaPath = path.resolve(args.schema);\n const dataPath = args.data ? path.resolve(args.data) : null;\n const format = opts.format as string;\n\n // Check schema file exists\n if (!fs.existsSync(schemaPath)) {\n throw new Error(`Schema file not found: ${schemaPath}`);\n }\n\n // Read data\n let dataStr: string;\n\n if (dataPath) {\n if (!fs.existsSync(dataPath)) {\n throw new Error(`Data file not found: ${dataPath}`);\n }\n dataStr = fs.readFileSync(dataPath, 'utf-8');\n } else {\n // Read from stdin\n dataStr = await readStdin();\n\n if (!dataStr) {\n throw new Error('No data provided. Specify a data file or pipe JSON via stdin.');\n }\n }\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(dataStr);\n } catch {\n throw new Error('Invalid JSON data');\n }\n\n // Import schema\n let schema: any;\n try {\n const schemaModule = await import(schemaPath);\n const exportName = opts.export as string;\n schema = schemaModule[exportName] || schemaModule.default;\n\n if (!schema) {\n throw new Error(`Export \"${exportName}\" not found in schema file`);\n }\n } catch (error) {\n throw new Error(`Failed to load schema: ${(error as Error).message}`);\n }\n\n // Validate\n const result = schema.safeParse(data);\n\n // Output result\n if (result.success) {\n if (format === 'json') {\n console.log(JSON.stringify({ success: true, data: result.data }, null, 2));\n } else if (format !== 'silent') {\n console.log(style.green('✔') + ' Validation successful');\n\n if (format === 'pretty') {\n console.log('');\n console.log(style.dim('Validated data:'));\n console.log(JSON.stringify(result.data, null, 2));\n }\n }\n process.exit(0);\n } else {\n const error = result.error instanceof VldError\n ? result.error\n : VldError.from(result.error);\n\n if (format === 'json') {\n console.log(JSON.stringify({\n success: false,\n errors: flattenError(error)\n }, null, 2));\n } else if (format !== 'silent') {\n console.log(style.red('✖') + ' Validation failed');\n console.log('');\n console.log(prettifyErrorColored(error));\n }\n\n process.exit(1);\n }\n }\n};\n\n/**\n * stdin'den okur\n */\nasync function readStdin(): Promise<string> {\n return new Promise((resolve) => {\n // stdin açık değilse boş döner\n if (process.stdin.isTTY) {\n resolve('');\n return;\n }\n\n let data = '';\n\n process.stdin.setEncoding('utf-8');\n\n process.stdin.on('data', (chunk) => {\n data += chunk;\n });\n\n process.stdin.on('end', () => {\n resolve(data.trim());\n });\n\n // 100ms timeout (stdin yoksa)\n setTimeout(() => {\n if (!data) {\n resolve('');\n }\n }, 100);\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codecs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoB/C;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,cAAc,0BAW1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,0BAWvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,0BAa1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,0BAO1B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAW7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,wBAO9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAO7B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,GAAG,GAAG,EAAE,SAAS,GAAG,wBAiB9C,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,WAAW,qCAavB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,qCAiB3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,0BAaxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,2BAY3B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,aAAa,+CAOzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,+CAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,+CAOtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,+CAO3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,+CAOvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,+CAOvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,+CAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,GAAG,GAAG,EAAE,SAAS,GAAG,wBAiB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,GAAG,0BAuBtC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codecs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoB/C;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,cAAc,0BAW1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,0BAWvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,0BAa1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,0BAO1B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAW7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,wBAO9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBAO7B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,GAAG,GAAG,EAAE,SAAS,GAAG,wBAiB9C,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,WAAW,qCAavB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,qCAiB3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,0BAaxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,2BAY3B,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,aAAa,+CAOzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,+CAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,+CAOtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,+CAO3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,+CAOvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,+CAOvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,+CAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,GAAG,GAAG,EAAE,SAAS,GAAG,wBAsB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,GAAG,0BAqCtC,CAAC"}
@@ -223,8 +223,14 @@ export const base64Json = (schema) => {
223
223
  const outputSchema = schema || VldUnknown.create();
224
224
  return VldCodec.create(VldBase64.create(), outputSchema, {
225
225
  decode: (base64) => {
226
- const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
227
- return JSON.parse(jsonString);
226
+ // BUG-NPM-005 FIX: Add error handling for JSON parsing
227
+ try {
228
+ const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
229
+ return JSON.parse(jsonString);
230
+ }
231
+ catch (error) {
232
+ throw new Error(`Failed to parse base64 JSON: ${error.message}`);
233
+ }
228
234
  },
229
235
  encode: (data) => {
230
236
  const jsonString = JSON.stringify(data);
@@ -239,14 +245,27 @@ export const jwtPayload = (schema) => {
239
245
  const outputSchema = schema || VldUnknown.create();
240
246
  return VldCodec.create(VldString.create().refine(s => s.split('.').length === 3, 'Invalid JWT format'), outputSchema, {
241
247
  decode: (jwt) => {
242
- const [, payloadBase64] = jwt.split('.');
243
- // Convert base64url to base64
244
- const base64 = payloadBase64
245
- .replace(/-/g, '+')
246
- .replace(/_/g, '/')
247
- .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');
248
- const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
249
- return JSON.parse(jsonString);
248
+ // BUG-NPM-004 FIX: Add comprehensive error handling for JWT parsing
249
+ try {
250
+ const parts = jwt.split('.');
251
+ if (parts.length !== 3) {
252
+ throw new Error('JWT must have exactly 3 parts');
253
+ }
254
+ const payloadBase64 = parts[1];
255
+ if (!payloadBase64) {
256
+ throw new Error('JWT payload is empty');
257
+ }
258
+ // Convert base64url to base64
259
+ const base64 = payloadBase64
260
+ .replace(/-/g, '+')
261
+ .replace(/_/g, '/')
262
+ .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');
263
+ const jsonString = uint8ArrayToString(base64ToUint8Array(base64));
264
+ return JSON.parse(jsonString);
265
+ }
266
+ catch (error) {
267
+ throw new Error(`Failed to decode JWT payload: ${error.message}`);
268
+ }
250
269
  },
251
270
  encode: () => {
252
271
  throw new Error('JWT encoding not supported - use a proper JWT library');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldCodec } from '../validators/codec';\nimport { VldBase64 } from '../validators/base64';\nimport { VldHex } from '../validators/hex';\nimport { VldUint8Array } from '../validators/uint8array';\nimport { VldString } from '../validators/string';\nimport { VldNumber } from '../validators/number';\nimport { VldBigInt } from '../validators/bigint';\nimport { VldBoolean } from '../validators/boolean';\nimport { VldDate } from '../validators/date';\nimport { VldUnknown } from '../validators/unknown';\nimport {\n base64ToUint8Array,\n uint8ArrayToBase64,\n uint8ArrayToBase64Url,\n hexToUint8Array,\n uint8ArrayToHex,\n stringToUint8Array,\n uint8ArrayToString\n} from '../utils/codec-utils';\n\n/**\n * Predefined codecs for common transformations (Zod-compatible)\n */\n\n// ===== STRING TO NUMBER CODECS =====\n\n/**\n * String to number codec\n */\nexport const stringToNumber = VldCodec.create(\n VldString.create(),\n VldNumber.create(),\n {\n decode: (str: string) => {\n const num = Number(str);\n if (isNaN(num)) throw new Error('Invalid number');\n return num;\n },\n encode: (num: number) => num.toString()\n }\n);\n\n/**\n * String to integer codec\n */\nexport const stringToInt = VldCodec.create(\n VldString.create(),\n VldNumber.create().int(),\n {\n decode: (str: string) => {\n const num = parseInt(str, 10);\n if (isNaN(num)) throw new Error('Invalid integer');\n return num;\n },\n encode: (num: number) => Math.floor(num).toString()\n }\n);\n\n/**\n * String to BigInt codec\n */\nexport const stringToBigInt = VldCodec.create(\n VldString.create(),\n VldBigInt.create(),\n {\n decode: (str: string) => {\n try {\n return BigInt(str);\n } catch {\n throw new Error('Invalid BigInt');\n }\n },\n encode: (bigint: bigint) => bigint.toString()\n }\n);\n\n/**\n * Number to BigInt codec\n */\nexport const numberToBigInt = VldCodec.create(\n VldNumber.create().int(),\n VldBigInt.create(),\n {\n decode: (num: number) => BigInt(Math.floor(num)),\n encode: (bigint: bigint) => Number(bigint)\n }\n);\n\n// ===== DATE CODECS =====\n\n/**\n * ISO datetime string to Date codec\n */\nexport const isoDatetimeToDate = VldCodec.create(\n VldString.create().regex(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/, 'Invalid ISO datetime format'),\n VldDate.create(),\n {\n decode: (isoString: string) => {\n const date = new Date(isoString);\n if (isNaN(date.getTime())) throw new Error('Invalid date');\n return date;\n },\n encode: (date: Date) => date.toISOString()\n }\n);\n\n/**\n * Epoch seconds to Date codec\n */\nexport const epochSecondsToDate = VldCodec.create(\n VldNumber.create(),\n VldDate.create(),\n {\n decode: (seconds: number) => new Date(seconds * 1000),\n encode: (date: Date) => Math.floor(date.getTime() / 1000)\n }\n);\n\n/**\n * Epoch milliseconds to Date codec\n */\nexport const epochMillisToDate = VldCodec.create(\n VldNumber.create(),\n VldDate.create(),\n {\n decode: (millis: number) => new Date(millis),\n encode: (date: Date) => date.getTime()\n }\n);\n\n// ===== JSON CODEC =====\n\n/**\n * JSON string codec for any type\n */\nexport const jsonCodec = <T = any>(schema?: any) => {\n const outputSchema = schema || VldUnknown.create();\n \n return VldCodec.create(\n VldString.create(),\n outputSchema,\n {\n decode: (jsonString: string) => {\n try {\n return JSON.parse(jsonString);\n } catch {\n throw new Error('Invalid JSON');\n }\n },\n encode: (data: T) => JSON.stringify(data)\n }\n );\n};\n\n// ===== URL CODECS =====\n\n/**\n * String to URL codec\n */\nexport const stringToURL = VldCodec.create(\n VldString.create().url(),\n VldUnknown.create() as any, // URL object\n {\n decode: (urlString: string) => {\n try {\n return new URL(urlString);\n } catch {\n throw new Error('Invalid URL');\n }\n },\n encode: (url: URL) => url.toString()\n }\n);\n\n/**\n * String to HTTP/HTTPS URL codec\n */\nexport const stringToHttpURL = VldCodec.create(\n VldString.create().regex(/^https?:\\/\\//, 'Must be HTTP or HTTPS URL'),\n VldUnknown.create() as any, // URL object\n {\n decode: (urlString: string) => {\n try {\n const url = new URL(urlString);\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new Error('Must be HTTP or HTTPS');\n }\n return url;\n } catch {\n throw new Error('Invalid HTTP URL');\n }\n },\n encode: (url: URL) => url.toString()\n }\n);\n\n/**\n * URI component encode/decode codec\n */\nexport const uriComponent = VldCodec.create(\n VldString.create(),\n VldString.create(),\n {\n decode: (encoded: string) => {\n try {\n return decodeURIComponent(encoded);\n } catch {\n throw new Error('Invalid URI component');\n }\n },\n encode: (decoded: string) => encodeURIComponent(decoded)\n }\n);\n\n/**\n * String to boolean codec\n */\nexport const stringToBoolean = VldCodec.create(\n VldString.create(),\n VldBoolean.create(),\n {\n decode: (str: string) => {\n const lower = str.toLowerCase();\n if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') return true;\n if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') return false;\n throw new Error('Invalid boolean string');\n },\n encode: (bool: boolean) => bool.toString()\n }\n);\n\n// ===== EXISTING BYTE CODECS (updated) =====\n\n/**\n * Base64 to Uint8Array codec\n */\nexport const base64ToBytes = VldCodec.create(\n VldBase64.create(),\n VldUint8Array.create(),\n {\n decode: base64ToUint8Array,\n encode: uint8ArrayToBase64\n }\n);\n\n/**\n * URL-safe Base64 to Uint8Array codec\n */\nexport const base64UrlToBytes = VldCodec.create(\n VldBase64.create().urlSafeMode(),\n VldUint8Array.create(),\n {\n decode: base64ToUint8Array,\n encode: uint8ArrayToBase64Url\n }\n);\n\n/**\n * Hexadecimal to Uint8Array codec\n */\nexport const hexToBytes = VldCodec.create(\n VldHex.create(),\n VldUint8Array.create(),\n {\n decode: hexToUint8Array,\n encode: uint8ArrayToHex\n }\n);\n\n/**\n * Lowercase hexadecimal to Uint8Array codec\n */\nexport const hexLowerToBytes = VldCodec.create(\n VldHex.create().lowercaseMode(),\n VldUint8Array.create(),\n {\n decode: hexToUint8Array,\n encode: (bytes) => uint8ArrayToHex(bytes).toLowerCase()\n }\n);\n\n/**\n * UTF-8 string to Uint8Array codec\n */\nexport const utf8ToBytes = VldCodec.create(\n VldString.create(),\n VldUint8Array.create(),\n {\n decode: stringToUint8Array,\n encode: uint8ArrayToString\n }\n);\n\n/**\n * Uint8Array to UTF-8 string codec (reverse of utf8ToBytes)\n */\nexport const bytesToUtf8 = VldCodec.create(\n VldUint8Array.create(),\n VldString.create(),\n {\n decode: uint8ArrayToString,\n encode: stringToUint8Array\n }\n);\n\n/**\n * Base64URL to Uint8Array codec (updated)\n */\nexport const base64urlToBytes = VldCodec.create(\n VldBase64.create().urlSafeMode(),\n VldUint8Array.create(),\n {\n decode: base64ToUint8Array,\n encode: uint8ArrayToBase64Url\n }\n);\n\n/**\n * Base64 encoded JSON codec (updated)\n */\nexport const base64Json = <T = any>(schema?: any) => {\n const outputSchema = schema || VldUnknown.create();\n \n return VldCodec.create(\n VldBase64.create(),\n outputSchema,\n {\n decode: (base64: string) => {\n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\n return JSON.parse(jsonString);\n },\n encode: (data: T) => {\n const jsonString = JSON.stringify(data);\n return uint8ArrayToBase64(stringToUint8Array(jsonString));\n }\n }\n );\n};\n\n/**\n * JWT payload decoder (base64url encoded JSON) - updated\n */\nexport const jwtPayload = (schema?: any) => {\n const outputSchema = schema || VldUnknown.create();\n \n return VldCodec.create(\n VldString.create().refine(s => s.split('.').length === 3, 'Invalid JWT format'),\n outputSchema,\n {\n decode: (jwt: string) => {\n const [, payloadBase64] = jwt.split('.');\n // Convert base64url to base64\n const base64 = payloadBase64\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');\n \n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\n return JSON.parse(jsonString);\n },\n encode: () => {\n throw new Error('JWT encoding not supported - use a proper JWT library');\n }\n }\n );\n};"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldCodec } from '../validators/codec';\r\nimport { VldBase64 } from '../validators/base64';\r\nimport { VldHex } from '../validators/hex';\r\nimport { VldUint8Array } from '../validators/uint8array';\r\nimport { VldString } from '../validators/string';\r\nimport { VldNumber } from '../validators/number';\r\nimport { VldBigInt } from '../validators/bigint';\r\nimport { VldBoolean } from '../validators/boolean';\r\nimport { VldDate } from '../validators/date';\r\nimport { VldUnknown } from '../validators/unknown';\r\nimport {\r\n base64ToUint8Array,\r\n uint8ArrayToBase64,\r\n uint8ArrayToBase64Url,\r\n hexToUint8Array,\r\n uint8ArrayToHex,\r\n stringToUint8Array,\r\n uint8ArrayToString\r\n} from '../utils/codec-utils';\r\n\r\n/**\r\n * Predefined codecs for common transformations (Zod-compatible)\r\n */\r\n\r\n// ===== STRING TO NUMBER CODECS =====\r\n\r\n/**\r\n * String to number codec\r\n */\r\nexport const stringToNumber = VldCodec.create(\r\n VldString.create(),\r\n VldNumber.create(),\r\n {\r\n decode: (str: string) => {\r\n const num = Number(str);\r\n if (isNaN(num)) throw new Error('Invalid number');\r\n return num;\r\n },\r\n encode: (num: number) => num.toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to integer codec\r\n */\r\nexport const stringToInt = VldCodec.create(\r\n VldString.create(),\r\n VldNumber.create().int(),\r\n {\r\n decode: (str: string) => {\r\n const num = parseInt(str, 10);\r\n if (isNaN(num)) throw new Error('Invalid integer');\r\n return num;\r\n },\r\n encode: (num: number) => Math.floor(num).toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to BigInt codec\r\n */\r\nexport const stringToBigInt = VldCodec.create(\r\n VldString.create(),\r\n VldBigInt.create(),\r\n {\r\n decode: (str: string) => {\r\n try {\r\n return BigInt(str);\r\n } catch {\r\n throw new Error('Invalid BigInt');\r\n }\r\n },\r\n encode: (bigint: bigint) => bigint.toString()\r\n }\r\n);\r\n\r\n/**\r\n * Number to BigInt codec\r\n */\r\nexport const numberToBigInt = VldCodec.create(\r\n VldNumber.create().int(),\r\n VldBigInt.create(),\r\n {\r\n decode: (num: number) => BigInt(Math.floor(num)),\r\n encode: (bigint: bigint) => Number(bigint)\r\n }\r\n);\r\n\r\n// ===== DATE CODECS =====\r\n\r\n/**\r\n * ISO datetime string to Date codec\r\n */\r\nexport const isoDatetimeToDate = VldCodec.create(\r\n VldString.create().regex(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/, 'Invalid ISO datetime format'),\r\n VldDate.create(),\r\n {\r\n decode: (isoString: string) => {\r\n const date = new Date(isoString);\r\n if (isNaN(date.getTime())) throw new Error('Invalid date');\r\n return date;\r\n },\r\n encode: (date: Date) => date.toISOString()\r\n }\r\n);\r\n\r\n/**\r\n * Epoch seconds to Date codec\r\n */\r\nexport const epochSecondsToDate = VldCodec.create(\r\n VldNumber.create(),\r\n VldDate.create(),\r\n {\r\n decode: (seconds: number) => new Date(seconds * 1000),\r\n encode: (date: Date) => Math.floor(date.getTime() / 1000)\r\n }\r\n);\r\n\r\n/**\r\n * Epoch milliseconds to Date codec\r\n */\r\nexport const epochMillisToDate = VldCodec.create(\r\n VldNumber.create(),\r\n VldDate.create(),\r\n {\r\n decode: (millis: number) => new Date(millis),\r\n encode: (date: Date) => date.getTime()\r\n }\r\n);\r\n\r\n// ===== JSON CODEC =====\r\n\r\n/**\r\n * JSON string codec for any type\r\n */\r\nexport const jsonCodec = <T = any>(schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldString.create(),\r\n outputSchema,\r\n {\r\n decode: (jsonString: string) => {\r\n try {\r\n return JSON.parse(jsonString);\r\n } catch {\r\n throw new Error('Invalid JSON');\r\n }\r\n },\r\n encode: (data: T) => JSON.stringify(data)\r\n }\r\n );\r\n};\r\n\r\n// ===== URL CODECS =====\r\n\r\n/**\r\n * String to URL codec\r\n */\r\nexport const stringToURL = VldCodec.create(\r\n VldString.create().url(),\r\n VldUnknown.create() as any, // URL object\r\n {\r\n decode: (urlString: string) => {\r\n try {\r\n return new URL(urlString);\r\n } catch {\r\n throw new Error('Invalid URL');\r\n }\r\n },\r\n encode: (url: URL) => url.toString()\r\n }\r\n);\r\n\r\n/**\r\n * String to HTTP/HTTPS URL codec\r\n */\r\nexport const stringToHttpURL = VldCodec.create(\r\n VldString.create().regex(/^https?:\\/\\//, 'Must be HTTP or HTTPS URL'),\r\n VldUnknown.create() as any, // URL object\r\n {\r\n decode: (urlString: string) => {\r\n try {\r\n const url = new URL(urlString);\r\n if (!['http:', 'https:'].includes(url.protocol)) {\r\n throw new Error('Must be HTTP or HTTPS');\r\n }\r\n return url;\r\n } catch {\r\n throw new Error('Invalid HTTP URL');\r\n }\r\n },\r\n encode: (url: URL) => url.toString()\r\n }\r\n);\r\n\r\n/**\r\n * URI component encode/decode codec\r\n */\r\nexport const uriComponent = VldCodec.create(\r\n VldString.create(),\r\n VldString.create(),\r\n {\r\n decode: (encoded: string) => {\r\n try {\r\n return decodeURIComponent(encoded);\r\n } catch {\r\n throw new Error('Invalid URI component');\r\n }\r\n },\r\n encode: (decoded: string) => encodeURIComponent(decoded)\r\n }\r\n);\r\n\r\n/**\r\n * String to boolean codec\r\n */\r\nexport const stringToBoolean = VldCodec.create(\r\n VldString.create(),\r\n VldBoolean.create(),\r\n {\r\n decode: (str: string) => {\r\n const lower = str.toLowerCase();\r\n if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') return true;\r\n if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') return false;\r\n throw new Error('Invalid boolean string');\r\n },\r\n encode: (bool: boolean) => bool.toString()\r\n }\r\n);\r\n\r\n// ===== EXISTING BYTE CODECS (updated) =====\r\n\r\n/**\r\n * Base64 to Uint8Array codec\r\n */\r\nexport const base64ToBytes = VldCodec.create(\r\n VldBase64.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64\r\n }\r\n);\r\n\r\n/**\r\n * URL-safe Base64 to Uint8Array codec\r\n */\r\nexport const base64UrlToBytes = VldCodec.create(\r\n VldBase64.create().urlSafeMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64Url\r\n }\r\n);\r\n\r\n/**\r\n * Hexadecimal to Uint8Array codec\r\n */\r\nexport const hexToBytes = VldCodec.create(\r\n VldHex.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: hexToUint8Array,\r\n encode: uint8ArrayToHex\r\n }\r\n);\r\n\r\n/**\r\n * Lowercase hexadecimal to Uint8Array codec\r\n */\r\nexport const hexLowerToBytes = VldCodec.create(\r\n VldHex.create().lowercaseMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: hexToUint8Array,\r\n encode: (bytes) => uint8ArrayToHex(bytes).toLowerCase()\r\n }\r\n);\r\n\r\n/**\r\n * UTF-8 string to Uint8Array codec\r\n */\r\nexport const utf8ToBytes = VldCodec.create(\r\n VldString.create(),\r\n VldUint8Array.create(),\r\n {\r\n decode: stringToUint8Array,\r\n encode: uint8ArrayToString\r\n }\r\n);\r\n\r\n/**\r\n * Uint8Array to UTF-8 string codec (reverse of utf8ToBytes)\r\n */\r\nexport const bytesToUtf8 = VldCodec.create(\r\n VldUint8Array.create(),\r\n VldString.create(),\r\n {\r\n decode: uint8ArrayToString,\r\n encode: stringToUint8Array\r\n }\r\n);\r\n\r\n/**\r\n * Base64URL to Uint8Array codec (updated)\r\n */\r\nexport const base64urlToBytes = VldCodec.create(\r\n VldBase64.create().urlSafeMode(),\r\n VldUint8Array.create(),\r\n {\r\n decode: base64ToUint8Array,\r\n encode: uint8ArrayToBase64Url\r\n }\r\n);\r\n\r\n/**\r\n * Base64 encoded JSON codec (updated)\r\n */\r\nexport const base64Json = <T = any>(schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldBase64.create(),\r\n outputSchema,\r\n {\r\n decode: (base64: string) => {\r\n // BUG-NPM-005 FIX: Add error handling for JSON parsing\r\n try {\r\n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\r\n return JSON.parse(jsonString);\r\n } catch (error) {\r\n throw new Error(`Failed to parse base64 JSON: ${(error as Error).message}`);\r\n }\r\n },\r\n encode: (data: T) => {\r\n const jsonString = JSON.stringify(data);\r\n return uint8ArrayToBase64(stringToUint8Array(jsonString));\r\n }\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * JWT payload decoder (base64url encoded JSON) - updated\r\n */\r\nexport const jwtPayload = (schema?: any) => {\r\n const outputSchema = schema || VldUnknown.create();\r\n \r\n return VldCodec.create(\r\n VldString.create().refine(s => s.split('.').length === 3, 'Invalid JWT format'),\r\n outputSchema,\r\n {\r\n decode: (jwt: string) => {\r\n // BUG-NPM-004 FIX: Add comprehensive error handling for JWT parsing\r\n try {\r\n const parts = jwt.split('.');\r\n if (parts.length !== 3) {\r\n throw new Error('JWT must have exactly 3 parts');\r\n }\r\n\r\n const payloadBase64 = parts[1];\r\n if (!payloadBase64) {\r\n throw new Error('JWT payload is empty');\r\n }\r\n\r\n // Convert base64url to base64\r\n const base64 = payloadBase64\r\n .replace(/-/g, '+')\r\n .replace(/_/g, '/')\r\n .padEnd(payloadBase64.length + (4 - payloadBase64.length % 4) % 4, '=');\r\n\r\n const jsonString = uint8ArrayToString(base64ToUint8Array(base64));\r\n return JSON.parse(jsonString);\r\n } catch (error) {\r\n throw new Error(`Failed to decode JWT payload: ${(error as Error).message}`);\r\n }\r\n },\r\n encode: () => {\r\n throw new Error('JWT encoding not supported - use a proper JWT library');\r\n }\r\n }\r\n );\r\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/coercion/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,gBAAgB;IAIjC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAyC9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAOhD"}
1
+ {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/coercion/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,gBAAgB;IAIjC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAkC9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAOhD"}
@@ -14,43 +14,35 @@ export class VldCoerceBoolean extends VldBoolean {
14
14
  * Parse and coerce a value to boolean
15
15
  */
16
16
  parse(value) {
17
- try {
18
- // Handle string values
19
- if (typeof value === 'string') {
20
- const lower = value.toLowerCase().trim();
21
- if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') {
22
- return true;
23
- }
24
- if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') {
25
- return false;
26
- }
27
- throw new Error(getMessages().coercionFailed('boolean', value));
28
- }
29
- // Handle number values
30
- if (typeof value === 'number') {
31
- if (value === 1)
32
- return true;
33
- if (value === 0)
34
- return false;
35
- throw new Error(getMessages().coercionFailed('boolean', value));
17
+ // Handle string values
18
+ if (typeof value === 'string') {
19
+ const lower = value.toLowerCase().trim();
20
+ if (lower === 'true' || lower === '1' || lower === 'yes' || lower === 'on') {
21
+ return true;
36
22
  }
37
- // Handle null and undefined
38
- if (value === null || value === undefined) {
39
- throw new Error(getMessages().coercionFailed('boolean', value));
23
+ if (lower === 'false' || lower === '0' || lower === 'no' || lower === 'off') {
24
+ return false;
40
25
  }
41
- // Handle actual boolean values
42
- if (typeof value === 'boolean') {
43
- return super.parse(value);
44
- }
45
- // Reject all other unsupported types (objects, arrays, etc.)
46
26
  throw new Error(getMessages().coercionFailed('boolean', value));
47
27
  }
48
- catch (error) {
49
- if (error.message.includes('coercionFailed')) {
50
- throw error;
51
- }
28
+ // Handle number values
29
+ if (typeof value === 'number') {
30
+ if (value === 1)
31
+ return true;
32
+ if (value === 0)
33
+ return false;
34
+ throw new Error(getMessages().coercionFailed('boolean', value));
35
+ }
36
+ // Handle null and undefined
37
+ if (value === null || value === undefined) {
52
38
  throw new Error(getMessages().coercionFailed('boolean', value));
53
39
  }
40
+ // Handle actual boolean values
41
+ if (typeof value === 'boolean') {
42
+ return value;
43
+ }
44
+ // Reject all other unsupported types (objects, arrays, etc.)
45
+ throw new Error(getMessages().coercionFailed('boolean', value));
54
46
  }
55
47
  /**
56
48
  * Safely parse and coerce a value to boolean