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
@@ -1,128 +1,128 @@
1
- type StripMarker<S extends string> = S extends `${infer Base}!` | `${infer Base}?` ? Base : S
2
-
3
- type KnownDslType =
4
- | 'string'
5
- | 'email'
6
- | 'url'
7
- | 'uri'
8
- | 'uuid'
9
- | 'ipv4'
10
- | 'ipv6'
11
- | 'ip'
12
- | 'hostname'
13
- | 'date'
14
- | 'datetime'
15
- | 'time'
16
- | 'binary'
17
- | 'objectId'
18
- | 'hexColor'
19
- | 'macAddress'
20
- | 'cron'
21
- | 'slug'
22
- | 'chineseName'
23
- | 'chinese'
24
- | 'emailDomain'
25
- | 'alphanum'
26
- | 'lower'
27
- | 'upper'
28
- | 'json'
29
- | 'port'
30
- | 'number'
31
- | 'integer'
32
- | 'boolean'
33
- | 'object'
34
- | 'array'
35
- | 'null'
36
- | 'any'
37
-
38
- type InferPipeMember<S extends string> = StripMarker<S> extends KnownDslType ? InferDslString<S> : StripMarker<S>
39
-
40
- type SplitPipe<S extends string> = S extends `${infer Head}|${infer Tail}`
41
- ? InferPipeMember<Head> | SplitPipe<Tail>
42
- : InferPipeMember<S>
43
-
44
- type RequiredDslKeys<T extends Record<string, unknown>> = {
45
- [K in keyof T]: K extends string
46
- ? K extends `${infer Name}!`
47
- ? Name
48
- : T[K] extends `${string}!`
49
- ? K
50
- : never
51
- : never
52
- }[keyof T]
53
-
54
- type CleanDslKey<K> = K extends `${infer Name}!` | `${infer Name}?` ? Name : K
55
-
56
- type InferJsonSchemaProperties<Properties, RequiredKeys extends PropertyKey> =
57
- & {
58
- [K in keyof Properties as K extends RequiredKeys ? K : never]-?: InferSchema<Properties[K]>
59
- }
60
- & {
61
- [K in keyof Properties as K extends RequiredKeys ? never : K]?: InferSchema<Properties[K]>
62
- }
63
-
64
- type InferDslProperties<T extends Record<string, unknown>, RequiredKeys extends PropertyKey = RequiredDslKeys<T>> =
65
- & {
66
- [K in keyof T as CleanDslKey<K> extends RequiredKeys ? CleanDslKey<K> : never]-?: InferSchema<T[K]>
67
- }
68
- & {
69
- [K in keyof T as CleanDslKey<K> extends RequiredKeys ? never : CleanDslKey<K>]?: InferSchema<T[K]>
70
- }
71
-
72
- export type InferDslString<T extends string> = StripMarker<T> extends `types:${infer Rest}`
73
- ? SplitPipe<Rest>
74
- : StripMarker<T> extends `enum:${infer Values}`
75
- ? SplitPipe<Values>
76
- : StripMarker<T> extends `array<${infer Item}>`
77
- ? InferDslString<Item>[]
78
- : StripMarker<T> extends `${infer Base}:${string}`
79
- ? InferDslString<Base>
80
- : StripMarker<T> extends 'number' | 'integer' | 'port'
81
- ? number
82
- : StripMarker<T> extends 'boolean'
83
- ? boolean
84
- : StripMarker<T> extends 'object'
85
- ? Record<string, unknown>
86
- : StripMarker<T> extends 'array'
87
- ? unknown[]
88
- : StripMarker<T> extends 'null'
89
- ? null
90
- : StripMarker<T> extends 'any'
91
- ? unknown
92
- : StripMarker<T> extends `${string}|${string}`
93
- ? SplitPipe<StripMarker<T>>
94
- : string
95
-
96
- export type InferJsonSchema<T> = T extends { oneOf: readonly (infer Variant)[] }
97
- ? InferSchema<Variant>
98
- : T extends { anyOf: readonly (infer Variant)[] }
99
- ? InferSchema<Variant>
100
- : T extends { enum: readonly (infer Value)[] }
101
- ? Value
102
- : T extends { type: 'object'; properties: infer Properties; required?: readonly (infer RequiredKey)[] }
103
- ? InferJsonSchemaProperties<Properties, Extract<RequiredKey, keyof Properties>>
104
- : T extends { type: 'array'; items: infer Item }
105
- ? InferSchema<Item>[]
106
- : T extends { type: 'number' | 'integer' }
107
- ? number
108
- : T extends { type: 'boolean' }
109
- ? boolean
110
- : T extends { type: 'null' }
111
- ? null
112
- : T extends { type: 'object' }
113
- ? Record<string, unknown>
114
- : T extends { type: 'array' }
115
- ? unknown[]
116
- : T extends { type: 'string' }
117
- ? string
118
- : unknown
119
-
120
- export type InferDslDefinition<T extends Record<string, unknown>> = InferDslProperties<T>
121
-
122
- export type InferSchema<T> = T extends string
123
- ? InferDslString<T>
124
- : T extends { type: unknown } | { properties: unknown } | { oneOf: unknown } | { anyOf: unknown } | { enum: unknown }
125
- ? InferJsonSchema<T>
126
- : T extends Record<string, unknown>
127
- ? InferDslDefinition<T>
1
+ type StripMarker<S extends string> = S extends `${infer Base}!` | `${infer Base}?` ? Base : S
2
+
3
+ type KnownDslType =
4
+ | 'string'
5
+ | 'email'
6
+ | 'url'
7
+ | 'uri'
8
+ | 'uuid'
9
+ | 'ipv4'
10
+ | 'ipv6'
11
+ | 'ip'
12
+ | 'hostname'
13
+ | 'date'
14
+ | 'datetime'
15
+ | 'time'
16
+ | 'binary'
17
+ | 'objectId'
18
+ | 'hexColor'
19
+ | 'macAddress'
20
+ | 'cron'
21
+ | 'slug'
22
+ | 'chineseName'
23
+ | 'chinese'
24
+ | 'emailDomain'
25
+ | 'alphanum'
26
+ | 'lower'
27
+ | 'upper'
28
+ | 'json'
29
+ | 'port'
30
+ | 'number'
31
+ | 'integer'
32
+ | 'boolean'
33
+ | 'object'
34
+ | 'array'
35
+ | 'null'
36
+ | 'any'
37
+
38
+ type InferPipeMember<S extends string> = StripMarker<S> extends KnownDslType ? InferDslString<S> : StripMarker<S>
39
+
40
+ type SplitPipe<S extends string> = S extends `${infer Head}|${infer Tail}`
41
+ ? InferPipeMember<Head> | SplitPipe<Tail>
42
+ : InferPipeMember<S>
43
+
44
+ type RequiredDslKeys<T extends Record<string, unknown>> = {
45
+ [K in keyof T]: K extends string
46
+ ? K extends `${infer Name}!`
47
+ ? Name
48
+ : T[K] extends `${string}!`
49
+ ? K
50
+ : never
51
+ : never
52
+ }[keyof T]
53
+
54
+ type CleanDslKey<K> = K extends `${infer Name}!` | `${infer Name}?` ? Name : K
55
+
56
+ type InferJsonSchemaProperties<Properties, RequiredKeys extends PropertyKey> =
57
+ & {
58
+ [K in keyof Properties as K extends RequiredKeys ? K : never]-?: InferSchema<Properties[K]>
59
+ }
60
+ & {
61
+ [K in keyof Properties as K extends RequiredKeys ? never : K]?: InferSchema<Properties[K]>
62
+ }
63
+
64
+ type InferDslProperties<T extends Record<string, unknown>, RequiredKeys extends PropertyKey = RequiredDslKeys<T>> =
65
+ & {
66
+ [K in keyof T as CleanDslKey<K> extends RequiredKeys ? CleanDslKey<K> : never]-?: InferSchema<T[K]>
67
+ }
68
+ & {
69
+ [K in keyof T as CleanDslKey<K> extends RequiredKeys ? never : CleanDslKey<K>]?: InferSchema<T[K]>
70
+ }
71
+
72
+ export type InferDslString<T extends string> = StripMarker<T> extends `types:${infer Rest}`
73
+ ? SplitPipe<Rest>
74
+ : StripMarker<T> extends `enum:${infer Values}`
75
+ ? SplitPipe<Values>
76
+ : StripMarker<T> extends `array<${infer Item}>`
77
+ ? InferDslString<Item>[]
78
+ : StripMarker<T> extends `${infer Base}:${string}`
79
+ ? InferDslString<Base>
80
+ : StripMarker<T> extends 'number' | 'integer' | 'port'
81
+ ? number
82
+ : StripMarker<T> extends 'boolean'
83
+ ? boolean
84
+ : StripMarker<T> extends 'object'
85
+ ? Record<string, unknown>
86
+ : StripMarker<T> extends 'array'
87
+ ? unknown[]
88
+ : StripMarker<T> extends 'null'
89
+ ? null
90
+ : StripMarker<T> extends 'any'
91
+ ? unknown
92
+ : StripMarker<T> extends `${string}|${string}`
93
+ ? SplitPipe<StripMarker<T>>
94
+ : string
95
+
96
+ export type InferJsonSchema<T> = T extends { oneOf: readonly (infer Variant)[] }
97
+ ? InferSchema<Variant>
98
+ : T extends { anyOf: readonly (infer Variant)[] }
99
+ ? InferSchema<Variant>
100
+ : T extends { enum: readonly (infer Value)[] }
101
+ ? Value
102
+ : T extends { type: 'object'; properties: infer Properties; required?: readonly (infer RequiredKey)[] }
103
+ ? InferJsonSchemaProperties<Properties, Extract<RequiredKey, keyof Properties>>
104
+ : T extends { type: 'array'; items: infer Item }
105
+ ? InferSchema<Item>[]
106
+ : T extends { type: 'number' | 'integer' }
107
+ ? number
108
+ : T extends { type: 'boolean' }
109
+ ? boolean
110
+ : T extends { type: 'null' }
111
+ ? null
112
+ : T extends { type: 'object' }
113
+ ? Record<string, unknown>
114
+ : T extends { type: 'array' }
115
+ ? unknown[]
116
+ : T extends { type: 'string' }
117
+ ? string
118
+ : unknown
119
+
120
+ export type InferDslDefinition<T extends Record<string, unknown>> = InferDslProperties<T>
121
+
122
+ export type InferSchema<T> = T extends string
123
+ ? InferDslString<T>
124
+ : T extends { type: unknown } | { properties: unknown } | { oneOf: unknown } | { anyOf: unknown } | { enum: unknown }
125
+ ? InferJsonSchema<T>
126
+ : T extends Record<string, unknown>
127
+ ? InferDslDefinition<T>
128
128
  : unknown
