schema-dsl 1.2.4 → 2.0.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 (242) hide show
  1. package/CHANGELOG.md +87 -210
  2. package/README.md +391 -2249
  3. package/dist/DslBuilder-DQDN0ZxZ.d.cts +341 -0
  4. package/dist/DslBuilder-DkLaOo9Q.d.ts +341 -0
  5. package/dist/Validator-C7GsVQOH.d.cts +192 -0
  6. package/dist/Validator-hFWKGxir.d.ts +192 -0
  7. package/dist/index.cjs +6594 -0
  8. package/dist/index.d.cts +1145 -0
  9. package/dist/index.d.ts +1145 -0
  10. package/dist/index.js +6528 -0
  11. package/dist/plugin-CIKtTMtS.d.cts +246 -0
  12. package/dist/plugin-CIKtTMtS.d.ts +246 -0
  13. package/dist/plugins/custom-format.cjs +3802 -0
  14. package/dist/plugins/custom-format.d.cts +12 -0
  15. package/dist/plugins/custom-format.d.ts +12 -0
  16. package/dist/plugins/custom-format.js +3772 -0
  17. package/dist/plugins/custom-type-example.cjs +3795 -0
  18. package/dist/plugins/custom-type-example.d.cts +8 -0
  19. package/dist/plugins/custom-type-example.d.ts +8 -0
  20. package/dist/plugins/custom-type-example.js +3765 -0
  21. package/dist/plugins/custom-validator.cjs +146 -0
  22. package/dist/plugins/custom-validator.d.cts +10 -0
  23. package/dist/plugins/custom-validator.d.ts +10 -0
  24. package/dist/plugins/custom-validator.js +121 -0
  25. package/docs/FEATURE-INDEX.md +102 -68
  26. package/docs/add-custom-locale.md +48 -35
  27. package/docs/add-keyword.md +24 -0
  28. package/docs/api-reference.md +396 -154
  29. package/docs/api.md +13 -0
  30. package/docs/best-practices-project-structure.md +19 -10
  31. package/docs/best-practices.md +93 -53
  32. package/docs/cache-manager.md +23 -15
  33. package/docs/compile.md +45 -0
  34. package/docs/conditional-api.md +40 -11
  35. package/docs/custom-extensions-guide.md +80 -152
  36. package/docs/design-philosophy.md +76 -71
  37. package/docs/doc-index.md +324 -0
  38. package/docs/dsl-syntax.md +69 -19
  39. package/docs/dynamic-locale.md +24 -14
  40. package/docs/enum.md +12 -5
  41. package/docs/error-handling.md +53 -44
  42. package/docs/export-guide.md +47 -8
  43. package/docs/export-limitations.md +27 -11
  44. package/docs/faq.md +86 -67
  45. package/docs/frontend-i18n-guide.md +26 -12
  46. package/docs/i18n-user-guide.md +60 -47
  47. package/docs/i18n.md +51 -32
  48. package/docs/index.md +48 -0
  49. package/docs/json-schema-basics.md +40 -0
  50. package/docs/label-vs-description.md +12 -3
  51. package/docs/markdown-exporter.md +15 -6
  52. package/docs/mongodb-exporter.md +11 -4
  53. package/docs/multi-language.md +26 -0
  54. package/docs/multi-type-support.md +26 -33
  55. package/docs/mysql-exporter.md +9 -2
  56. package/docs/number-operators.md +12 -5
  57. package/docs/optional-marker-guide.md +28 -23
  58. package/docs/performance-guide.md +49 -0
  59. package/docs/plugin-system.md +205 -366
  60. package/docs/plugin-type-registration.md +34 -0
  61. package/docs/postgresql-exporter.md +9 -2
  62. package/docs/public/favicon.svg +5 -0
  63. package/docs/quick-start.md +37 -363
  64. package/docs/runtime-locale-support.md +20 -9
  65. package/docs/schema-helper.md +10 -5
  66. package/docs/schema-utils-advanced-issues.md +23 -0
  67. package/docs/schema-utils-best-practices.md +20 -0
  68. package/docs/schema-utils-chaining.md +7 -0
  69. package/docs/schema-utils.md +76 -42
  70. package/docs/security-checklist.md +20 -0
  71. package/docs/string-extensions.md +17 -9
  72. package/docs/troubleshooting.md +36 -21
  73. package/docs/type-converter.md +41 -50
  74. package/docs/type-reference.md +38 -15
  75. package/docs/typescript-guide.md +53 -42
  76. package/docs/union-type-guide.md +11 -1
  77. package/docs/union-types.md +10 -3
  78. package/docs/validate-async.md +36 -25
  79. package/docs/validate-batch.md +49 -0
  80. package/docs/validate-dsl-object-support.md +33 -28
  81. package/docs/validate.md +36 -16
  82. package/docs/validation-guide.md +25 -7
  83. package/docs/validator.md +39 -0
  84. package/package.json +85 -27
  85. package/plugins/custom-format.cjs +8 -0
  86. package/plugins/custom-type-example.cjs +8 -0
  87. package/plugins/custom-validator.cjs +8 -0
  88. package/src/adapters/DslAdapter.ts +111 -0
  89. package/src/adapters/index.ts +1 -0
  90. package/src/config/constants.ts +83 -0
  91. package/src/config/index.ts +2 -0
  92. package/src/config/patterns.ts +77 -0
  93. package/src/core/CacheManager.ts +159 -0
  94. package/src/core/ConditionalBuilder.ts +382 -0
  95. package/src/core/ConditionalRuntime.ts +28 -0
  96. package/src/core/ConditionalValidator.ts +255 -0
  97. package/src/core/DslBuilder.ts +677 -0
  98. package/src/core/ErrorCodes.ts +38 -0
  99. package/src/core/ErrorFormatter.ts +271 -0
  100. package/src/core/JSONSchemaCore.ts +65 -0
  101. package/src/core/Locale.ts +187 -0
  102. package/src/core/MessageTemplate.ts +42 -0
  103. package/src/core/ObjectDslBuilder.ts +64 -0
  104. package/src/core/PluginManager.ts +326 -0
  105. package/src/core/StringExtensions.ts +140 -0
  106. package/src/core/TemplateEngine.ts +44 -0
  107. package/src/core/Validator.ts +448 -0
  108. package/src/errors/I18nError.ts +159 -0
  109. package/src/errors/ValidationError.ts +105 -0
  110. package/src/exporters/BaseExporter.ts +60 -0
  111. package/src/exporters/MarkdownExporter.ts +305 -0
  112. package/src/exporters/MongoDBExporter.ts +126 -0
  113. package/src/exporters/MySQLExporter.ts +155 -0
  114. package/src/exporters/PostgreSQLExporter.ts +222 -0
  115. package/src/exporters/index.ts +18 -0
  116. package/src/index.ts +633 -0
  117. package/{lib/locales/en-US.js → src/locales/en-US.ts} +21 -37
  118. package/{lib/locales/es-ES.js → src/locales/es-ES.ts} +63 -16
  119. package/{lib/locales/fr-FR.js → src/locales/fr-FR.ts} +74 -27
  120. package/src/locales/index.ts +103 -0
  121. package/{lib/locales/ja-JP.js → src/locales/ja-JP.ts} +59 -17
  122. package/src/locales/types.ts +156 -0
  123. package/{lib/locales/zh-CN.js → src/locales/zh-CN.ts} +21 -38
  124. package/src/parser/ConstraintParser.ts +101 -0
  125. package/src/parser/DslParser.ts +470 -0
  126. package/src/parser/SchemaCompiler.ts +66 -0
  127. package/src/parser/TypeRegistry.ts +250 -0
  128. package/src/parser/index.ts +6 -0
  129. package/src/plugins/custom-format.ts +126 -0
  130. package/src/plugins/custom-type-example.ts +108 -0
  131. package/src/plugins/custom-validator.ts +140 -0
  132. package/src/types/conditional.ts +28 -0
  133. package/src/types/config.ts +59 -0
  134. package/src/types/dsl.ts +131 -0
  135. package/src/types/error.ts +60 -0
  136. package/src/types/index.ts +17 -0
  137. package/src/types/infer.ts +128 -0
  138. package/src/types/plugin.ts +58 -0
  139. package/src/types/safe-regex.d.ts +9 -0
  140. package/src/types/schema.ts +66 -0
  141. package/src/types/validate.ts +71 -0
  142. package/src/utils/SchemaHelper.ts +196 -0
  143. package/src/utils/SchemaUtils.ts +346 -0
  144. package/src/utils/TypeConverter.ts +215 -0
  145. package/src/utils/index.ts +10 -0
  146. package/src/validators/CustomKeywords.ts +477 -0
  147. package/.eslintignore +0 -11
  148. package/.eslintrc.json +0 -27
  149. package/CONTRIBUTING.md +0 -368
  150. package/STATUS.md +0 -491
  151. package/changelogs/v1.0.0.md +0 -328
  152. package/changelogs/v1.0.9.md +0 -367
  153. package/changelogs/v1.1.0.md +0 -389
  154. package/changelogs/v1.1.1.md +0 -308
  155. package/changelogs/v1.1.2.md +0 -183
  156. package/changelogs/v1.1.3.md +0 -161
  157. package/changelogs/v1.1.4.md +0 -432
  158. package/changelogs/v1.1.5.md +0 -493
  159. package/changelogs/v1.1.6.md +0 -211
  160. package/changelogs/v1.1.8.md +0 -376
  161. package/changelogs/v1.2.3.md +0 -124
  162. package/docs/INDEX.md +0 -252
  163. package/docs/issues-resolved-summary.md +0 -196
  164. package/docs/performance-benchmark-report.md +0 -179
  165. package/docs/performance-quick-reference.md +0 -123
  166. package/docs/user-questions-answered.md +0 -353
  167. package/docs/validation-rules-v1.0.2.md +0 -1608
  168. package/examples/README.md +0 -81
  169. package/examples/array-dsl-example.js +0 -227
  170. package/examples/conditional-example.js +0 -288
  171. package/examples/conditional-non-object.js +0 -129
  172. package/examples/conditional-validate-example.js +0 -321
  173. package/examples/custom-extension.js +0 -85
  174. package/examples/dsl-match-example.js +0 -74
  175. package/examples/dsl-style.js +0 -118
  176. package/examples/dynamic-locale-configuration.js +0 -348
  177. package/examples/dynamic-locale-example.js +0 -287
  178. package/examples/enum.examples.js +0 -324
  179. package/examples/export-demo.js +0 -130
  180. package/examples/express-integration.js +0 -376
  181. package/examples/i18n-error-handling-complete.js +0 -381
  182. package/examples/i18n-error-handling-quickstart.md +0 -0
  183. package/examples/i18n-error.examples.js +0 -181
  184. package/examples/i18n-full-demo.js +0 -301
  185. package/examples/i18n-memory-safety.examples.js +0 -268
  186. package/examples/markdown-export.js +0 -71
  187. package/examples/middleware-usage.js +0 -93
  188. package/examples/new-features-comparison.js +0 -315
  189. package/examples/password-reset/README.md +0 -153
  190. package/examples/password-reset/schema.js +0 -26
  191. package/examples/password-reset/test.js +0 -101
  192. package/examples/plugin-system.examples.js +0 -205
  193. package/examples/schema-utils-chaining.examples.js +0 -250
  194. package/examples/simple-example.js +0 -122
  195. package/examples/slug.examples.js +0 -179
  196. package/examples/string-extensions.js +0 -297
  197. package/examples/union-type-example.js +0 -127
  198. package/examples/union-types-example.js +0 -77
  199. package/examples/user-registration/README.md +0 -156
  200. package/examples/user-registration/routes.js +0 -92
  201. package/examples/user-registration/schema.js +0 -150
  202. package/examples/user-registration/server.js +0 -74
  203. package/index.d.ts +0 -3540
  204. package/index.js +0 -457
  205. package/index.mjs +0 -60
  206. package/lib/adapters/DslAdapter.js +0 -871
  207. package/lib/adapters/index.js +0 -20
  208. package/lib/config/constants.js +0 -286
  209. package/lib/config/patterns/common.js +0 -47
  210. package/lib/config/patterns/creditCard.js +0 -9
  211. package/lib/config/patterns/idCard.js +0 -9
  212. package/lib/config/patterns/index.js +0 -9
  213. package/lib/config/patterns/licensePlate.js +0 -4
  214. package/lib/config/patterns/passport.js +0 -4
  215. package/lib/config/patterns/phone.js +0 -9
  216. package/lib/config/patterns/postalCode.js +0 -5
  217. package/lib/core/CacheManager.js +0 -376
  218. package/lib/core/ConditionalBuilder.js +0 -503
  219. package/lib/core/DslBuilder.js +0 -1400
  220. package/lib/core/ErrorCodes.js +0 -233
  221. package/lib/core/ErrorFormatter.js +0 -445
  222. package/lib/core/JSONSchemaCore.js +0 -347
  223. package/lib/core/Locale.js +0 -130
  224. package/lib/core/MessageTemplate.js +0 -98
  225. package/lib/core/PluginManager.js +0 -448
  226. package/lib/core/StringExtensions.js +0 -240
  227. package/lib/core/Validator.js +0 -654
  228. package/lib/errors/I18nError.js +0 -328
  229. package/lib/errors/ValidationError.js +0 -191
  230. package/lib/exporters/MarkdownExporter.js +0 -420
  231. package/lib/exporters/MongoDBExporter.js +0 -162
  232. package/lib/exporters/MySQLExporter.js +0 -212
  233. package/lib/exporters/PostgreSQLExporter.js +0 -289
  234. package/lib/exporters/index.js +0 -24
  235. package/lib/locales/index.js +0 -8
  236. package/lib/utils/LRUCache.js +0 -174
  237. package/lib/utils/SchemaHelper.js +0 -240
  238. package/lib/utils/SchemaUtils.js +0 -445
  239. package/lib/utils/TypeConverter.js +0 -245
  240. package/lib/utils/index.js +0 -13
  241. package/lib/validators/CustomKeywords.js +0 -616
  242. package/lib/validators/index.js +0 -11
