schema-dsl 2.0.0 → 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.
Files changed (145) hide show
  1. package/CHANGELOG.md +130 -113
  2. package/LICENSE +21 -21
  3. package/README.md +628 -628
  4. package/dist/{DslBuilder-DkLaOo9Q.d.ts → DslBuilder-BIgQOAXp.d.ts} +2 -0
  5. package/dist/{DslBuilder-DQDN0ZxZ.d.cts → DslBuilder-CjHTucNQ.d.cts} +2 -0
  6. package/dist/{Validator-hFWKGxir.d.ts → Validator-CllRdrY0.d.ts} +1 -1
  7. package/dist/{Validator-C7GsVQOH.d.cts → Validator-D6okG9tr.d.cts} +1 -1
  8. package/dist/index.cjs +75 -29
  9. package/dist/index.d.cts +10 -4
  10. package/dist/index.d.ts +10 -4
  11. package/dist/index.js +75 -29
  12. package/dist/plugins/custom-format.cjs +33 -17
  13. package/dist/plugins/custom-format.d.cts +1 -1
  14. package/dist/plugins/custom-format.d.ts +1 -1
  15. package/dist/plugins/custom-format.js +33 -17
  16. package/dist/plugins/custom-type-example.cjs +33 -17
  17. package/dist/plugins/custom-type-example.d.cts +1 -1
  18. package/dist/plugins/custom-type-example.d.ts +1 -1
  19. package/dist/plugins/custom-type-example.js +33 -17
  20. package/dist/plugins/custom-validator.cjs +0 -2
  21. package/dist/plugins/custom-validator.d.cts +1 -1
  22. package/dist/plugins/custom-validator.d.ts +1 -1
  23. package/dist/plugins/custom-validator.js +0 -2
  24. package/docs/FEATURE-INDEX.md +553 -553
  25. package/docs/add-custom-locale.md +496 -496
  26. package/docs/add-keyword.md +24 -24
  27. package/docs/api-reference.md +1047 -1047
  28. package/docs/api.md +13 -13
  29. package/docs/best-practices-project-structure.md +417 -417
  30. package/docs/best-practices.md +712 -712
  31. package/docs/cache-manager.md +344 -344
  32. package/docs/compile.md +45 -45
  33. package/docs/conditional-api.md +1307 -1307
  34. package/docs/custom-extensions-guide.md +339 -339
  35. package/docs/design-philosophy.md +606 -606
  36. package/docs/doc-index.md +324 -324
  37. package/docs/dsl-syntax.md +714 -714
  38. package/docs/dynamic-locale.md +608 -608
  39. package/docs/enum.md +482 -482
  40. package/docs/error-handling.md +1975 -1975
  41. package/docs/export-guide.md +501 -501
  42. package/docs/export-limitations.md +567 -567
  43. package/docs/faq.md +596 -596
  44. package/docs/frontend-i18n-guide.md +307 -307
  45. package/docs/i18n-user-guide.md +487 -487
  46. package/docs/i18n.md +476 -476
  47. package/docs/index.md +48 -48
  48. package/docs/json-schema-basics.md +40 -40
  49. package/docs/label-vs-description.md +271 -271
  50. package/docs/markdown-exporter.md +406 -406
  51. package/docs/mongodb-exporter.md +302 -302
  52. package/docs/multi-language.md +26 -26
  53. package/docs/multi-type-support.md +322 -322
  54. package/docs/mysql-exporter.md +280 -280
  55. package/docs/number-operators.md +449 -449
  56. package/docs/optional-marker-guide.md +326 -326
  57. package/docs/performance-guide.md +49 -49
  58. package/docs/plugin-system.md +381 -381
  59. package/docs/plugin-type-registration.md +34 -34
  60. package/docs/postgresql-exporter.md +311 -311
  61. package/docs/public/favicon.svg +4 -4
  62. package/docs/quick-start.md +435 -435
  63. package/docs/runtime-locale-support.md +532 -532
  64. package/docs/schema-helper.md +345 -345
  65. package/docs/schema-utils-advanced-issues.md +23 -23
  66. package/docs/schema-utils-best-practices.md +20 -20
  67. package/docs/schema-utils-chaining.md +150 -150
  68. package/docs/schema-utils.md +524 -524
  69. package/docs/security-checklist.md +20 -20
  70. package/docs/string-extensions.md +488 -488
  71. package/docs/troubleshooting.md +486 -486
  72. package/docs/type-converter.md +310 -310
  73. package/docs/type-reference.md +242 -242
  74. package/docs/typescript-guide.md +584 -584
  75. package/docs/union-type-guide.md +157 -157
  76. package/docs/union-types.md +284 -284
  77. package/docs/validate-async.md +491 -491
  78. package/docs/validate-batch.md +49 -49
  79. package/docs/validate-dsl-object-support.md +578 -578
  80. package/docs/validate.md +506 -506
  81. package/docs/validation-guide.md +502 -502
  82. package/docs/validator.md +39 -39
  83. package/package.json +131 -131
  84. package/plugins/custom-format.cjs +8 -8
  85. package/plugins/custom-type-example.cjs +8 -8
  86. package/plugins/custom-validator.cjs +8 -8
  87. package/src/adapters/DslAdapter.ts +111 -111
  88. package/src/adapters/index.ts +1 -1
  89. package/src/config/constants.ts +83 -83
  90. package/src/config/index.ts +2 -2
  91. package/src/config/patterns.ts +77 -77
  92. package/src/core/CacheManager.ts +169 -159
  93. package/src/core/ConditionalBuilder.ts +382 -382
  94. package/src/core/ConditionalRuntime.ts +27 -27
  95. package/src/core/ConditionalValidator.ts +254 -254
  96. package/src/core/DslBuilder.ts +687 -677
  97. package/src/core/ErrorCodes.ts +38 -38
  98. package/src/core/ErrorFormatter.ts +271 -271
  99. package/src/core/JSONSchemaCore.ts +65 -65
  100. package/src/core/Locale.ts +187 -187
  101. package/src/core/MessageTemplate.ts +42 -42
  102. package/src/core/ObjectDslBuilder.ts +64 -64
  103. package/src/core/PluginManager.ts +326 -326
  104. package/src/core/StringExtensions.ts +140 -140
  105. package/src/core/TemplateEngine.ts +44 -44
  106. package/src/core/Validator.ts +448 -448
  107. package/src/errors/I18nError.ts +159 -159
  108. package/src/errors/ValidationError.ts +105 -105
  109. package/src/exporters/BaseExporter.ts +60 -60
  110. package/src/exporters/MarkdownExporter.ts +305 -305
  111. package/src/exporters/MongoDBExporter.ts +126 -126
  112. package/src/exporters/MySQLExporter.ts +156 -155
  113. package/src/exporters/PostgreSQLExporter.ts +222 -222
  114. package/src/exporters/index.ts +18 -18
  115. package/src/index.ts +651 -633
  116. package/src/locales/en-US.ts +160 -160
  117. package/src/locales/es-ES.ts +160 -160
  118. package/src/locales/fr-FR.ts +160 -160
  119. package/src/locales/index.ts +103 -103
  120. package/src/locales/ja-JP.ts +160 -160
  121. package/src/locales/types.ts +156 -156
  122. package/src/locales/zh-CN.ts +160 -160
  123. package/src/parser/ConstraintParser.ts +101 -101
  124. package/src/parser/DslParser.ts +470 -470
  125. package/src/parser/SchemaCompiler.ts +66 -66
  126. package/src/parser/TypeRegistry.ts +250 -250
  127. package/src/parser/index.ts +6 -6
  128. package/src/plugins/custom-format.ts +124 -126
  129. package/src/plugins/custom-type-example.ts +106 -108
  130. package/src/plugins/custom-validator.ts +138 -140
  131. package/src/types/conditional.ts +28 -28
  132. package/src/types/config.ts +59 -59
  133. package/src/types/dsl.ts +131 -131
  134. package/src/types/error.ts +60 -60
  135. package/src/types/index.ts +17 -17
  136. package/src/types/infer.ts +127 -127
  137. package/src/types/plugin.ts +58 -58
  138. package/src/types/safe-regex.d.ts +9 -9
  139. package/src/types/schema.ts +66 -66
  140. package/src/types/validate.ts +71 -71
  141. package/src/utils/SchemaHelper.ts +196 -196
  142. package/src/utils/SchemaUtils.ts +365 -346
  143. package/src/utils/TypeConverter.ts +215 -215
  144. package/src/utils/index.ts +10 -10
  145. package/src/validators/CustomKeywords.ts +477 -477