@@ -1,58 +1,58 @@
1
- /**
2
- * Built-in hook names (pipeline execution phases).
3
- */
4
- export type HookName =
5
- | 'beforeParse'
6
- | 'afterParse'
7
- | 'beforeCompile'
8
- | 'afterCompile'
9
- | 'beforeValidate'
10
- | 'afterValidate'
11
- | 'onError'
12
-
13
- /**
14
- * Hook function type (accepts arbitrary arguments; compatible with v1 custom hook names).
15
- */
16
- export type HookFn = (...args: unknown[]) => unknown | Promise<unknown>
17
-
18
- /**
19
- * Hook context (passed to built-in hooks).
20
- */
21
- export interface HookContext {
22
- /** Current hook phase. */
23
- hook: HookName
24
- /** Data being processed. */
25
- data?: unknown
26
- /** DSL definition. */
27
- schema?: unknown
28
- /** Additional metadata. */
29
- meta?: Record<string, unknown>
30
- }
31
-
32
- /**
33
- * Plugin interface (backwards-compatible with v1).
34
- */
35
- export interface Plugin {
36
- /** Plugin name. */
37
- name: string
38
- /** Plugin version. */
39
- version?: string
40
- /** Plugin description. */
41
- description?: string
42
- /** Plugin options (passed as the second argument to install). */
43
- options?: Record<string, unknown>
44
- /** Plugin hook map (supports arbitrary hook names for v1 compatibility). */
45
- hooks?: Record<string, HookFn>
46
- /** Install method. */
47
- install?(core: unknown, options?: unknown, context?: unknown): void
48
- /** Uninstall method (optional). */
49
- uninstall?(core?: unknown, context?: unknown): void
50
- }
51
-
52
- /**
53
- * PluginManager configuration.
54
- */
55
- export interface PluginManagerOptions {
56
- /** Whether hooks are executed asynchronously (default true). */
57
- async?: boolean
58
- }
1
+ /**
2
+ * Built-in hook names (pipeline execution phases).
3
+ */
4
+ export type HookName =
5
+ | 'beforeParse'
6
+ | 'afterParse'
7
+ | 'beforeCompile'
8
+ | 'afterCompile'
9
+ | 'beforeValidate'
10
+ | 'afterValidate'
11
+ | 'onError'
12
+
13
+ /**
14
+ * Hook function type (accepts arbitrary arguments; compatible with v1 custom hook names).
15
+ */
16
+ export type HookFn = (...args: unknown[]) => unknown | Promise<unknown>
17
+
18
+ /**
19
+ * Hook context (passed to built-in hooks).
20
+ */
21
+ export interface HookContext {
22
+ /** Current hook phase. */
23
+ hook: HookName
24
+ /** Data being processed. */
25
+ data?: unknown
26
+ /** DSL definition. */
27
+ schema?: unknown
28
+ /** Additional metadata. */
29
+ meta?: Record<string, unknown>
30
+ }
31
+
32
+ /**
33
+ * Plugin interface (backwards-compatible with v1).
34
+ */
35
+ export interface Plugin {
36
+ /** Plugin name. */
37
+ name: string
38
+ /** Plugin version. */
39
+ version?: string
40
+ /** Plugin description. */
41
+ description?: string
42
+ /** Plugin options (passed as the second argument to install). */
43
+ options?: Record<string, unknown>
44
+ /** Plugin hook map (supports arbitrary hook names for v1 compatibility). */
45
+ hooks?: Record<string, HookFn>
46
+ /** Install method. */
47
+ install?(core: unknown, options?: unknown, context?: unknown): void
48
+ /** Uninstall method (optional). */
49
+ uninstall?(core?: unknown, context?: unknown): void
50
+ }
51
+
52
+ /**
53
+ * PluginManager configuration.
54
+ */
55
+ export interface PluginManagerOptions {
56
+ /** Whether hooks are executed asynchronously (default true). */
57
+ async?: boolean
58
+ }
@@ -1,9 +1,9 @@
1
- declare module 'safe-regex' {
2
- interface SafeRegexOptions {
3
- limit?: number
4
- }
5
-
6
- export default function safeRegex(pattern: string | RegExp, options?: SafeRegexOptions): boolean
7
- }
8
-
9
-
1
+ declare module 'safe-regex' {
2
+ interface SafeRegexOptions {
3
+ limit?: number
4
+ }
5
+
6
+ export default function safeRegex(pattern: string | RegExp, options?: SafeRegexOptions): boolean
7
+ }
8
+
9
+
@@ -1,66 +1,66 @@
1
- /**
2
- * JSON Schema Draft 7 type definitions.
3
- * Includes schema-dsl internal keys (prefixed with _; stripped by toJsonSchema()).
4
- */
5
- import type { ErrorMessages } from './error.js'
6
-
7
- export interface JSONSchema {
8
- // --- Standard JSON Schema Draft 7 fields ---
9
- type?: string | string[]
10
- properties?: Record<string, JSONSchema>
11
- required?: string[]
12
- minLength?: number
13
- maxLength?: number
14
- minimum?: number
15
- maximum?: number
16
- exclusiveMinimum?: number | boolean
17
- exclusiveMaximum?: number | boolean
18
- multipleOf?: number
19
- pattern?: string
20
- format?: string
21
- enum?: unknown[]
22
- const?: unknown
23
- items?: JSONSchema | JSONSchema[]
24
- minItems?: number
25
- maxItems?: number
26
- uniqueItems?: boolean
27
- additionalProperties?: boolean | JSONSchema
28
- allOf?: JSONSchema[]
29
- anyOf?: JSONSchema[]
30
- oneOf?: JSONSchema[]
31
- not?: JSONSchema
32
- if?: JSONSchema
33
- then?: JSONSchema
34
- else?: JSONSchema
35
- title?: string
36
- description?: string
37
- default?: unknown
38
- examples?: unknown[]
39
- $ref?: string
40
- $schema?: string
41
- $id?: string
42
- definitions?: Record<string, JSONSchema>
43
- $defs?: Record<string, JSONSchema>
44
-
45
- // --- schema-dsl internal keys (used during parsing; stripped on output) ---
46
- _label?: string
47
- _customMessages?: Record<string, string>
48
- _description?: string
49
- _required?: boolean
50
-
51
- // Allows custom keyword extensions (AJV custom keywords)
52
- [key: string]: unknown
53
- }
54
-
55
- /**
56
- * SchemaIO configuration options (backwards-compatible with v1).
57
- */
58
- export interface SchemaIOOptions {
59
- allErrors?: boolean
60
- verbose?: boolean
61
- messages?: ErrorMessages
62
- locale?: string
63
- cache?: boolean
64
- cacheSize?: number
65
- [key: string]: unknown
66
- }
1
+ /**
2
+ * JSON Schema Draft 7 type definitions.
3
+ * Includes schema-dsl internal keys (prefixed with _; stripped by toJsonSchema()).
4
+ */
5
+ import type { ErrorMessages } from './error.js'
6
+
7
+ export interface JSONSchema {
8
+ // --- Standard JSON Schema Draft 7 fields ---
9
+ type?: string | string[]
10
+ properties?: Record<string, JSONSchema>
11
+ required?: string[]
12
+ minLength?: number
13
+ maxLength?: number
14
+ minimum?: number
15
+ maximum?: number
16
+ exclusiveMinimum?: number | boolean
17
+ exclusiveMaximum?: number | boolean
18
+ multipleOf?: number
19
+ pattern?: string
20
+ format?: string
21
+ enum?: unknown[]
22
+ const?: unknown
23
+ items?: JSONSchema | JSONSchema[]
24
+ minItems?: number
25
+ maxItems?: number
26
+ uniqueItems?: boolean
27
+ additionalProperties?: boolean | JSONSchema
28
+ allOf?: JSONSchema[]
29
+ anyOf?: JSONSchema[]
30
+ oneOf?: JSONSchema[]
31
+ not?: JSONSchema
32
+ if?: JSONSchema
33
+ then?: JSONSchema
34
+ else?: JSONSchema
35
+ title?: string
36
+ description?: string
37
+ default?: unknown
38
+ examples?: unknown[]
39
+ $ref?: string
40
+ $schema?: string
41
+ $id?: string
42
+ definitions?: Record<string, JSONSchema>
43
+ $defs?: Record<string, JSONSchema>
44
+
45
+ // --- schema-dsl internal keys (used during parsing; stripped on output) ---
46
+ _label?: string
47
+ _customMessages?: Record<string, string>
48
+ _description?: string
49
+ _required?: boolean
50
+
51
+ // Allows custom keyword extensions (AJV custom keywords)
52
+ [key: string]: unknown
53
+ }
54
+
55
+ /**
56
+ * SchemaIO configuration options (backwards-compatible with v1).
57
+ */
58
+ export interface SchemaIOOptions {
59
+ allErrors?: boolean
60
+ verbose?: boolean
61
+ messages?: ErrorMessages
62
+ locale?: string
63
+ cache?: boolean
64
+ cacheSize?: number
65
+ [key: string]: unknown
66
+ }
@@ -1,71 +1,71 @@
1
- /**
2
- * Validation options.
3
- */
4
- import type { CacheOptions } from './config.js'
5
- import type { ErrorMessages } from './error.js'
6
-
7
- export interface ValidateOptions {
8
- /** Whether to format errors (default true). */
9
- format?: boolean
10
- /** Whether to return all errors (default false — only the first). */
11
- allErrors?: boolean
12
- /** Dynamically specify a locale (e.g. 'zh-CN', 'en-US', 'ja-JP', 'es-ES', 'fr-FR'). */
13
- locale?: string
14
- /** Custom error messages. */
15
- messages?: ErrorMessages
16
- /** Whether to enable smart type coercion (auto-converts string → number etc.). */
17
- smartCoerce?: boolean
18
- /** Whether to remove additional properties. */
19
- removeAdditional?: boolean | 'all' | 'failing'
20
- /** Whether to enable caching. */
21
- cache?: boolean | CacheOptions
22
- /** Whether to enable strict mode. */
23
- strict?: boolean
24
- [key: string]: unknown
25
- }
26
-
27
- /**
28
- * Validation result.
29
- */
30
- export interface ValidationResult<T = unknown> {
31
- /** Whether validation passed. */
32
- valid: boolean
33
- /** Snapshot of the data after validation (returned on both success and failure; useful for locating input on failure). */
34
- data?: T
35
- /** Error list (empty array on success; detailed errors on failure). */
36
- errors?: ValidationErrorItem[]
37
- /** First error message (convenience accessor). */
38
- errorMessage?: string
39
- }
40
-
41
- /**
42
- * Validation error item (element of ValidationResult.errors).
43
- */
44
- export interface ValidationErrorItem {
45
- /** Error message. */
46
- message: string
47
- /** Error field path (dot-separated, e.g. 'user.email'). */
48
- path: string
49
- /** Validation keyword (min, max, email, pattern, etc.). */
50
- keyword: string
51
- /** Validation parameters. */
52
- params?: Record<string, unknown>
53
- /** Alias for path (backwards compatibility). */
54
- field?: string
55
- /** Alias for keyword (backwards-compatible with v1 err.type). */
56
- type?: string | undefined
57
- /** Expected type (backwards-compatible with v1 err.expected; only present for type errors). */
58
- expected?: string | undefined
59
- }
60
-
61
- /**
62
- * Raw AJV error object type (internal use).
63
- */
64
- export interface AjvError {
65
- keyword: string
66
- instancePath: string
67
- schemaPath: string
68
- params: Record<string, unknown>
69
- message?: string
70
- data?: unknown
71
- }
1
+ /**
2
+ * Validation options.
3
+ */
4
+ import type { CacheOptions } from './config.js'
5
+ import type { ErrorMessages } from './error.js'
6
+
7
+ export interface ValidateOptions {
8
+ /** Whether to format errors (default true). */
9
+ format?: boolean
10
+ /** Whether to return all errors (default false — only the first). */
11
+ allErrors?: boolean
12
+ /** Dynamically specify a locale (e.g. 'zh-CN', 'en-US', 'ja-JP', 'es-ES', 'fr-FR'). */
13
+ locale?: string
14
+ /** Custom error messages. */
15
+ messages?: ErrorMessages
16
+ /** Whether to enable smart type coercion (auto-converts string → number etc.). */
17
+ smartCoerce?: boolean
18
+ /** Whether to remove additional properties. */
19
+ removeAdditional?: boolean | 'all' | 'failing'
20
+ /** Whether to enable caching. */
21
+ cache?: boolean | CacheOptions
22
+ /** Whether to enable strict mode. */
23
+ strict?: boolean
24
+ [key: string]: unknown
25
+ }
26
+
27
+ /**
28
+ * Validation result.
29
+ */
30
+ export interface ValidationResult<T = unknown> {
31
+ /** Whether validation passed. */
32
+ valid: boolean
33
+ /** Snapshot of the data after validation (returned on both success and failure; useful for locating input on failure). */
34
+ data?: T
35
+ /** Error list (empty array on success; detailed errors on failure). */
36
+ errors?: ValidationErrorItem[]
37
+ /** First error message (convenience accessor). */
38
+ errorMessage?: string
39
+ }
40
+
41
+ /**
42
+ * Validation error item (element of ValidationResult.errors).
43
+ */
44
+ export interface ValidationErrorItem {
45
+ /** Error message. */
46
+ message: string
47
+ /** Error field path (dot-separated, e.g. 'user.email'). */
48
+ path: string
49
+ /** Validation keyword (min, max, email, pattern, etc.). */
50
+ keyword: string
51
+ /** Validation parameters. */
52
+ params?: Record<string, unknown>
53
+ /** Alias for path (backwards compatibility). */
54
+ field?: string
55
+ /** Alias for keyword (backwards-compatible with v1 err.type). */
56
+ type?: string | undefined
57
+ /** Expected type (backwards-compatible with v1 err.expected; only present for type errors). */
58
+ expected?: string | undefined
59
+ }
60
+
61
+ /**
62
+ * Raw AJV error object type (internal use).
63
+ */
64
+ export interface AjvError {
65
+ keyword: string
66
+ instancePath: string
67
+ schemaPath: string
68
+ params: Record<string, unknown>
69
+ message?: string
70
+ data?: unknown
71
+ }