@@ -0,0 +1,192 @@
1
+ import { ValidateFunction, KeywordDefinition, Format, Ajv } from 'ajv';
2
+ import { J as JSONSchema, c as ValidateOptions, V as ValidationResult } from './plugin-CIKtTMtS.cjs';
3
+
4
+ type CacheValue = unknown;
5
+ interface CacheStats {
6
+ hits: number;
7
+ misses: number;
8
+ sets: number;
9
+ deletes: number;
10
+ evictions: number;
11
+ clears: number;
12
+ hitRate: string;
13
+ size: number;
14
+ maxSize: number;
15
+ enabled: boolean;
16
+ }
17
+ /**
18
+ * CacheManager — LRU cache for compiled AJV schemas.
19
+ *
20
+ * v2 delegates to cache-hub's MemoryCache (fix BD-04: miss returns undefined → normalized to null).
21
+ *
22
+ * cache-hub MemoryCache actual API:
23
+ * get(key) → value | undefined
24
+ * set(key, value, opts?) — opts.ttl in ms
25
+ * del(key) → boolean ← note: del, not delete
26
+ * has(key) → boolean
27
+ * clear() → void
28
+ * keys() → string[]
29
+ * getStats() → { hits, misses, hitRate, entries, sets, deletes, evictions, memoryUsage }
30
+ */
31
+ declare class CacheManager {
32
+ private _enabled;
33
+ private _maxSize;
34
+ private _ttl;
35
+ private readonly _cache;
36
+ private _statsEnabled;
37
+ private _clears;
38
+ constructor(options?: {
39
+ maxSize?: number;
40
+ ttl?: number;
41
+ enabled?: boolean;
42
+ statsEnabled?: boolean;
43
+ });
44
+ get options(): {
45
+ maxSize: number;
46
+ ttl: number;
47
+ enabled: boolean;
48
+ statsEnabled: boolean;
49
+ };
50
+ set options(opts: Partial<{
51
+ maxSize: number;
52
+ ttl: number;
53
+ enabled: boolean;
54
+ statsEnabled: boolean;
55
+ }>);
56
+ /**
57
+ * Retrieve a cached AJV compile function.
58
+ * @returns cached compile function, or null on miss (BD-04: undefined → null)
59
+ */
60
+ get(key: string): CacheValue | null;
61
+ /**
62
+ * Write a value to the cache.
63
+ */
64
+ set(key: string, value: CacheValue, ttl?: number): void;
65
+ /**
66
+ * Delete a single cache entry.
67
+ */
68
+ delete(key: string): boolean;
69
+ /**
70
+ * Check whether a key exists in the cache.
71
+ */
72
+ has(key: string): boolean;
73
+ /**
74
+ * Clear all cache entries.
75
+ */
76
+ clear(): void;
77
+ /**
78
+ * Return the current number of cache entries.
79
+ */
80
+ size(): number;
81
+ /**
82
+ * Return cache statistics.
83
+ */
84
+ getStats(): CacheStats;
85
+ /**
86
+ * Reset all hit/miss/eviction counters.
87
+ */
88
+ resetStats(): void;
89
+ }
90
+
91
+ type AjvValidateFn = ValidateFunction;
92
+ type KeywordDefinitionInput = KeywordDefinition | ({
93
+ keyword?: string;
94
+ [key: string]: unknown;
95
+ });
96
+ /**
97
+ * ValidatorOptions — constructor options for Validator (extends AJV base options).
98
+ */
99
+ interface ValidatorOptions {
100
+ allErrors?: boolean;
101
+ useDefaults?: boolean;
102
+ coerceTypes?: boolean | 'array';
103
+ removeAdditional?: boolean | 'all' | 'failing';
104
+ verbose?: boolean;
105
+ cache?: boolean | {
106
+ maxSize?: number;
107
+ ttl?: number;
108
+ enabled?: boolean;
109
+ statsEnabled?: boolean;
110
+ };
111
+ [key: string]: unknown;
112
+ }
113
+ /**
114
+ * Validator — AJV-backed validator (v2).
115
+ *
116
+ * Fixes:
117
+ * V-Y01: filter non-AJV options before new Ajv() to prevent unknown-option warnings
118
+ * V-02: sync cleanSchema.required when conditional fields are removed (v1 missed this)
119
+ * V-Y03: _removeAdditional mode reuses cached internal Ajv instance (v1 created new Validator each time)
120
+ * V-Y07: static quickValidate reuses a singleton Ajv (v1 created new Ajv each time)
121
+ */
122
+ declare class Validator {
123
+ private readonly _ajvOptions;
124
+ private readonly _ajv;
125
+ private readonly _cache;
126
+ private readonly _errorFormatter;
127
+ private readonly _schemaMap;
128
+ private _schemaKeyCounter;
129
+ private readonly _conditionalFlagCache;
130
+ private readonly _conditionalValidator;
131
+ private _removeAdditionalAjv;
132
+ private static _quickValidateAjv;
133
+ constructor(options?: ValidatorOptions);
134
+ get ajvOptions(): Record<string, unknown>;
135
+ /**
136
+ * Compile a schema → AJV validate function (with cache).
137
+ */
138
+ compile(schema: JSONSchema, cacheKey?: string | null): AjvValidateFn;
139
+ /**
140
+ * Synchronous validation.
141
+ */
142
+ validate<T = unknown>(schema: JSONSchema | AjvValidateFn, data: T, options?: ValidateOptions): ValidationResult<T>;
143
+ /**
144
+ * Async validation (throws ValidationError on failure).
145
+ * V-Y02 fix: v1 validateAsync lacked smartCoerceTypes; v2 routes through _validateInternal uniformly.
146
+ * BC-6 fix: validateAsync runs async custom validators (sync AJV pass skips async fn; this method runs the full set).
147
+ */
148
+ validateAsync<T = unknown>(schema: JSONSchema | AjvValidateFn, data: T, options?: ValidateOptions): Promise<T>;
149
+ /**
150
+ * BC-6: run all validators in schema._customValidators (including async).
151
+ * AJV's sync keyword skips Promise-returning validators; this method runs the complete set in validateAsync.
152
+ * Returns the first failing ValidationErrorItem, or null if all pass.
153
+ */
154
+ private _runCustomValidators;
155
+ /**
156
+ * Batch validation (compile once, reuse for each item).
157
+ */
158
+ validateBatch<T = unknown>(schema: JSONSchema, dataArray: T[]): ValidationResult<T>[];
159
+ /**
160
+ * Add a custom keyword.
161
+ */
162
+ addKeyword(keyword: string, definition: KeywordDefinitionInput): this;
163
+ /**
164
+ * Add a custom format.
165
+ */
166
+ addFormat(name: string, validator: Format): this;
167
+ /**
168
+ * Add a schema reference.
169
+ */
170
+ addSchema(uri: string, schema: JSONSchema): this;
171
+ /**
172
+ * Remove a schema reference.
173
+ */
174
+ removeSchema(uri: string): this;
175
+ getAjv(): InstanceType<typeof Ajv>;
176
+ get cache(): CacheManager;
177
+ clearCache(): void;
178
+ getCacheStats(): CacheStats;
179
+ static create(options?: ValidatorOptions): Validator;
180
+ /**
181
+ * Quick validate (V-Y07 fix: reuses singleton Ajv instead of creating new Ajv each time).
182
+ */
183
+ static quickValidate(schema: JSONSchema, data: unknown): boolean;
184
+ private _validateInternal;
185
+ private _generateCacheKey;
186
+ private readonly _flatLocaleCache;
187
+ private _getFlatLocaleMessages;
188
+ private _formatErrors;
189
+ private _internalError;
190
+ }
191
+
192
+ export { CacheManager as C, Validator as V };
@@ -0,0 +1,192 @@
1
+ import { ValidateFunction, KeywordDefinition, Format, Ajv } from 'ajv';
2
+ import { J as JSONSchema, c as ValidateOptions, V as ValidationResult } from './plugin-CIKtTMtS.js';
3
+
4
+ type CacheValue = unknown;
5
+ interface CacheStats {
6
+ hits: number;
7
+ misses: number;
8
+ sets: number;
9
+ deletes: number;
10
+ evictions: number;
11
+ clears: number;
12
+ hitRate: string;
13
+ size: number;
14
+ maxSize: number;
15
+ enabled: boolean;
16
+ }
17
+ /**
18
+ * CacheManager — LRU cache for compiled AJV schemas.
19
+ *
20
+ * v2 delegates to cache-hub's MemoryCache (fix BD-04: miss returns undefined → normalized to null).
21
+ *
22
+ * cache-hub MemoryCache actual API:
23
+ * get(key) → value | undefined
24
+ * set(key, value, opts?) — opts.ttl in ms
25
+ * del(key) → boolean ← note: del, not delete
26
+ * has(key) → boolean
27
+ * clear() → void
28
+ * keys() → string[]
29
+ * getStats() → { hits, misses, hitRate, entries, sets, deletes, evictions, memoryUsage }
30
+ */
31
+ declare class CacheManager {
32
+ private _enabled;
33
+ private _maxSize;
34
+ private _ttl;
35
+ private readonly _cache;
36
+ private _statsEnabled;
37
+ private _clears;
38
+ constructor(options?: {
39
+ maxSize?: number;
40
+ ttl?: number;
41
+ enabled?: boolean;
42
+ statsEnabled?: boolean;
43
+ });
44
+ get options(): {
45
+ maxSize: number;
46
+ ttl: number;
47
+ enabled: boolean;
48
+ statsEnabled: boolean;
49
+ };
50
+ set options(opts: Partial<{
51
+ maxSize: number;
52
+ ttl: number;
53
+ enabled: boolean;
54
+ statsEnabled: boolean;
55
+ }>);
56
+ /**
57
+ * Retrieve a cached AJV compile function.
58
+ * @returns cached compile function, or null on miss (BD-04: undefined → null)
59
+ */
60
+ get(key: string): CacheValue | null;
61
+ /**
62
+ * Write a value to the cache.
63
+ */
64
+ set(key: string, value: CacheValue, ttl?: number): void;
65
+ /**
66
+ * Delete a single cache entry.
67
+ */
68
+ delete(key: string): boolean;
69
+ /**
70
+ * Check whether a key exists in the cache.
71
+ */
72
+ has(key: string): boolean;
73
+ /**
74
+ * Clear all cache entries.
75
+ */
76
+ clear(): void;
77
+ /**
78
+ * Return the current number of cache entries.
79
+ */
80
+ size(): number;
81
+ /**
82
+ * Return cache statistics.
83
+ */
84
+ getStats(): CacheStats;
85
+ /**
86
+ * Reset all hit/miss/eviction counters.
87
+ */
88
+ resetStats(): void;
89
+ }
90
+
91
+ type AjvValidateFn = ValidateFunction;
92
+ type KeywordDefinitionInput = KeywordDefinition | ({
93
+ keyword?: string;
94
+ [key: string]: unknown;
95
+ });
96
+ /**
97
+ * ValidatorOptions — constructor options for Validator (extends AJV base options).
98
+ */
99
+ interface ValidatorOptions {
100
+ allErrors?: boolean;
101
+ useDefaults?: boolean;
102
+ coerceTypes?: boolean | 'array';
103
+ removeAdditional?: boolean | 'all' | 'failing';
104
+ verbose?: boolean;
105
+ cache?: boolean | {
106
+ maxSize?: number;
107
+ ttl?: number;
108
+ enabled?: boolean;
109
+ statsEnabled?: boolean;
110
+ };
111
+ [key: string]: unknown;
112
+ }
113
+ /**
114
+ * Validator — AJV-backed validator (v2).
115
+ *
116
+ * Fixes:
117
+ * V-Y01: filter non-AJV options before new Ajv() to prevent unknown-option warnings
118
+ * V-02: sync cleanSchema.required when conditional fields are removed (v1 missed this)
119
+ * V-Y03: _removeAdditional mode reuses cached internal Ajv instance (v1 created new Validator each time)
120
+ * V-Y07: static quickValidate reuses a singleton Ajv (v1 created new Ajv each time)
121
+ */
122
+ declare class Validator {
123
+ private readonly _ajvOptions;
124
+ private readonly _ajv;
125
+ private readonly _cache;
126
+ private readonly _errorFormatter;
127
+ private readonly _schemaMap;
128
+ private _schemaKeyCounter;
129
+ private readonly _conditionalFlagCache;
130
+ private readonly _conditionalValidator;
131
+ private _removeAdditionalAjv;
132
+ private static _quickValidateAjv;
133
+ constructor(options?: ValidatorOptions);
134
+ get ajvOptions(): Record<string, unknown>;
135
+ /**
136
+ * Compile a schema → AJV validate function (with cache).
137
+ */
138
+ compile(schema: JSONSchema, cacheKey?: string | null): AjvValidateFn;
139
+ /**
140
+ * Synchronous validation.
141
+ */
142
+ validate<T = unknown>(schema: JSONSchema | AjvValidateFn, data: T, options?: ValidateOptions): ValidationResult<T>;
143
+ /**
144
+ * Async validation (throws ValidationError on failure).
145
+ * V-Y02 fix: v1 validateAsync lacked smartCoerceTypes; v2 routes through _validateInternal uniformly.
146
+ * BC-6 fix: validateAsync runs async custom validators (sync AJV pass skips async fn; this method runs the full set).
147
+ */
148
+ validateAsync<T = unknown>(schema: JSONSchema | AjvValidateFn, data: T, options?: ValidateOptions): Promise<T>;
149
+ /**
150
+ * BC-6: run all validators in schema._customValidators (including async).
151
+ * AJV's sync keyword skips Promise-returning validators; this method runs the complete set in validateAsync.
152
+ * Returns the first failing ValidationErrorItem, or null if all pass.
153
+ */
154
+ private _runCustomValidators;
155
+ /**
156
+ * Batch validation (compile once, reuse for each item).
157
+ */
158
+ validateBatch<T = unknown>(schema: JSONSchema, dataArray: T[]): ValidationResult<T>[];
159
+ /**
160
+ * Add a custom keyword.
161
+ */
162
+ addKeyword(keyword: string, definition: KeywordDefinitionInput): this;
163
+ /**
164
+ * Add a custom format.
165
+ */
166
+ addFormat(name: string, validator: Format): this;
167
+ /**
168
+ * Add a schema reference.
169
+ */
170
+ addSchema(uri: string, schema: JSONSchema): this;
171
+ /**
172
+ * Remove a schema reference.
173
+ */
174
+ removeSchema(uri: string): this;
175
+ getAjv(): InstanceType<typeof Ajv>;
176
+ get cache(): CacheManager;
177
+ clearCache(): void;
178
+ getCacheStats(): CacheStats;
179
+ static create(options?: ValidatorOptions): Validator;
180
+ /**
181
+ * Quick validate (V-Y07 fix: reuses singleton Ajv instead of creating new Ajv each time).
182
+ */
183
+ static quickValidate(schema: JSONSchema, data: unknown): boolean;
184
+ private _validateInternal;
185
+ private _generateCacheKey;
186
+ private readonly _flatLocaleCache;
187
+ private _getFlatLocaleMessages;
188
+ private _formatErrors;
189
+ private _internalError;
190
+ }
191
+
192
+ export { CacheManager as C, Validator as V };