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,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/plugins/custom-validator.ts
|
|
21
|
+
var custom_validator_exports = {};
|
|
22
|
+
__export(custom_validator_exports, {
|
|
23
|
+
customValidatorPlugin: () => customValidatorPlugin,
|
|
24
|
+
default: () => custom_validator_default
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(custom_validator_exports);
|
|
27
|
+
function getValidator(core) {
|
|
28
|
+
const coreRecord = core;
|
|
29
|
+
const validator = coreRecord.getDefaultValidator?.();
|
|
30
|
+
if (!validator) {
|
|
31
|
+
throw new Error("getDefaultValidator() is not available. Please provide schema-dsl core object.");
|
|
32
|
+
}
|
|
33
|
+
return validator;
|
|
34
|
+
}
|
|
35
|
+
function getPluginBucket() {
|
|
36
|
+
const globalRecord = globalThis;
|
|
37
|
+
if (!globalRecord.__schemaDsl_plugins) {
|
|
38
|
+
globalRecord.__schemaDsl_plugins = {};
|
|
39
|
+
}
|
|
40
|
+
return globalRecord.__schemaDsl_plugins;
|
|
41
|
+
}
|
|
42
|
+
var customValidatorPlugin = {
|
|
43
|
+
name: "custom-validator",
|
|
44
|
+
version: "1.0.0",
|
|
45
|
+
description: "Custom validator plugin \u2014 adds business-specific validation rules",
|
|
46
|
+
install(core, _options = {}, _context) {
|
|
47
|
+
const validator = getValidator(core);
|
|
48
|
+
this.addCustomKeywords(validator);
|
|
49
|
+
getPluginBucket()["custom-validator"] = this;
|
|
50
|
+
},
|
|
51
|
+
uninstall() {
|
|
52
|
+
delete getPluginBucket()["custom-validator"];
|
|
53
|
+
},
|
|
54
|
+
addCustomKeywords(validator) {
|
|
55
|
+
const ajv = validator.getAjv();
|
|
56
|
+
if (!ajv.getKeyword?.("unique")) {
|
|
57
|
+
validator.addKeyword("unique", {
|
|
58
|
+
async: true,
|
|
59
|
+
type: "string",
|
|
60
|
+
validate: async function validateUnique(schema) {
|
|
61
|
+
if (!schema) return true;
|
|
62
|
+
const { table, field } = schema;
|
|
63
|
+
const exists = false;
|
|
64
|
+
if (exists) {
|
|
65
|
+
;
|
|
66
|
+
validateUnique.errors = [{
|
|
67
|
+
keyword: "unique",
|
|
68
|
+
message: `${field} already exists in ${table}`,
|
|
69
|
+
params: { table, field }
|
|
70
|
+
}];
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (!ajv.getKeyword?.("passwordStrength")) {
|
|
78
|
+
validator.addKeyword("passwordStrength", {
|
|
79
|
+
type: "string",
|
|
80
|
+
validate: function validatePasswordStrength(schema, data) {
|
|
81
|
+
if (!schema) return true;
|
|
82
|
+
const strength = String(schema);
|
|
83
|
+
const value = String(data ?? "");
|
|
84
|
+
const rules = {
|
|
85
|
+
weak: /^.{6,}$/,
|
|
86
|
+
medium: /^(?=.*[a-z])(?=.*[A-Z]).{8,}$/,
|
|
87
|
+
strong: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{10,}$/
|
|
88
|
+
};
|
|
89
|
+
const pattern = rules[strength];
|
|
90
|
+
if (!pattern) return true;
|
|
91
|
+
if (!pattern.test(value)) {
|
|
92
|
+
;
|
|
93
|
+
validatePasswordStrength.errors = [{
|
|
94
|
+
keyword: "passwordStrength",
|
|
95
|
+
message: `Password does not meet ${strength} strength requirements`,
|
|
96
|
+
params: { strength }
|
|
97
|
+
}];
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (!ajv.getKeyword?.("idCard")) {
|
|
105
|
+
validator.addKeyword("idCard", {
|
|
106
|
+
type: "string",
|
|
107
|
+
validate: (schema, data) => {
|
|
108
|
+
if (!schema) return true;
|
|
109
|
+
const value = String(data ?? "");
|
|
110
|
+
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]$/;
|
|
111
|
+
if (!pattern.test(value)) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return customValidatorPlugin._validateIdCardChecksum(value);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
_validateIdCardChecksum(idCard) {
|
|
120
|
+
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
121
|
+
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
|
|
122
|
+
let sum = 0;
|
|
123
|
+
for (let i = 0; i < 17; i += 1) {
|
|
124
|
+
sum += Number.parseInt(idCard[i], 10) * weights[i];
|
|
125
|
+
}
|
|
126
|
+
const checksum = checksums[sum % 11];
|
|
127
|
+
return idCard[17].toUpperCase() === checksum;
|
|
128
|
+
},
|
|
129
|
+
hooks: {
|
|
130
|
+
onBeforeValidate() {
|
|
131
|
+
},
|
|
132
|
+
onAfterValidate() {
|
|
133
|
+
},
|
|
134
|
+
onError(error) {
|
|
135
|
+
console.error("[custom-validator] Error:", error.message);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
var custom_validator_default = customValidatorPlugin;
|
|
140
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
141
|
+
0 && (module.exports = {
|
|
142
|
+
customValidatorPlugin
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=custom-validator.cjs.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { P as Plugin } from '../plugin-CIKtTMtS.cjs';
|
|
2
|
+
import { V as Validator } from '../Validator-D6okG9tr.cjs';
|
|
3
|
+
import 'ajv';
|
|
4
|
+
|
|
5
|
+
declare const customValidatorPlugin: Plugin & {
|
|
6
|
+
addCustomKeywords: (validator: Validator) => void;
|
|
7
|
+
_validateIdCardChecksum: (idCard: string) => boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { customValidatorPlugin, customValidatorPlugin as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { P as Plugin } from '../plugin-CIKtTMtS.js';
|
|
2
|
+
import { V as Validator } from '../Validator-CllRdrY0.js';
|
|
3
|
+
import 'ajv';
|
|
4
|
+
|
|
5
|
+
declare const customValidatorPlugin: Plugin & {
|
|
6
|
+
addCustomKeywords: (validator: Validator) => void;
|
|
7
|
+
_validateIdCardChecksum: (idCard: string) => boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { customValidatorPlugin, customValidatorPlugin as default };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// src/plugins/custom-validator.ts
|
|
2
|
+
function getValidator(core) {
|
|
3
|
+
const coreRecord = core;
|
|
4
|
+
const validator = coreRecord.getDefaultValidator?.();
|
|
5
|
+
if (!validator) {
|
|
6
|
+
throw new Error("getDefaultValidator() is not available. Please provide schema-dsl core object.");
|
|
7
|
+
}
|
|
8
|
+
return validator;
|
|
9
|
+
}
|
|
10
|
+
function getPluginBucket() {
|
|
11
|
+
const globalRecord = globalThis;
|
|
12
|
+
if (!globalRecord.__schemaDsl_plugins) {
|
|
13
|
+
globalRecord.__schemaDsl_plugins = {};
|
|
14
|
+
}
|
|
15
|
+
return globalRecord.__schemaDsl_plugins;
|
|
16
|
+
}
|
|
17
|
+
var customValidatorPlugin = {
|
|
18
|
+
name: "custom-validator",
|
|
19
|
+
version: "1.0.0",
|
|
20
|
+
description: "Custom validator plugin \u2014 adds business-specific validation rules",
|
|
21
|
+
install(core, _options = {}, _context) {
|
|
22
|
+
const validator = getValidator(core);
|
|
23
|
+
this.addCustomKeywords(validator);
|
|
24
|
+
getPluginBucket()["custom-validator"] = this;
|
|
25
|
+
},
|
|
26
|
+
uninstall() {
|
|
27
|
+
delete getPluginBucket()["custom-validator"];
|
|
28
|
+
},
|
|
29
|
+
addCustomKeywords(validator) {
|
|
30
|
+
const ajv = validator.getAjv();
|
|
31
|
+
if (!ajv.getKeyword?.("unique")) {
|
|
32
|
+
validator.addKeyword("unique", {
|
|
33
|
+
async: true,
|
|
34
|
+
type: "string",
|
|
35
|
+
validate: async function validateUnique(schema) {
|
|
36
|
+
if (!schema) return true;
|
|
37
|
+
const { table, field } = schema;
|
|
38
|
+
const exists = false;
|
|
39
|
+
if (exists) {
|
|
40
|
+
;
|
|
41
|
+
validateUnique.errors = [{
|
|
42
|
+
keyword: "unique",
|
|
43
|
+
message: `${field} already exists in ${table}`,
|
|
44
|
+
params: { table, field }
|
|
45
|
+
}];
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (!ajv.getKeyword?.("passwordStrength")) {
|
|
53
|
+
validator.addKeyword("passwordStrength", {
|
|
54
|
+
type: "string",
|
|
55
|
+
validate: function validatePasswordStrength(schema, data) {
|
|
56
|
+
if (!schema) return true;
|
|
57
|
+
const strength = String(schema);
|
|
58
|
+
const value = String(data ?? "");
|
|
59
|
+
const rules = {
|
|
60
|
+
weak: /^.{6,}$/,
|
|
61
|
+
medium: /^(?=.*[a-z])(?=.*[A-Z]).{8,}$/,
|
|
62
|
+
strong: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{10,}$/
|
|
63
|
+
};
|
|
64
|
+
const pattern = rules[strength];
|
|
65
|
+
if (!pattern) return true;
|
|
66
|
+
if (!pattern.test(value)) {
|
|
67
|
+
;
|
|
68
|
+
validatePasswordStrength.errors = [{
|
|
69
|
+
keyword: "passwordStrength",
|
|
70
|
+
message: `Password does not meet ${strength} strength requirements`,
|
|
71
|
+
params: { strength }
|
|
72
|
+
}];
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (!ajv.getKeyword?.("idCard")) {
|
|
80
|
+
validator.addKeyword("idCard", {
|
|
81
|
+
type: "string",
|
|
82
|
+
validate: (schema, data) => {
|
|
83
|
+
if (!schema) return true;
|
|
84
|
+
const value = String(data ?? "");
|
|
85
|
+
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]$/;
|
|
86
|
+
if (!pattern.test(value)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return customValidatorPlugin._validateIdCardChecksum(value);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
_validateIdCardChecksum(idCard) {
|
|
95
|
+
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
96
|
+
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
|
|
97
|
+
let sum = 0;
|
|
98
|
+
for (let i = 0; i < 17; i += 1) {
|
|
99
|
+
sum += Number.parseInt(idCard[i], 10) * weights[i];
|
|
100
|
+
}
|
|
101
|
+
const checksum = checksums[sum % 11];
|
|
102
|
+
return idCard[17].toUpperCase() === checksum;
|
|
103
|
+
},
|
|
104
|
+
hooks: {
|
|
105
|
+
onBeforeValidate() {
|
|
106
|
+
},
|
|
107
|
+
onAfterValidate() {
|
|
108
|
+
},
|
|
109
|
+
onError(error) {
|
|
110
|
+
console.error("[custom-validator] Error:", error.message);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
var custom_validator_default = customValidatorPlugin;
|
|
115
|
+
export {
|
|
116
|
+
customValidatorPlugin,
|
|
117
|
+
custom_validator_default as default
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=custom-validator.js.map
|