package/CHANGELOG.md CHANGED
@@ -1,113 +1,130 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- > 📂 **Detailed changes**: see [`changelogs/`](./changelogs/) for full notes on major versions.
6
-
7
- ---
8
-
9
- ## Version History
10
-
11
- | Version | Date | Type | Key Theme |
12
- |---------|------|------|-----------|
13
- | [2.0.0] | 2026-05-09 | Major | Full release: BC-2/4/5/6/7 fixes, string:N compat, English comments, 58 enriched examples, 1095 tests [View](./changelogs/v2.0.0.md) |
14
- | [2.0.0-beta.2] | 2026-04-12 | Major | Full TypeScript rewrite: ESM+CJS dual format, AJV 8, tsup build, 1052 tests passing [View](./changelogs/v2.0.0-beta.2.md) |
15
- | [v1.2.5] | 2026-03-09 | Patch | Feature: `DslBuilder.toJsonSchema()` exports clean JSON Schema, strips internal markers |
16
- | [v1.2.4] | 2026-03-09 | Patch | P1 Fix: `enum:a,b,c` comma-separated format parsing completely broken |
17
- | [v1.2.3] | 2026-03-03 | Patch | Feature: i18n sub-directory merging; collaborative locale maintenance with auto-merge + conflict detection [View](./changelogs/v1.2.3.md) |
18
- | [v1.2.2] | 2026-02-06 | Minor | Major feature: smart type coercion auto-converts string numbers, full Web API support [View](./changelogs/v1.2.2.md) |
19
- | [v1.1.8] | 2026-01-30 | Patch | Feature: smart argument detection, simplified syntax `dsl.error.throw('key', 'locale')` [View](./changelogs/v1.1.8.md) |
20
- | [v1.1.7] | 2026-01-27 | Patch | Fix: error message path display all error types now show field name only |
21
- | [v1.1.6] | 2026-01-23 | Patch | Fix: enum and additionalProperties error message template variables not substituted [View](./changelogs/v1.1.6.md) |
22
- | [v1.1.5] | 2026-01-17 | Patch | Feature: error config object format; locale messages now support `{ code, message }` object format [View](./changelogs/v1.1.5.md) |
23
- | [v1.1.4] | 2026-01-13 | Patch | TS fix: remove duplicate function signatures + multilingual docs improvements [View](./changelogs/v1.1.4.md) |
24
- | [v1.1.3] | 2026-01-09 | Patch | Fix: type error message template variables not substituted [View](./changelogs/v1.1.3.md) |
25
- | [v1.1.2] | 2026-01-06 | Patch | Feature: numeric comparison operators + bug fixes [View](./changelogs/v1.1.2.md) |
26
- | [v1.1.1] | 2026-01-06 | Patch | Feature: ConditionalBuilder independent message support [View](./changelogs/v1.1.1.md) |
27
- | [v1.1.0] | 2026-01-05 | Minor | Major: cross-type union validation + enhanced plugin system [View](./changelogs/v1.1.0.md) |
28
- | [v1.0.9] | 2026-01-04 | Patch | Major improvement: complete i18n support + full TypeScript types [View](./changelogs/v1.0.9.md) |
29
- | v1.0.8 | 2026-01-04 | Patch | Improvement: enhanced error message filtering |
30
- | v1.0.7 | 2026-01-04 | Patch | Fix: dsl.match/dsl.if nesting now supports dsl() wrapper |
31
- | v1.0.6 | 2026-01-04 | Patch | 🚨 Critical fix: TypeScript type pollution |
32
- | v1.0.5 | 2026-01-04 | Patch | Test coverage raised to 97% |
33
- | v1.0.4 | 2025-12-31 | Patch | Full TypeScript support, validateAsync, ValidationError |
34
- | v1.0.3 | 2025-12-31 | Patch | ⚠️ Breaking change: single-value syntax fix |
35
- | v1.0.2 | 2025-12-31 | Patch | 15 new validators, complete docs, 75 tests |
36
- | v1.0.1 | 2025-12-31 | Patch | Enum support, auto type detection, unified error messages |
37
- | [v1.0.0] | 2025-12-29 | Pre-release | Initial release [View](./changelogs/v1.0.0.md) |
38
-
39
- ---
40
-
41
- ## [2.0.0] — 2026-05-09
42
-
43
- ### Breaking Changes (v1 → v2)
44
-
45
- - **BC-2**: `DslAdapter.parseObject()` now returns `ObjectDslBuilder` (chainable: `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`) instead of plain `JSONSchema`. Call `.toSchema()` to get the raw schema.
46
- - **BC-4**: `DslAdapter.typeMap` is now a Proxy getter; `DslAdapter.registerType()` method added for direct registration.
47
- - **BC-5**: `ConditionalBuilder.require(field)` method added for v1 field-requirement compatibility.
48
- - **BC-6**: `Validator.validateAsync()` added; async custom validators in sync `validate()` now return `{ valid: false }` with an error message instead of silently passing.
49
- - **BC-7**: `string:N` single-value DSL now expands to `{ minLength: N, maxLength: N }` (exactLength compat, consistent with v1 behavior).
50
-
51
- ### New Features
52
-
53
- - **ObjectDslBuilder**: New class wrapping object schemas; supports `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`, `.toString()`.
54
- - **validateAsync()**: Full async validation support with typed return (`Promise<T>`); throws `ValidationError` on failure.
55
- - **installStringExtensions()**: Opt-in String.prototype extension; auto-installed at module load for v1 compatibility.
56
-
57
- ### Documentation & Examples
58
-
59
- - 58 example files in `examples/docs/` fully enriched (90–130+ lines each) with complete API coverage.
60
- - All code comments translated to English (CJK locales and output strings preserved).
61
- - `docs/api-reference.md`: fixed 4 doc inconsistencies (string:N behavior, validateAsync signature, LocaleMessage params, exactOptionalPropertyTypes notes).
62
-
63
- ### Quality
64
-
65
- - 1095 tests passing (75 test files).
66
- - 0 TypeScript errors in source and examples.
67
- - ESM + CJS dual format build.
68
-
69
- ### Fixes
70
-
71
- - **Security**: replace the custom regex ReDoS heuristic in `CustomKeywords` with `safe-regex`, so catastrophic patterns such as `((a)+)+$` are rejected before execution.
72
- - **Validation**: stop caching `DslBuilder.toSchema()` results inside `Validator`, so chain mutations made after the first validation call are honored by both `validate()` and `validateAsync()`.
73
- - **Validation**: make `ConditionalBuilder` cache `Validator` instances by constructor-level option set, so repeated calls with different `allErrors` / `useDefaults` configurations no longer reuse a stale validator.
74
- - **Exporters**: fix MySQL integer sizing so `TypeConverter.toMySQLType()` checks both `minimum` and `maximum` before choosing `TINYINT` / `SMALLINT` / `INT`, avoiding undersized column types.
75
- - **Exporters**: escape Markdown table cell content in `MarkdownExporter`, so field names, constraint text, and multiline descriptions containing `|` or newlines no longer break rendered tables.
76
- - **Tests**: add focused regression coverage for unsafe regex rejection while preserving the existing invalid-regex error path.
77
-
78
- ---
79
-
80
- ## [Unreleased]
81
-
82
- - docs: aligned 58-to-58 `docs/*.md` `examples/docs/*.ts` mapping, switched to stable example entry links
83
- - docs: completed runnable coverage for advanced APIs in `api-reference`, added `ErrorFormatter` reference, corrected `FEATURE-INDEX` method descriptions
84
- - chore: cleaned up legacy top-level `examples/*` entry paths, unified example entry points and `.tmp` workspace visibility
85
-
86
- ---
87
-
88
- ## Links
89
-
90
- - [GitHub Repository](https://github.com/vextjs/schema-dsl)
91
- - [Online Documentation](https://vextjs.github.io/schema-dsl)
92
- - [Detailed Changelogs](./changelogs/)
93
- - [Contributing Guide](./CONTRIBUTING.md)
94
-
95
- [Unreleased]: https://github.com/vextjs/schema-dsl/compare/v2.0.0...HEAD
96
- [2.0.0]: https://github.com/vextjs/schema-dsl/compare/v2.0.0-beta.2...v2.0.0
97
- [2.0.0-beta.2]: https://github.com/vextjs/schema-dsl/releases/tag/v2.0.0-beta.2
98
- [v1.2.5]: https://github.com/vextjs/schema-dsl/compare/v1.2.4...v1.2.5
99
- [v1.2.4]: https://github.com/vextjs/schema-dsl/compare/v1.2.3...v1.2.4
100
- [v1.2.3]: https://github.com/vextjs/schema-dsl/compare/v1.2.2...v1.2.3
101
- [v1.2.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.8...v1.2.2
102
- [v1.1.8]: https://github.com/vextjs/schema-dsl/compare/v1.1.7...v1.1.8
103
- [v1.1.7]: https://github.com/vextjs/schema-dsl/compare/v1.1.6...v1.1.7
104
- [v1.1.6]: https://github.com/vextjs/schema-dsl/compare/v1.1.5...v1.1.6
105
- [v1.1.5]: https://github.com/vextjs/schema-dsl/compare/v1.1.4...v1.1.5
106
- [v1.1.4]: https://github.com/vextjs/schema-dsl/compare/v1.1.3...v1.1.4
107
- [v1.1.3]: https://github.com/vextjs/schema-dsl/compare/v1.1.2...v1.1.3
108
- [v1.1.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.1...v1.1.2
109
- [v1.1.1]: https://github.com/vextjs/schema-dsl/compare/v1.1.0...v1.1.1
110
- [v1.1.0]: https://github.com/vextjs/schema-dsl/compare/v1.0.9...v1.1.0
111
- [v1.0.9]: https://github.com/vextjs/schema-dsl/compare/v1.0.8...v1.0.9
112
- [v1.0.0]: https://github.com/vextjs/schema-dsl/releases/tag/v1.0.0
113
-
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ > 📂 **Detailed changes**: see [`changelogs/`](./changelogs/) for full notes on major versions.
6
+
7
+ ---
8
+
9
+ ## Version History
10
+
11
+ | Version | Date | Type | Key Theme |
12
+ |---------|------|------|-----------|
13
+ | [2.0.1] | 2026-05-22 | Patch | Post-release security & correctness fixes: safe-regex bypass, XSS escaping, reset completeness, cache rebuild, SQL injection in exporters |
14
+ | [2.0.0] | 2026-05-09 | Major | Full release: BC-2/4/5/6/7 fixes, string:N compat, English comments, 58 enriched examples, 1095 tests [View](./changelogs/v2.0.0.md) |
15
+ | [2.0.0-beta.2] | 2026-04-12 | Major | Full TypeScript rewrite: ESM+CJS dual format, AJV 8, tsup build, 1052 tests passing [View](./changelogs/v2.0.0-beta.2.md) |
16
+ | [v1.2.5] | 2026-03-09 | Patch | Feature: `DslBuilder.toJsonSchema()` exports clean JSON Schema, strips internal markers |
17
+ | [v1.2.4] | 2026-03-09 | Patch | P1 Fix: `enum:a,b,c` comma-separated format parsing completely broken |
18
+ | [v1.2.3] | 2026-03-03 | Patch | Feature: i18n sub-directory merging; collaborative locale maintenance with auto-merge + conflict detection [View](./changelogs/v1.2.3.md) |
19
+ | [v1.2.2] | 2026-02-06 | Minor | Major feature: smart type coercion auto-converts string numbers, full Web API support [View](./changelogs/v1.2.2.md) |
20
+ | [v1.1.8] | 2026-01-30 | Patch | Feature: smart argument detection, simplified syntax `dsl.error.throw('key', 'locale')` [View](./changelogs/v1.1.8.md) |
21
+ | [v1.1.7] | 2026-01-27 | Patch | Fix: error message path display — all error types now show field name only |
22
+ | [v1.1.6] | 2026-01-23 | Patch | Fix: enum and additionalProperties error message template variables not substituted [View](./changelogs/v1.1.6.md) |
23
+ | [v1.1.5] | 2026-01-17 | Patch | Feature: error config object format; locale messages now support `{ code, message }` object format [View](./changelogs/v1.1.5.md) |
24
+ | [v1.1.4] | 2026-01-13 | Patch | TS fix: remove duplicate function signatures + multilingual docs improvements [View](./changelogs/v1.1.4.md) |
25
+ | [v1.1.3] | 2026-01-09 | Patch | Fix: type error message template variables not substituted [View](./changelogs/v1.1.3.md) |
26
+ | [v1.1.2] | 2026-01-06 | Patch | Feature: numeric comparison operators + bug fixes [View](./changelogs/v1.1.2.md) |
27
+ | [v1.1.1] | 2026-01-06 | Patch | Feature: ConditionalBuilder independent message support [View](./changelogs/v1.1.1.md) |
28
+ | [v1.1.0] | 2026-01-05 | Minor | Major: cross-type union validation + enhanced plugin system [View](./changelogs/v1.1.0.md) |
29
+ | [v1.0.9] | 2026-01-04 | Patch | Major improvement: complete i18n support + full TypeScript types [View](./changelogs/v1.0.9.md) |
30
+ | v1.0.8 | 2026-01-04 | Patch | Improvement: enhanced error message filtering |
31
+ | v1.0.7 | 2026-01-04 | Patch | Fix: dsl.match/dsl.if nesting now supports dsl() wrapper |
32
+ | v1.0.6 | 2026-01-04 | Patch | 🚨 Critical fix: TypeScript type pollution |
33
+ | v1.0.5 | 2026-01-04 | Patch | Test coverage raised to 97% |
34
+ | v1.0.4 | 2025-12-31 | Patch | Full TypeScript support, validateAsync, ValidationError |
35
+ | v1.0.3 | 2025-12-31 | Patch | ⚠️ Breaking change: single-value syntax fix |
36
+ | v1.0.2 | 2025-12-31 | Patch | 15 new validators, complete docs, 75 tests |
37
+ | v1.0.1 | 2025-12-31 | Patch | Enum support, auto type detection, unified error messages |
38
+ | [v1.0.0] | 2025-12-29 | Pre-release | Initial release [View](./changelogs/v1.0.0.md) |
39
+
40
+ ---
41
+
42
+ ## [2.0.1] — 2026-05-22
43
+
44
+ ### Fixes
45
+
46
+ - **Security (DslBuilder)**: built-in string validators (`domain`, `ip`, `base64`, `jwt`, `phone`, `idCard`, `slugChain`, `creditCard`, `licensePlate`, `postalCode`, `passport`, `username`, `password`) now use a new private `_setPattern()` that bypasses the safe-regex check. Public `.pattern()` still enforces the check for user-supplied patterns; this prevents false-positive ReDoS rejections on pre-approved, production-tested regex patterns.
47
+ - **Security (SchemaUtils)**: `toHTML()` now escapes all dynamic content (`title`, field names, types, labels) through `_escapeHtml()`, preventing XSS when field names or labels contain `<`, `>`, `&`, `"`, or `'`. `toMarkdown()` escapes pipe characters and newlines through `_escapeMdCell()`, preventing broken table rendering.
48
+ - **Security (Exporters)**: `PostgreSQLExporter._formatDefaultValue()` and `MySQLExporter._formatDefaultValue()` now call `_escapeString()` on JSON-stringified object/array default values, preventing SQL injection when default values contain single quotes (e.g. `{ name: "O'Brien" }`). `MySQLExporter` also no longer emits `[object Object]` for object-type defaults.
49
+ - **Correctness (index)**: `resetRuntimeState()` now fully resets all runtime-mutable globals: `_strictMode` (TypeRegistry), custom types (DslBuilder + TypeRegistry), locale registry (Locale.reset()), and user-added pattern keys in `PATTERNS.phone / .idCard / .creditCard` via an initial-keys snapshot — preventing cross-test or cross-tenant leakage.
50
+ - **Correctness (CacheManager)**: the `options` setter now rebuilds the internal `MemoryCache` instance when `maxSize` changes, migrating existing entries to the new capacity. Previously, only the `_maxSize` field was updated while the cache instance retained its original capacity.
51
+ - **Correctness (TypeConverter)**: `toMySQLType()` and `toPostgreSQLType()` no longer map the JSON Schema `"null"` type to the SQL keyword `NULL` (which is a constraint, not a data type). Both now return `TEXT`.
52
+ - **DX (Plugins)**: removed `console.log` calls from `install()` and `uninstall()` in `custom-format`, `custom-validator`, and `custom-type-example` example plugins. Runtime error logging via `console.error` is preserved.
53
+ - **DX (SchemaUtils)**: added JSDoc to `SchemaUtils.validateBatch()` noting that it recompiles the schema on every call (no caching), with a recommendation to use `Validator.validateBatch()` for repeated validations of the same schema.
54
+
55
+ ---
56
+
57
+ ## [2.0.0] 2026-05-09
58
+
59
+ ### Breaking Changes (v1 v2)
60
+
61
+ - **BC-2**: `DslAdapter.parseObject()` now returns `ObjectDslBuilder` (chainable: `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`) instead of plain `JSONSchema`. Call `.toSchema()` to get the raw schema.
62
+ - **BC-4**: `DslAdapter.typeMap` is now a Proxy getter; `DslAdapter.registerType()` method added for direct registration.
63
+ - **BC-5**: `ConditionalBuilder.require(field)` method added for v1 field-requirement compatibility.
64
+ - **BC-6**: `Validator.validateAsync()` added; async custom validators in sync `validate()` now return `{ valid: false }` with an error message instead of silently passing.
65
+ - **BC-7**: `string:N` single-value DSL now expands to `{ minLength: N, maxLength: N }` (exactLength compat, consistent with v1 behavior).
66
+
67
+ ### New Features
68
+
69
+ - **ObjectDslBuilder**: New class wrapping object schemas; supports `.strict()`, `.requireAll()`, `.toSchema()`, `.toJsonSchema()`, `.toString()`.
70
+ - **validateAsync()**: Full async validation support with typed return (`Promise<T>`); throws `ValidationError` on failure.
71
+ - **installStringExtensions()**: Opt-in String.prototype extension; auto-installed at module load for v1 compatibility.
72
+
73
+ ### Documentation & Examples
74
+
75
+ - 58 example files in `examples/docs/` fully enriched (90–130+ lines each) with complete API coverage.
76
+ - All code comments translated to English (CJK locales and output strings preserved).
77
+ - `docs/api-reference.md`: fixed 4 doc inconsistencies (string:N behavior, validateAsync signature, LocaleMessage params, exactOptionalPropertyTypes notes).
78
+
79
+ ### Quality
80
+
81
+ - 1095 tests passing (75 test files).
82
+ - 0 TypeScript errors in source and examples.
83
+ - ESM + CJS dual format build.
84
+
85
+ ### Fixes
86
+
87
+ - **Security**: replace the custom regex ReDoS heuristic in `CustomKeywords` with `safe-regex`, so catastrophic patterns such as `((a)+)+$` are rejected before execution.
88
+ - **Validation**: stop caching `DslBuilder.toSchema()` results inside `Validator`, so chain mutations made after the first validation call are honored by both `validate()` and `validateAsync()`.
89
+ - **Validation**: make `ConditionalBuilder` cache `Validator` instances by constructor-level option set, so repeated calls with different `allErrors` / `useDefaults` configurations no longer reuse a stale validator.
90
+ - **Exporters**: fix MySQL integer sizing so `TypeConverter.toMySQLType()` checks both `minimum` and `maximum` before choosing `TINYINT` / `SMALLINT` / `INT`, avoiding undersized column types.
91
+ - **Exporters**: escape Markdown table cell content in `MarkdownExporter`, so field names, constraint text, and multiline descriptions containing `|` or newlines no longer break rendered tables.
92
+ - **Tests**: add focused regression coverage for unsafe regex rejection while preserving the existing invalid-regex error path.
93
+
94
+ ---
95
+
96
+ ## [Unreleased]
97
+
98
+ - docs: aligned 58-to-58 `docs/*.md` ↔ `examples/docs/*.ts` mapping, switched to stable example entry links
99
+ - docs: completed runnable coverage for advanced APIs in `api-reference`, added `ErrorFormatter` reference, corrected `FEATURE-INDEX` method descriptions
100
+ - chore: cleaned up legacy top-level `examples/*` entry paths, unified example entry points and `.tmp` workspace visibility
101
+
102
+ ---
103
+
104
+ ## Links
105
+
106
+ - [GitHub Repository](https://github.com/vextjs/schema-dsl)
107
+ - [Online Documentation](https://vextjs.github.io/schema-dsl)
108
+ - [Detailed Changelogs](./changelogs/)
109
+ - [Contributing Guide](./CONTRIBUTING.md)
110
+
111
+ [Unreleased]: https://github.com/vextjs/schema-dsl/compare/v2.0.1...HEAD
112
+ [2.0.1]: https://github.com/vextjs/schema-dsl/compare/v2.0.0...v2.0.1
113
+ [2.0.0]: https://github.com/vextjs/schema-dsl/compare/v2.0.0-beta.2...v2.0.0
114
+ [2.0.0-beta.2]: https://github.com/vextjs/schema-dsl/releases/tag/v2.0.0-beta.2
115
+ [v1.2.5]: https://github.com/vextjs/schema-dsl/compare/v1.2.4...v1.2.5
116
+ [v1.2.4]: https://github.com/vextjs/schema-dsl/compare/v1.2.3...v1.2.4
117
+ [v1.2.3]: https://github.com/vextjs/schema-dsl/compare/v1.2.2...v1.2.3
118
+ [v1.2.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.8...v1.2.2
119
+ [v1.1.8]: https://github.com/vextjs/schema-dsl/compare/v1.1.7...v1.1.8
120
+ [v1.1.7]: https://github.com/vextjs/schema-dsl/compare/v1.1.6...v1.1.7
121
+ [v1.1.6]: https://github.com/vextjs/schema-dsl/compare/v1.1.5...v1.1.6
122
+ [v1.1.5]: https://github.com/vextjs/schema-dsl/compare/v1.1.4...v1.1.5
123
+ [v1.1.4]: https://github.com/vextjs/schema-dsl/compare/v1.1.3...v1.1.4
124
+ [v1.1.3]: https://github.com/vextjs/schema-dsl/compare/v1.1.2...v1.1.3
125
+ [v1.1.2]: https://github.com/vextjs/schema-dsl/compare/v1.1.1...v1.1.2
126
+ [v1.1.1]: https://github.com/vextjs/schema-dsl/compare/v1.1.0...v1.1.1
127
+ [v1.1.0]: https://github.com/vextjs/schema-dsl/compare/v1.0.9...v1.1.0
128
+ [v1.0.9]: https://github.com/vextjs/schema-dsl/compare/v1.0.8...v1.0.9
129
+ [v1.0.0]: https://github.com/vextjs/schema-dsl/releases/tag/v1.0.0
130
+
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 vextjs
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 vextjs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.