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.
- package/CHANGELOG.md +130 -113
- package/LICENSE +21 -21
- package/README.md +628 -628
- package/dist/{DslBuilder-DkLaOo9Q.d.ts → DslBuilder-BIgQOAXp.d.ts} +2 -0
- package/dist/{DslBuilder-DQDN0ZxZ.d.cts → DslBuilder-CjHTucNQ.d.cts} +2 -0
- package/dist/{Validator-hFWKGxir.d.ts → Validator-CllRdrY0.d.ts} +1 -1
- package/dist/{Validator-C7GsVQOH.d.cts → Validator-D6okG9tr.d.cts} +1 -1
- package/dist/index.cjs +75 -29
- package/dist/index.d.cts +10 -4
- package/dist/index.d.ts +10 -4
- package/dist/index.js +75 -29
- package/dist/plugins/custom-format.cjs +33 -17
- package/dist/plugins/custom-format.d.cts +1 -1
- package/dist/plugins/custom-format.d.ts +1 -1
- package/dist/plugins/custom-format.js +33 -17
- package/dist/plugins/custom-type-example.cjs +33 -17
- package/dist/plugins/custom-type-example.d.cts +1 -1
- package/dist/plugins/custom-type-example.d.ts +1 -1
- package/dist/plugins/custom-type-example.js +33 -17
- package/dist/plugins/custom-validator.cjs +0 -2
- package/dist/plugins/custom-validator.d.cts +1 -1
- package/dist/plugins/custom-validator.d.ts +1 -1
- package/dist/plugins/custom-validator.js +0 -2
- package/docs/FEATURE-INDEX.md +553 -553
- package/docs/add-custom-locale.md +496 -496
- package/docs/add-keyword.md +24 -24
- package/docs/api-reference.md +1047 -1047
- package/docs/api.md +13 -13
- package/docs/best-practices-project-structure.md +417 -417
- package/docs/best-practices.md +712 -712
- package/docs/cache-manager.md +344 -344
- package/docs/compile.md +45 -45
- package/docs/conditional-api.md +1307 -1307
- package/docs/custom-extensions-guide.md +339 -339
- package/docs/design-philosophy.md +606 -606
- package/docs/doc-index.md +324 -324
- package/docs/dsl-syntax.md +714 -714
- package/docs/dynamic-locale.md +608 -608
- package/docs/enum.md +482 -482
- package/docs/error-handling.md +1975 -1975
- package/docs/export-guide.md +501 -501
- package/docs/export-limitations.md +567 -567
- package/docs/faq.md +596 -596
- package/docs/frontend-i18n-guide.md +307 -307
- package/docs/i18n-user-guide.md +487 -487
- package/docs/i18n.md +476 -476
- package/docs/index.md +48 -48
- package/docs/json-schema-basics.md +40 -40
- package/docs/label-vs-description.md +271 -271
- package/docs/markdown-exporter.md +406 -406
- package/docs/mongodb-exporter.md +302 -302
- package/docs/multi-language.md +26 -26
- package/docs/multi-type-support.md +322 -322
- package/docs/mysql-exporter.md +280 -280
- package/docs/number-operators.md +449 -449
- package/docs/optional-marker-guide.md +326 -326
- package/docs/performance-guide.md +49 -49
- package/docs/plugin-system.md +381 -381
- package/docs/plugin-type-registration.md +34 -34
- package/docs/postgresql-exporter.md +311 -311
- package/docs/public/favicon.svg +4 -4
- package/docs/quick-start.md +435 -435
- package/docs/runtime-locale-support.md +532 -532
- package/docs/schema-helper.md +345 -345
- package/docs/schema-utils-advanced-issues.md +23 -23
- package/docs/schema-utils-best-practices.md +20 -20
- package/docs/schema-utils-chaining.md +150 -150
- package/docs/schema-utils.md +524 -524
- package/docs/security-checklist.md +20 -20
- package/docs/string-extensions.md +488 -488
- package/docs/troubleshooting.md +486 -486
- package/docs/type-converter.md +310 -310
- package/docs/type-reference.md +242 -242
- package/docs/typescript-guide.md +584 -584
- package/docs/union-type-guide.md +157 -157
- package/docs/union-types.md +284 -284
- package/docs/validate-async.md +491 -491
- package/docs/validate-batch.md +49 -49
- package/docs/validate-dsl-object-support.md +578 -578
- package/docs/validate.md +506 -506
- package/docs/validation-guide.md +502 -502
- package/docs/validator.md +39 -39
- package/package.json +131 -131
- package/plugins/custom-format.cjs +8 -8
- package/plugins/custom-type-example.cjs +8 -8
- package/plugins/custom-validator.cjs +8 -8
- package/src/adapters/DslAdapter.ts +111 -111
- package/src/adapters/index.ts +1 -1
- package/src/config/constants.ts +83 -83
- package/src/config/index.ts +2 -2
- package/src/config/patterns.ts +77 -77
- package/src/core/CacheManager.ts +169 -159
- package/src/core/ConditionalBuilder.ts +382 -382
- package/src/core/ConditionalRuntime.ts +27 -27
- package/src/core/ConditionalValidator.ts +254 -254
- package/src/core/DslBuilder.ts +687 -677
- package/src/core/ErrorCodes.ts +38 -38
- package/src/core/ErrorFormatter.ts +271 -271
- package/src/core/JSONSchemaCore.ts +65 -65
- package/src/core/Locale.ts +187 -187
- package/src/core/MessageTemplate.ts +42 -42
- package/src/core/ObjectDslBuilder.ts +64 -64
- package/src/core/PluginManager.ts +326 -326
- package/src/core/StringExtensions.ts +140 -140
- package/src/core/TemplateEngine.ts +44 -44
- package/src/core/Validator.ts +448 -448
- package/src/errors/I18nError.ts +159 -159
- package/src/errors/ValidationError.ts +105 -105
- package/src/exporters/BaseExporter.ts +60 -60
- package/src/exporters/MarkdownExporter.ts +305 -305
- package/src/exporters/MongoDBExporter.ts +126 -126
- package/src/exporters/MySQLExporter.ts +156 -155
- package/src/exporters/PostgreSQLExporter.ts +222 -222
- package/src/exporters/index.ts +18 -18
- package/src/index.ts +651 -633
- package/src/locales/en-US.ts +160 -160
- package/src/locales/es-ES.ts +160 -160
- package/src/locales/fr-FR.ts +160 -160
- package/src/locales/index.ts +103 -103
- package/src/locales/ja-JP.ts +160 -160
- package/src/locales/types.ts +156 -156
- package/src/locales/zh-CN.ts +160 -160
- package/src/parser/ConstraintParser.ts +101 -101
- package/src/parser/DslParser.ts +470 -470
- package/src/parser/SchemaCompiler.ts +66 -66
- package/src/parser/TypeRegistry.ts +250 -250
- package/src/parser/index.ts +6 -6
- package/src/plugins/custom-format.ts +124 -126
- package/src/plugins/custom-type-example.ts +106 -108
- package/src/plugins/custom-validator.ts +138 -140
- package/src/types/conditional.ts +28 -28
- package/src/types/config.ts +59 -59
- package/src/types/dsl.ts +131 -131
- package/src/types/error.ts +60 -60
- package/src/types/index.ts +17 -17
- package/src/types/infer.ts +127 -127
- package/src/types/plugin.ts +58 -58
- package/src/types/safe-regex.d.ts +9 -9
- package/src/types/schema.ts +66 -66
- package/src/types/validate.ts +71 -71
- package/src/utils/SchemaHelper.ts +196 -196
- package/src/utils/SchemaUtils.ts +365 -346
- package/src/utils/TypeConverter.ts +215 -215
- package/src/utils/index.ts +10 -10
- package/src/validators/CustomKeywords.ts +477 -477
|
@@ -1,140 +1,138 @@
|
|
|
1
|
-
import type { KeywordDefinition } from 'ajv'
|
|
2
|
-
import type { Plugin } from '../types/plugin.js'
|
|
3
|
-
import type { Validator } from '../core/Validator.js'
|
|
4
|
-
|
|
5
|
-
function getValidator(core: unknown): Validator {
|
|
6
|
-
const coreRecord = core as { getDefaultValidator?: () => Validator }
|
|
7
|
-
const validator = coreRecord.getDefaultValidator?.()
|
|
8
|
-
if (!validator) {
|
|
9
|
-
throw new Error('getDefaultValidator() is not available. Please provide schema-dsl core object.')
|
|
10
|
-
}
|
|
11
|
-
return validator
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function getPluginBucket(): Record<string, unknown> {
|
|
15
|
-
const globalRecord = globalThis as typeof globalThis & {
|
|
16
|
-
__schemaDsl_plugins?: Record<string, unknown>
|
|
17
|
-
}
|
|
18
|
-
if (!globalRecord.__schemaDsl_plugins) {
|
|
19
|
-
globalRecord.__schemaDsl_plugins = {}
|
|
20
|
-
}
|
|
21
|
-
return globalRecord.__schemaDsl_plugins
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const customValidatorPlugin: Plugin & {
|
|
25
|
-
addCustomKeywords: (validator: Validator) => void
|
|
26
|
-
_validateIdCardChecksum: (idCard: string) => boolean
|
|
27
|
-
} = {
|
|
28
|
-
name: 'custom-validator',
|
|
29
|
-
version: '1.0.0',
|
|
30
|
-
description: 'Custom validator plugin — adds business-specific validation rules',
|
|
31
|
-
install(core, _options = {}, _context) {
|
|
32
|
-
const validator = getValidator(core)
|
|
33
|
-
this.addCustomKeywords(validator)
|
|
34
|
-
getPluginBucket()['custom-validator'] = this
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
async:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (!pattern)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
1
|
+
import type { KeywordDefinition } from 'ajv'
|
|
2
|
+
import type { Plugin } from '../types/plugin.js'
|
|
3
|
+
import type { Validator } from '../core/Validator.js'
|
|
4
|
+
|
|
5
|
+
function getValidator(core: unknown): Validator {
|
|
6
|
+
const coreRecord = core as { getDefaultValidator?: () => Validator }
|
|
7
|
+
const validator = coreRecord.getDefaultValidator?.()
|
|
8
|
+
if (!validator) {
|
|
9
|
+
throw new Error('getDefaultValidator() is not available. Please provide schema-dsl core object.')
|
|
10
|
+
}
|
|
11
|
+
return validator
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function getPluginBucket(): Record<string, unknown> {
|
|
15
|
+
const globalRecord = globalThis as typeof globalThis & {
|
|
16
|
+
__schemaDsl_plugins?: Record<string, unknown>
|
|
17
|
+
}
|
|
18
|
+
if (!globalRecord.__schemaDsl_plugins) {
|
|
19
|
+
globalRecord.__schemaDsl_plugins = {}
|
|
20
|
+
}
|
|
21
|
+
return globalRecord.__schemaDsl_plugins
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const customValidatorPlugin: Plugin & {
|
|
25
|
+
addCustomKeywords: (validator: Validator) => void
|
|
26
|
+
_validateIdCardChecksum: (idCard: string) => boolean
|
|
27
|
+
} = {
|
|
28
|
+
name: 'custom-validator',
|
|
29
|
+
version: '1.0.0',
|
|
30
|
+
description: 'Custom validator plugin — adds business-specific validation rules',
|
|
31
|
+
install(core, _options = {}, _context) {
|
|
32
|
+
const validator = getValidator(core)
|
|
33
|
+
this.addCustomKeywords(validator)
|
|
34
|
+
getPluginBucket()['custom-validator'] = this
|
|
35
|
+
},
|
|
36
|
+
uninstall() {
|
|
37
|
+
delete getPluginBucket()['custom-validator']
|
|
38
|
+
},
|
|
39
|
+
addCustomKeywords(validator) {
|
|
40
|
+
const ajv = validator.getAjv() as {
|
|
41
|
+
getKeyword?: (name: string) => unknown
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!ajv.getKeyword?.('unique')) {
|
|
45
|
+
validator.addKeyword('unique', {
|
|
46
|
+
async: true,
|
|
47
|
+
type: 'string',
|
|
48
|
+
validate: async function validateUnique(schema: unknown) {
|
|
49
|
+
if (!schema) return true
|
|
50
|
+
const { table, field } = schema as { table?: string; field?: string }
|
|
51
|
+
const exists = false
|
|
52
|
+
if (exists) {
|
|
53
|
+
;(validateUnique as typeof validateUnique & { errors?: unknown[] }).errors = [{
|
|
54
|
+
keyword: 'unique',
|
|
55
|
+
message: `${field} already exists in ${table}`,
|
|
56
|
+
params: { table, field },
|
|
57
|
+
}]
|
|
58
|
+
return false
|
|
59
|
+
}
|
|
60
|
+
return true
|
|
61
|
+
},
|
|
62
|
+
} as unknown as KeywordDefinition)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!ajv.getKeyword?.('passwordStrength')) {
|
|
66
|
+
validator.addKeyword('passwordStrength', {
|
|
67
|
+
type: 'string',
|
|
68
|
+
validate: function validatePasswordStrength(schema: unknown, data: unknown) {
|
|
69
|
+
if (!schema) return true
|
|
70
|
+
|
|
71
|
+
const strength = String(schema)
|
|
72
|
+
const value = String(data ?? '')
|
|
73
|
+
const rules: Record<string, RegExp> = {
|
|
74
|
+
weak: /^.{6,}$/,
|
|
75
|
+
medium: /^(?=.*[a-z])(?=.*[A-Z]).{8,}$/,
|
|
76
|
+
strong: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{10,}$/,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const pattern = rules[strength]
|
|
80
|
+
if (!pattern) return true
|
|
81
|
+
|
|
82
|
+
if (!pattern.test(value)) {
|
|
83
|
+
;(validatePasswordStrength as typeof validatePasswordStrength & { errors?: unknown[] }).errors = [{
|
|
84
|
+
keyword: 'passwordStrength',
|
|
85
|
+
message: `Password does not meet ${strength} strength requirements`,
|
|
86
|
+
params: { strength },
|
|
87
|
+
}]
|
|
88
|
+
return false
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return true
|
|
92
|
+
},
|
|
93
|
+
} as unknown as KeywordDefinition)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!ajv.getKeyword?.('idCard')) {
|
|
97
|
+
validator.addKeyword('idCard', {
|
|
98
|
+
type: 'string',
|
|
99
|
+
validate: (schema: unknown, data: unknown) => {
|
|
100
|
+
if (!schema) return true
|
|
101
|
+
|
|
102
|
+
const value = String(data ?? '')
|
|
103
|
+
const pattern = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/
|
|
104
|
+
|
|
105
|
+
if (!pattern.test(value)) {
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return customValidatorPlugin._validateIdCardChecksum(value)
|
|
110
|
+
},
|
|
111
|
+
} as unknown as KeywordDefinition)
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
_validateIdCardChecksum(idCard: string) {
|
|
115
|
+
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
|
116
|
+
const checksums = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
|
|
117
|
+
|
|
118
|
+
let sum = 0
|
|
119
|
+
for (let i = 0; i < 17; i += 1) {
|
|
120
|
+
sum += Number.parseInt(idCard[i], 10) * weights[i]
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const checksum = checksums[sum % 11]
|
|
124
|
+
return idCard[17].toUpperCase() === checksum
|
|
125
|
+
},
|
|
126
|
+
hooks: {
|
|
127
|
+
onBeforeValidate() {},
|
|
128
|
+
onAfterValidate() {},
|
|
129
|
+
onError(error) {
|
|
130
|
+
console.error('[custom-validator] Error:', (error as Error).message)
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export default customValidatorPlugin
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
package/src/types/conditional.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IConditionalBuilder interface (shape definition).
|
|
3
|
-
* Implementation class is in src/core/ConditionalBuilder.ts (Phase 8).
|
|
4
|
-
*/
|
|
5
|
-
import type { JSONSchema } from './schema.js'
|
|
6
|
-
import type { ValidationResult } from './validate.js'
|
|
7
|
-
|
|
8
|
-
export interface IConditionalBuilder {
|
|
9
|
-
and(condition: (data: unknown) => boolean): this
|
|
10
|
-
or(condition: (data: unknown) => boolean): this
|
|
11
|
-
/** then/else accept string DSL, JSONSchema, or null (no-op). */
|
|
12
|
-
then(schema: string | JSONSchema | null): this
|
|
13
|
-
else(schema: string | JSONSchema | null): this
|
|
14
|
-
elseIf(condition: (data: unknown) => boolean): this
|
|
15
|
-
message(msg: string): this
|
|
16
|
-
/** Serialise to a JSON Schema object (internal conditional marker). */
|
|
17
|
-
toSchema(): JSONSchema
|
|
18
|
-
/** Alias for toSchema(). */
|
|
19
|
-
build(): JSONSchema
|
|
20
|
-
/** Synchronous assertion; throws ValidationError on failure. */
|
|
21
|
-
assert(data: unknown, options?: Record<string, unknown>): unknown
|
|
22
|
-
/** Synchronous validation; returns ValidationResult. */
|
|
23
|
-
validate(data: unknown, options?: Record<string, unknown>): ValidationResult<unknown>
|
|
24
|
-
/** Async validation; returns Promise<ValidationResult>. */
|
|
25
|
-
validateAsync(data: unknown, options?: Record<string, unknown>): Promise<ValidationResult<unknown>>
|
|
26
|
-
/** Quick boolean check (no error details). */
|
|
27
|
-
check(data: unknown): boolean
|
|
28
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* IConditionalBuilder interface (shape definition).
|
|
3
|
+
* Implementation class is in src/core/ConditionalBuilder.ts (Phase 8).
|
|
4
|
+
*/
|
|
5
|
+
import type { JSONSchema } from './schema.js'
|
|
6
|
+
import type { ValidationResult } from './validate.js'
|
|
7
|
+
|
|
8
|
+
export interface IConditionalBuilder {
|
|
9
|
+
and(condition: (data: unknown) => boolean): this
|
|
10
|
+
or(condition: (data: unknown) => boolean): this
|
|
11
|
+
/** then/else accept string DSL, JSONSchema, or null (no-op). */
|
|
12
|
+
then(schema: string | JSONSchema | null): this
|
|
13
|
+
else(schema: string | JSONSchema | null): this
|
|
14
|
+
elseIf(condition: (data: unknown) => boolean): this
|
|
15
|
+
message(msg: string): this
|
|
16
|
+
/** Serialise to a JSON Schema object (internal conditional marker). */
|
|
17
|
+
toSchema(): JSONSchema
|
|
18
|
+
/** Alias for toSchema(). */
|
|
19
|
+
build(): JSONSchema
|
|
20
|
+
/** Synchronous assertion; throws ValidationError on failure. */
|
|
21
|
+
assert(data: unknown, options?: Record<string, unknown>): unknown
|
|
22
|
+
/** Synchronous validation; returns ValidationResult. */
|
|
23
|
+
validate(data: unknown, options?: Record<string, unknown>): ValidationResult<unknown>
|
|
24
|
+
/** Async validation; returns Promise<ValidationResult>. */
|
|
25
|
+
validateAsync(data: unknown, options?: Record<string, unknown>): Promise<ValidationResult<unknown>>
|
|
26
|
+
/** Quick boolean check (no error details). */
|
|
27
|
+
check(data: unknown): boolean
|
|
28
|
+
}
|
package/src/types/config.ts
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import type { ErrorMessages } from './error.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Cache configuration options.
|
|
5
|
-
* @alias CacheConfig — v1 BC alias exported from index
|
|
6
|
-
*/
|
|
7
|
-
export interface CacheOptions {
|
|
8
|
-
/** Maximum number of cache entries (default 5000). */
|
|
9
|
-
maxSize?: number
|
|
10
|
-
/** Cache TTL in milliseconds (0 = no expiry). */
|
|
11
|
-
ttl?: number
|
|
12
|
-
/** Whether caching is enabled. */
|
|
13
|
-
enabled?: boolean
|
|
14
|
-
/** Whether statistics are enabled (default true). */
|
|
15
|
-
statsEnabled?: boolean
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* I18n configuration type.
|
|
20
|
-
*/
|
|
21
|
-
export type I18nConfig =
|
|
22
|
-
| string // Path to locale directory (Node >=18: .js/.cjs/.json/.jsonc/.json5)
|
|
23
|
-
| Record<string, ErrorMessages> // Inline locale bundle
|
|
24
|
-
| { localesPath: string } // Locale directory — object form (Node >=18: .js/.cjs/.json/.jsonc/.json5)
|
|
25
|
-
| { locales: Record<string, ErrorMessages> } // v1/doc-compatible wrapper
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* dsl.config() options.
|
|
29
|
-
*/
|
|
30
|
-
export interface DslConfigOptions {
|
|
31
|
-
/** Internationalisation config. */
|
|
32
|
-
i18n?: I18nConfig
|
|
33
|
-
/** Cache config. */
|
|
34
|
-
cache?: CacheOptions
|
|
35
|
-
/** Custom validation rule extensions. */
|
|
36
|
-
patterns?: {
|
|
37
|
-
phone?: Record<string, RegExp>
|
|
38
|
-
idCard?: Record<string, RegExp>
|
|
39
|
-
creditCard?: Record<string, RegExp>
|
|
40
|
-
[key: string]: Record<string, RegExp> | undefined
|
|
41
|
-
}
|
|
42
|
-
/** Default locale (default 'en-US'). */
|
|
43
|
-
defaultLocale?: string
|
|
44
|
-
/** Strict type resolution: throw on unknown types instead of warn + fallback to string. */
|
|
45
|
-
strict?: boolean
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* ValidatorOptions (Validator class constructor parameters).
|
|
50
|
-
*/
|
|
51
|
-
export interface ValidatorOptions {
|
|
52
|
-
allErrors?: boolean
|
|
53
|
-
verbose?: boolean
|
|
54
|
-
strict?: boolean
|
|
55
|
-
coerceTypes?: boolean | 'array'
|
|
56
|
-
removeAdditional?: boolean | 'all' | 'failing'
|
|
57
|
-
useDefaults?: boolean
|
|
58
|
-
cache?: boolean | CacheOptions
|
|
59
|
-
}
|
|
1
|
+
import type { ErrorMessages } from './error.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Cache configuration options.
|
|
5
|
+
* @alias CacheConfig — v1 BC alias exported from index
|
|
6
|
+
*/
|
|
7
|
+
export interface CacheOptions {
|
|
8
|
+
/** Maximum number of cache entries (default 5000). */
|
|
9
|
+
maxSize?: number
|
|
10
|
+
/** Cache TTL in milliseconds (0 = no expiry). */
|
|
11
|
+
ttl?: number
|
|
12
|
+
/** Whether caching is enabled. */
|
|
13
|
+
enabled?: boolean
|
|
14
|
+
/** Whether statistics are enabled (default true). */
|
|
15
|
+
statsEnabled?: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* I18n configuration type.
|
|
20
|
+
*/
|
|
21
|
+
export type I18nConfig =
|
|
22
|
+
| string // Path to locale directory (Node >=18: .js/.cjs/.json/.jsonc/.json5)
|
|
23
|
+
| Record<string, ErrorMessages> // Inline locale bundle
|
|
24
|
+
| { localesPath: string } // Locale directory — object form (Node >=18: .js/.cjs/.json/.jsonc/.json5)
|
|
25
|
+
| { locales: Record<string, ErrorMessages> } // v1/doc-compatible wrapper
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* dsl.config() options.
|
|
29
|
+
*/
|
|
30
|
+
export interface DslConfigOptions {
|
|
31
|
+
/** Internationalisation config. */
|
|
32
|
+
i18n?: I18nConfig
|
|
33
|
+
/** Cache config. */
|
|
34
|
+
cache?: CacheOptions
|
|
35
|
+
/** Custom validation rule extensions. */
|
|
36
|
+
patterns?: {
|
|
37
|
+
phone?: Record<string, RegExp>
|
|
38
|
+
idCard?: Record<string, RegExp>
|
|
39
|
+
creditCard?: Record<string, RegExp>
|
|
40
|
+
[key: string]: Record<string, RegExp> | undefined
|
|
41
|
+
}
|
|
42
|
+
/** Default locale (default 'en-US'). */
|
|
43
|
+
defaultLocale?: string
|
|
44
|
+
/** Strict type resolution: throw on unknown types instead of warn + fallback to string. */
|
|
45
|
+
strict?: boolean
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* ValidatorOptions (Validator class constructor parameters).
|
|
50
|
+
*/
|
|
51
|
+
export interface ValidatorOptions {
|
|
52
|
+
allErrors?: boolean
|
|
53
|
+
verbose?: boolean
|
|
54
|
+
strict?: boolean
|
|
55
|
+
coerceTypes?: boolean | 'array'
|
|
56
|
+
removeAdditional?: boolean | 'all' | 'failing'
|
|
57
|
+
useDefaults?: boolean
|
|
58
|
+
cache?: boolean | CacheOptions
|
|
59
|
+
}
|