schema-dsl 1.2.5 → 2.0.1
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 +130 -238
- package/LICENSE +21 -21
- package/README.md +628 -2486
- package/dist/DslBuilder-BIgQOAXp.d.ts +343 -0
- package/dist/DslBuilder-CjHTucNQ.d.cts +343 -0
- package/dist/Validator-CllRdrY0.d.ts +192 -0
- package/dist/Validator-D6okG9tr.d.cts +192 -0
- package/dist/index.cjs +6640 -0
- package/dist/index.d.cts +1151 -0
- package/dist/index.d.ts +1151 -0
- package/dist/index.js +6574 -0
- package/dist/plugin-CIKtTMtS.d.cts +246 -0
- package/dist/plugin-CIKtTMtS.d.ts +246 -0
- package/dist/plugins/custom-format.cjs +3818 -0
- package/dist/plugins/custom-format.d.cts +12 -0
- package/dist/plugins/custom-format.d.ts +12 -0
- package/dist/plugins/custom-format.js +3788 -0
- package/dist/plugins/custom-type-example.cjs +3811 -0
- package/dist/plugins/custom-type-example.d.cts +8 -0
- package/dist/plugins/custom-type-example.d.ts +8 -0
- package/dist/plugins/custom-type-example.js +3781 -0
- package/dist/plugins/custom-validator.cjs +144 -0
- package/dist/plugins/custom-validator.d.cts +10 -0
- package/dist/plugins/custom-validator.d.ts +10 -0
- package/dist/plugins/custom-validator.js +119 -0
- package/docs/FEATURE-INDEX.md +553 -519
- package/docs/add-custom-locale.md +496 -483
- package/docs/add-keyword.md +24 -0
- package/docs/api-reference.md +1047 -805
- package/docs/api.md +13 -0
- package/docs/best-practices-project-structure.md +417 -408
- package/docs/best-practices.md +712 -672
- package/docs/cache-manager.md +344 -336
- package/docs/compile.md +45 -0
- package/docs/conditional-api.md +1307 -1278
- package/docs/custom-extensions-guide.md +339 -411
- package/docs/design-philosophy.md +606 -601
- package/docs/doc-index.md +324 -0
- package/docs/dsl-syntax.md +714 -664
- package/docs/dynamic-locale.md +608 -598
- package/docs/enum.md +482 -475
- package/docs/error-handling.md +1975 -1966
- package/docs/export-guide.md +501 -462
- package/docs/export-limitations.md +567 -551
- package/docs/faq.md +596 -577
- package/docs/frontend-i18n-guide.md +307 -293
- package/docs/i18n-user-guide.md +487 -474
- package/docs/i18n.md +476 -457
- package/docs/index.md +48 -0
- package/docs/json-schema-basics.md +40 -0
- package/docs/label-vs-description.md +271 -262
- package/docs/markdown-exporter.md +406 -397
- package/docs/mongodb-exporter.md +302 -295
- package/docs/multi-language.md +26 -0
- package/docs/multi-type-support.md +322 -329
- package/docs/mysql-exporter.md +280 -273
- package/docs/number-operators.md +449 -442
- package/docs/optional-marker-guide.md +326 -321
- package/docs/performance-guide.md +49 -0
- package/docs/plugin-system.md +381 -542
- package/docs/plugin-type-registration.md +34 -0
- package/docs/postgresql-exporter.md +311 -304
- package/docs/public/favicon.svg +5 -0
- package/docs/quick-start.md +435 -761
- package/docs/runtime-locale-support.md +532 -521
- package/docs/schema-helper.md +345 -340
- package/docs/schema-utils-advanced-issues.md +23 -0
- package/docs/schema-utils-best-practices.md +20 -0
- package/docs/schema-utils-chaining.md +150 -143
- package/docs/schema-utils.md +524 -490
- package/docs/security-checklist.md +20 -0
- package/docs/string-extensions.md +488 -480
- package/docs/troubleshooting.md +486 -471
- package/docs/type-converter.md +310 -319
- package/docs/type-reference.md +242 -219
- package/docs/typescript-guide.md +584 -573
- package/docs/union-type-guide.md +157 -147
- package/docs/union-types.md +284 -277
- package/docs/validate-async.md +491 -480
- package/docs/validate-batch.md +49 -0
- package/docs/validate-dsl-object-support.md +578 -573
- package/docs/validate.md +506 -486
- package/docs/validation-guide.md +502 -484
- package/docs/validator.md +39 -0
- package/package.json +131 -73
- package/plugins/custom-format.cjs +8 -0
- package/plugins/custom-type-example.cjs +8 -0
- package/plugins/custom-validator.cjs +8 -0
- package/src/adapters/DslAdapter.ts +111 -0
- package/src/adapters/index.ts +1 -0
- package/src/config/constants.ts +83 -0
- package/src/config/index.ts +2 -0
- package/src/config/patterns.ts +77 -0
- package/src/core/CacheManager.ts +169 -0
- package/src/core/ConditionalBuilder.ts +382 -0
- package/src/core/ConditionalRuntime.ts +28 -0
- package/src/core/ConditionalValidator.ts +255 -0
- package/src/core/DslBuilder.ts +687 -0
- package/src/core/ErrorCodes.ts +38 -0
- package/src/core/ErrorFormatter.ts +271 -0
- package/src/core/JSONSchemaCore.ts +65 -0
- package/src/core/Locale.ts +187 -0
- package/src/core/MessageTemplate.ts +42 -0
- package/src/core/ObjectDslBuilder.ts +64 -0
- package/src/core/PluginManager.ts +326 -0
- package/src/core/StringExtensions.ts +140 -0
- package/src/core/TemplateEngine.ts +44 -0
- package/src/core/Validator.ts +448 -0
- package/src/errors/I18nError.ts +159 -0
- package/src/errors/ValidationError.ts +105 -0
- package/src/exporters/BaseExporter.ts +60 -0
- package/src/exporters/MarkdownExporter.ts +305 -0
- package/src/exporters/MongoDBExporter.ts +126 -0
- package/src/exporters/MySQLExporter.ts +156 -0
- package/src/exporters/PostgreSQLExporter.ts +222 -0
- package/src/exporters/index.ts +18 -0
- package/src/index.ts +651 -0
- package/{lib/locales/en-US.js → src/locales/en-US.ts} +160 -176
- package/{lib/locales/es-ES.js → src/locales/es-ES.ts} +160 -113
- package/{lib/locales/fr-FR.js → src/locales/fr-FR.ts} +160 -113
- package/src/locales/index.ts +103 -0
- package/{lib/locales/ja-JP.js → src/locales/ja-JP.ts} +160 -118
- package/src/locales/types.ts +156 -0
- package/{lib/locales/zh-CN.js → src/locales/zh-CN.ts} +160 -177
- package/src/parser/ConstraintParser.ts +101 -0
- package/src/parser/DslParser.ts +470 -0
- package/src/parser/SchemaCompiler.ts +66 -0
- package/src/parser/TypeRegistry.ts +250 -0
- package/src/parser/index.ts +6 -0
- package/src/plugins/custom-format.ts +124 -0
- package/src/plugins/custom-type-example.ts +106 -0
- package/src/plugins/custom-validator.ts +138 -0
- package/src/types/conditional.ts +28 -0
- package/src/types/config.ts +59 -0
- package/src/types/dsl.ts +131 -0
- package/src/types/error.ts +60 -0
- package/src/types/index.ts +17 -0
- package/src/types/infer.ts +128 -0
- package/src/types/plugin.ts +58 -0
- package/src/types/safe-regex.d.ts +9 -0
- package/src/types/schema.ts +66 -0
- package/src/types/validate.ts +71 -0
- package/src/utils/SchemaHelper.ts +196 -0
- package/src/utils/SchemaUtils.ts +365 -0
- package/src/utils/TypeConverter.ts +215 -0
- package/src/utils/index.ts +10 -0
- package/src/validators/CustomKeywords.ts +477 -0
- package/.eslintignore +0 -11
- package/.eslintrc.json +0 -27
- package/CONTRIBUTING.md +0 -368
- package/STATUS.md +0 -491
- package/changelogs/v1.0.0.md +0 -328
- package/changelogs/v1.0.9.md +0 -367
- package/changelogs/v1.1.0.md +0 -389
- package/changelogs/v1.1.1.md +0 -308
- package/changelogs/v1.1.2.md +0 -183
- package/changelogs/v1.1.3.md +0 -161
- package/changelogs/v1.1.4.md +0 -432
- package/changelogs/v1.1.5.md +0 -493
- package/changelogs/v1.1.6.md +0 -211
- package/changelogs/v1.1.8.md +0 -376
- package/changelogs/v1.2.3.md +0 -124
- package/docs/INDEX.md +0 -252
- package/docs/issues-resolved-summary.md +0 -196
- package/docs/performance-benchmark-report.md +0 -179
- package/docs/performance-quick-reference.md +0 -123
- package/docs/user-questions-answered.md +0 -353
- package/docs/validation-rules-v1.0.2.md +0 -1608
- package/examples/README.md +0 -81
- package/examples/array-dsl-example.js +0 -227
- package/examples/conditional-example.js +0 -288
- package/examples/conditional-non-object.js +0 -129
- package/examples/conditional-validate-example.js +0 -321
- package/examples/custom-extension.js +0 -85
- package/examples/dsl-match-example.js +0 -74
- package/examples/dsl-style.js +0 -118
- package/examples/dynamic-locale-configuration.js +0 -348
- package/examples/dynamic-locale-example.js +0 -287
- package/examples/enum.examples.js +0 -324
- package/examples/export-demo.js +0 -130
- package/examples/express-integration.js +0 -376
- package/examples/i18n-error-handling-complete.js +0 -381
- package/examples/i18n-error-handling-quickstart.md +0 -0
- package/examples/i18n-error.examples.js +0 -181
- package/examples/i18n-full-demo.js +0 -301
- package/examples/i18n-memory-safety.examples.js +0 -268
- package/examples/markdown-export.js +0 -71
- package/examples/middleware-usage.js +0 -93
- package/examples/new-features-comparison.js +0 -315
- package/examples/password-reset/README.md +0 -153
- package/examples/password-reset/schema.js +0 -26
- package/examples/password-reset/test.js +0 -101
- package/examples/plugin-system.examples.js +0 -205
- package/examples/schema-utils-chaining.examples.js +0 -250
- package/examples/simple-example.js +0 -122
- package/examples/slug.examples.js +0 -179
- package/examples/string-extensions.js +0 -297
- package/examples/union-type-example.js +0 -127
- package/examples/union-types-example.js +0 -77
- package/examples/user-registration/README.md +0 -156
- package/examples/user-registration/routes.js +0 -92
- package/examples/user-registration/schema.js +0 -150
- package/examples/user-registration/server.js +0 -74
- package/index.d.ts +0 -3658
- package/index.js +0 -475
- package/index.mjs +0 -60
- package/lib/adapters/DslAdapter.js +0 -995
- package/lib/adapters/index.js +0 -20
- package/lib/config/constants.js +0 -286
- package/lib/config/patterns/common.js +0 -47
- package/lib/config/patterns/creditCard.js +0 -9
- package/lib/config/patterns/idCard.js +0 -9
- package/lib/config/patterns/index.js +0 -9
- package/lib/config/patterns/licensePlate.js +0 -4
- package/lib/config/patterns/passport.js +0 -4
- package/lib/config/patterns/phone.js +0 -9
- package/lib/config/patterns/postalCode.js +0 -5
- package/lib/core/CacheManager.js +0 -376
- package/lib/core/ConditionalBuilder.js +0 -503
- package/lib/core/DslBuilder.js +0 -1589
- package/lib/core/ErrorCodes.js +0 -233
- package/lib/core/ErrorFormatter.js +0 -445
- package/lib/core/JSONSchemaCore.js +0 -347
- package/lib/core/Locale.js +0 -130
- package/lib/core/MessageTemplate.js +0 -98
- package/lib/core/PluginManager.js +0 -448
- package/lib/core/StringExtensions.js +0 -240
- package/lib/core/Validator.js +0 -654
- package/lib/errors/I18nError.js +0 -328
- package/lib/errors/ValidationError.js +0 -191
- package/lib/exporters/MarkdownExporter.js +0 -420
- package/lib/exporters/MongoDBExporter.js +0 -162
- package/lib/exporters/MySQLExporter.js +0 -212
- package/lib/exporters/PostgreSQLExporter.js +0 -289
- package/lib/exporters/index.js +0 -24
- package/lib/locales/index.js +0 -8
- package/lib/utils/LRUCache.js +0 -174
- package/lib/utils/SchemaHelper.js +0 -240
- package/lib/utils/SchemaUtils.js +0 -445
- package/lib/utils/TypeConverter.js +0 -245
- package/lib/utils/index.js +0 -13
- package/lib/validators/CustomKeywords.js +0 -616
- 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.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 _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.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 _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 };
|