reliant-type 1.0.0
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/LICENSE +21 -0
- package/README.md +1305 -0
- package/dist/cjs/constants/SECURITY_CONSTANTS.js +49 -0
- package/dist/cjs/constants/SECURITY_CONSTANTS.js.map +1 -0
- package/dist/cjs/constants/VALIDATION_CONSTANTS.js +103 -0
- package/dist/cjs/constants/VALIDATION_CONSTANTS.js.map +1 -0
- package/dist/cjs/core/schema/extensions/SmartInference.js +200 -0
- package/dist/cjs/core/schema/extensions/SmartInference.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/Docs.js +100 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/Docs.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js +192 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js +174 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js +54 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js +50 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/index.js +15 -0
- package/dist/cjs/core/schema/extensions/components/AutoDocumentation/index.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js +70 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js +40 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js +19 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js +20 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js +49 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/index.js +98 -0
- package/dist/cjs/core/schema/extensions/components/ConditionalValidation/index.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/FormValidator.js +85 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/FormValidator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/LiveValidator.js +133 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/LiveValidator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/StreamValidator.js +351 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/StreamValidator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/index.js +109 -0
- package/dist/cjs/core/schema/extensions/components/RealtimeValidation/index.js.map +1 -0
- package/dist/cjs/core/schema/extensions/index.js +61 -0
- package/dist/cjs/core/schema/extensions/index.js.map +1 -0
- package/dist/cjs/core/schema/extensions/mods/index.js +51 -0
- package/dist/cjs/core/schema/extensions/mods/index.js.map +1 -0
- package/dist/cjs/core/schema/extensions/mods/openapi-converter.js +227 -0
- package/dist/cjs/core/schema/extensions/mods/openapi-converter.js.map +1 -0
- package/dist/cjs/core/schema/extensions/mods/typescript-generator.js +287 -0
- package/dist/cjs/core/schema/extensions/mods/typescript-generator.js.map +1 -0
- package/dist/cjs/core/schema/extensions/mods/validation-engine.js +224 -0
- package/dist/cjs/core/schema/extensions/mods/validation-engine.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/Interface.js +277 -0
- package/dist/cjs/core/schema/mode/interfaces/Interface.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/InterfaceSchema.js +1431 -0
- package/dist/cjs/core/schema/mode/interfaces/InterfaceSchema.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js +520 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js +624 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js +811 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js +599 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js +89 -0
- package/dist/cjs/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/errors/ErrorHandler.js +356 -0
- package/dist/cjs/core/schema/mode/interfaces/errors/ErrorHandler.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/errors/types/errors.type.js +80 -0
- package/dist/cjs/core/schema/mode/interfaces/errors/types/errors.type.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js +778 -0
- package/dist/cjs/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js +523 -0
- package/dist/cjs/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/ConditionalTypes.js +681 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/ConditionalTypes.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/IDESupport.js +430 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/IDESupport.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/TypeInference.js +225 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/TypeInference.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/index.js +44 -0
- package/dist/cjs/core/schema/mode/interfaces/typescript/index.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/ConstraintParser.js +1134 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/ConstraintParser.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/TypeGuards.js +256 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/TypeGuards.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/TypeValidators.js +429 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/TypeValidators.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/UnionCache.js +404 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/UnionCache.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/ValidationHelpers.js +851 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/ValidationHelpers.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/passValidator.js +262 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/passValidator.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/securityValidator.js +887 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/securityValidator.js.map +1 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/urlValidation.js +191 -0
- package/dist/cjs/core/schema/mode/interfaces/validators/mods/urlValidation.js.map +1 -0
- package/dist/cjs/core/schema/optimization/ObjectValidationCache.js +462 -0
- package/dist/cjs/core/schema/optimization/ObjectValidationCache.js.map +1 -0
- package/dist/cjs/core/schema/optimization/PerformanceMonitor.js +773 -0
- package/dist/cjs/core/schema/optimization/PerformanceMonitor.js.map +1 -0
- package/dist/cjs/core/schema/optimization/SchemaCompiler.js +600 -0
- package/dist/cjs/core/schema/optimization/SchemaCompiler.js.map +1 -0
- package/dist/cjs/core/types/ValidatorTypes.js +70 -0
- package/dist/cjs/core/types/ValidatorTypes.js.map +1 -0
- package/dist/cjs/core/types/parser.type.js +12 -0
- package/dist/cjs/core/types/parser.type.js.map +1 -0
- package/dist/cjs/core/utils/Make.js +61 -0
- package/dist/cjs/core/utils/Make.js.map +1 -0
- package/dist/cjs/core/utils/Mod.js +1033 -0
- package/dist/cjs/core/utils/Mod.js.map +1 -0
- package/dist/cjs/core/utils/UrlArgs.js +102 -0
- package/dist/cjs/core/utils/UrlArgs.js.map +1 -0
- package/dist/cjs/core/utils/arrayToEnum.js +18 -0
- package/dist/cjs/core/utils/arrayToEnum.js.map +1 -0
- package/dist/cjs/core/utils/createUrlArgsEnumFArray.js +13 -0
- package/dist/cjs/core/utils/createUrlArgsEnumFArray.js.map +1 -0
- package/dist/cjs/core/utils/securityHelpers.js +215 -0
- package/dist/cjs/core/utils/securityHelpers.js.map +1 -0
- package/dist/cjs/core/utils/securityValidatorHelpers.js +65 -0
- package/dist/cjs/core/utils/securityValidatorHelpers.js.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/esm/constants/SECURITY_CONSTANTS.js +47 -0
- package/dist/esm/constants/SECURITY_CONSTANTS.js.map +1 -0
- package/dist/esm/constants/VALIDATION_CONSTANTS.js +98 -0
- package/dist/esm/constants/VALIDATION_CONSTANTS.js.map +1 -0
- package/dist/esm/core/schema/extensions/SmartInference.js +197 -0
- package/dist/esm/core/schema/extensions/SmartInference.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/Docs.js +98 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/Docs.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js +190 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js +172 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js +52 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js +48 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/index.js +12 -0
- package/dist/esm/core/schema/extensions/components/AutoDocumentation/index.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js +68 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js +38 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js +17 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js +18 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js +45 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/index.js +92 -0
- package/dist/esm/core/schema/extensions/components/ConditionalValidation/index.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/FormValidator.js +83 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/FormValidator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/LiveValidator.js +131 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/LiveValidator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/StreamValidator.js +349 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/StreamValidator.js.map +1 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/index.js +103 -0
- package/dist/esm/core/schema/extensions/components/RealtimeValidation/index.js.map +1 -0
- package/dist/esm/core/schema/extensions/index.js +53 -0
- package/dist/esm/core/schema/extensions/index.js.map +1 -0
- package/dist/esm/core/schema/extensions/mods/index.js +47 -0
- package/dist/esm/core/schema/extensions/mods/index.js.map +1 -0
- package/dist/esm/core/schema/extensions/mods/openapi-converter.js +225 -0
- package/dist/esm/core/schema/extensions/mods/openapi-converter.js.map +1 -0
- package/dist/esm/core/schema/extensions/mods/typescript-generator.js +284 -0
- package/dist/esm/core/schema/extensions/mods/typescript-generator.js.map +1 -0
- package/dist/esm/core/schema/extensions/mods/validation-engine.js +222 -0
- package/dist/esm/core/schema/extensions/mods/validation-engine.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/Interface.js +269 -0
- package/dist/esm/core/schema/mode/interfaces/Interface.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/InterfaceSchema.js +1429 -0
- package/dist/esm/core/schema/mode/interfaces/InterfaceSchema.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js +518 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js +620 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js +809 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js +597 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js +89 -0
- package/dist/esm/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/errors/ErrorHandler.js +354 -0
- package/dist/esm/core/schema/mode/interfaces/errors/ErrorHandler.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/errors/types/errors.type.js +80 -0
- package/dist/esm/core/schema/mode/interfaces/errors/types/errors.type.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js +776 -0
- package/dist/esm/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js +521 -0
- package/dist/esm/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/ConditionalTypes.js +681 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/ConditionalTypes.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/IDESupport.js +428 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/IDESupport.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/TypeInference.js +223 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/TypeInference.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/index.js +35 -0
- package/dist/esm/core/schema/mode/interfaces/typescript/index.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/ConstraintParser.js +1132 -0
- package/dist/esm/core/schema/mode/interfaces/validators/ConstraintParser.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/TypeGuards.js +254 -0
- package/dist/esm/core/schema/mode/interfaces/validators/TypeGuards.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/TypeValidators.js +427 -0
- package/dist/esm/core/schema/mode/interfaces/validators/TypeValidators.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/UnionCache.js +400 -0
- package/dist/esm/core/schema/mode/interfaces/validators/UnionCache.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/ValidationHelpers.js +849 -0
- package/dist/esm/core/schema/mode/interfaces/validators/ValidationHelpers.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/passValidator.js +260 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/passValidator.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/securityValidator.js +881 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/securityValidator.js.map +1 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/urlValidation.js +189 -0
- package/dist/esm/core/schema/mode/interfaces/validators/mods/urlValidation.js.map +1 -0
- package/dist/esm/core/schema/optimization/ObjectValidationCache.js +460 -0
- package/dist/esm/core/schema/optimization/ObjectValidationCache.js.map +1 -0
- package/dist/esm/core/schema/optimization/PerformanceMonitor.js +771 -0
- package/dist/esm/core/schema/optimization/PerformanceMonitor.js.map +1 -0
- package/dist/esm/core/schema/optimization/SchemaCompiler.js +598 -0
- package/dist/esm/core/schema/optimization/SchemaCompiler.js.map +1 -0
- package/dist/esm/core/types/ValidatorTypes.js +65 -0
- package/dist/esm/core/types/ValidatorTypes.js.map +1 -0
- package/dist/esm/core/types/parser.type.js +12 -0
- package/dist/esm/core/types/parser.type.js.map +1 -0
- package/dist/esm/core/utils/Make.js +59 -0
- package/dist/esm/core/utils/Make.js.map +1 -0
- package/dist/esm/core/utils/Mod.js +1031 -0
- package/dist/esm/core/utils/Mod.js.map +1 -0
- package/dist/esm/core/utils/UrlArgs.js +98 -0
- package/dist/esm/core/utils/UrlArgs.js.map +1 -0
- package/dist/esm/core/utils/arrayToEnum.js +16 -0
- package/dist/esm/core/utils/arrayToEnum.js.map +1 -0
- package/dist/esm/core/utils/createUrlArgsEnumFArray.js +11 -0
- package/dist/esm/core/utils/createUrlArgsEnumFArray.js.map +1 -0
- package/dist/esm/core/utils/securityHelpers.js +207 -0
- package/dist/esm/core/utils/securityHelpers.js.map +1 -0
- package/dist/esm/core/utils/securityValidatorHelpers.js +62 -0
- package/dist/esm/core/utils/securityValidatorHelpers.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/schema.d.ts +2595 -0
- package/docs/ALL_TYPES.md +120 -0
- package/docs/API-STABILITY.md +336 -0
- package/docs/CONDITIONAL-VALIDATION.md +637 -0
- package/docs/EXAMPLES.md +876 -0
- package/docs/FIELD-TYPES.md +829 -0
- package/docs/GETTING-STARTED.md +394 -0
- package/docs/LIVE-UTILITY.md +1137 -0
- package/docs/QUICK-REFERENCE.md +346 -0
- package/docs/README.md +205 -0
- package/docs/VSCODE-EXTENSION.md +458 -0
- package/package.json +219 -0
- package/src/bench/BENCHMARK-RESULTS.md +211 -0
- package/src/bench/benchmark-results.json +148 -0
- package/src/bench/performance-comparison.ts +218 -0
- package/src/bench/precompilation-benchmark.ts +218 -0
- package/src/constants/SECURITY_CONSTANTS.ts +44 -0
- package/src/constants/VALIDATION_CONSTANTS.ts +176 -0
- package/src/core/README.md +395 -0
- package/src/core/compiler/SchemaTransformer.ts +279 -0
- package/src/core/compiler/TypeAnalyzer.ts +378 -0
- package/src/core/compiler/TypeScriptCompilerIntegration.ts +220 -0
- package/src/core/compiler/TypeToSchemaConverter.ts +288 -0
- package/src/core/index.ts +70 -0
- package/src/core/schema/extensions/AutoDocumentation.ts +572 -0
- package/src/core/schema/extensions/ConditionalValidation.ts +330 -0
- package/src/core/schema/extensions/README.md +171 -0
- package/src/core/schema/extensions/RealtimeValidation.ts +656 -0
- package/src/core/schema/extensions/SmartInference.ts +224 -0
- package/src/core/schema/extensions/components/AutoDocumentation/Docs.ts +98 -0
- package/src/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.ts +201 -0
- package/src/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.ts +176 -0
- package/src/core/schema/extensions/components/AutoDocumentation/OpenAPIGenerator.ts +175 -0
- package/src/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.ts +49 -0
- package/src/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.ts +54 -0
- package/src/core/schema/extensions/components/AutoDocumentation/index.ts +17 -0
- package/src/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.ts +101 -0
- package/src/core/schema/extensions/components/ConditionalValidation/ConditionalElse.ts +65 -0
- package/src/core/schema/extensions/components/ConditionalValidation/ConditionalThen.ts +33 -0
- package/src/core/schema/extensions/components/ConditionalValidation/Extend.ts +75 -0
- package/src/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.ts +16 -0
- package/src/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.ts +50 -0
- package/src/core/schema/extensions/components/ConditionalValidation/index.ts +104 -0
- package/src/core/schema/extensions/components/RealtimeValidation/FormValidator.ts +88 -0
- package/src/core/schema/extensions/components/RealtimeValidation/LiveValidator.ts +171 -0
- package/src/core/schema/extensions/components/RealtimeValidation/StreamValidator.ts +397 -0
- package/src/core/schema/extensions/components/RealtimeValidation/index.ts +114 -0
- package/src/core/schema/extensions/index.ts +76 -0
- package/src/core/schema/extensions/mods/index.ts +131 -0
- package/src/core/schema/extensions/mods/openapi-converter.ts +338 -0
- package/src/core/schema/extensions/mods/typescript-generator.ts +379 -0
- package/src/core/schema/extensions/mods/validation-engine.ts +295 -0
- package/src/core/schema/mode/interfaces/Interface.ts +364 -0
- package/src/core/schema/mode/interfaces/InterfaceSchema.ts +1838 -0
- package/src/core/schema/mode/interfaces/README.md +278 -0
- package/src/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.ts +657 -0
- package/src/core/schema/mode/interfaces/conditional/parser/ConditionalAST.ts +826 -0
- package/src/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.ts +992 -0
- package/src/core/schema/mode/interfaces/conditional/parser/ConditionalParser.ts +803 -0
- package/src/core/schema/mode/interfaces/conditional/parser/readme.md +406 -0
- package/src/core/schema/mode/interfaces/conditional/types/ConditionalTypes.ts +273 -0
- package/src/core/schema/mode/interfaces/errors/ErrorHandler.ts +624 -0
- package/src/core/schema/mode/interfaces/errors/types/errors.type.ts +102 -0
- package/src/core/schema/mode/interfaces/precompilation/FieldPrecompilers.ts +962 -0
- package/src/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.ts +667 -0
- package/src/core/schema/mode/interfaces/typescript/ConditionalTypes.ts +1534 -0
- package/src/core/schema/mode/interfaces/typescript/IDESupport.ts +534 -0
- package/src/core/schema/mode/interfaces/typescript/TypeInference.ts +737 -0
- package/src/core/schema/mode/interfaces/typescript/index.ts +92 -0
- package/src/core/schema/mode/interfaces/validators/ConstraintParser.ts +1438 -0
- package/src/core/schema/mode/interfaces/validators/EnhancedErrorReporting.ts +227 -0
- package/src/core/schema/mode/interfaces/validators/TypeGuards.ts +288 -0
- package/src/core/schema/mode/interfaces/validators/TypeValidators.ts +660 -0
- package/src/core/schema/mode/interfaces/validators/UnionCache.ts +508 -0
- package/src/core/schema/mode/interfaces/validators/ValidationHelpers.ts +1257 -0
- package/src/core/schema/mode/interfaces/validators/index.ts +21 -0
- package/src/core/schema/mode/interfaces/validators/mods/passValidator.ts +424 -0
- package/src/core/schema/mode/interfaces/validators/mods/securityValidator.ts +1634 -0
- package/src/core/schema/mode/interfaces/validators/mods/urlValidation.ts +333 -0
- package/src/core/schema/optimization/ObjectValidationCache.ts +560 -0
- package/src/core/schema/optimization/PerformanceInitializer.ts +188 -0
- package/src/core/schema/optimization/PerformanceMonitor.ts +898 -0
- package/src/core/schema/optimization/SchemaCompiler.ts +730 -0
- package/src/core/testing/TestDataGenerator.ts +590 -0
- package/src/core/types/SchemaValidator.type.ts +210 -0
- package/src/core/types/ValidatorTypes.ts +93 -0
- package/src/core/types/extension.type.ts +109 -0
- package/src/core/types/objValidationCache.ts +17 -0
- package/src/core/types/parser.type.ts +15 -0
- package/src/core/types/perfoMonitor.ts +37 -0
- package/src/core/types/scompiler.ts +22 -0
- package/src/core/types/securityValidator.type.ts +10 -0
- package/src/core/types/types.ts +154 -0
- package/src/core/utils/Make.ts +97 -0
- package/src/core/utils/Mod.ts +1168 -0
- package/src/core/utils/UrlArgs.ts +124 -0
- package/src/core/utils/arrayToEnum.ts +89 -0
- package/src/core/utils/createUrlArgsEnumFArray.ts +11 -0
- package/src/core/utils/securityHelpers.ts +341 -0
- package/src/core/utils/securityValidatorHelpers.ts +76 -0
- package/src/index.ts +124 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Error Reporting System
|
|
3
|
+
*
|
|
4
|
+
* This enhancement provides more detailed error messages for complex conditional validations
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface ConditionalValidationError {
|
|
8
|
+
field: string;
|
|
9
|
+
expected: string;
|
|
10
|
+
received: any;
|
|
11
|
+
receivedType: string;
|
|
12
|
+
condition: string;
|
|
13
|
+
conditionMet: boolean;
|
|
14
|
+
runtimePropertyExists: boolean;
|
|
15
|
+
runtimePropertyPath: string;
|
|
16
|
+
suggestion: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class EnhancedSchemaValidator {
|
|
20
|
+
|
|
21
|
+
static generateDetailedError(
|
|
22
|
+
field: string,
|
|
23
|
+
conditionalRule: string,
|
|
24
|
+
input: any,
|
|
25
|
+
runtimeData: any
|
|
26
|
+
): ConditionalValidationError {
|
|
27
|
+
|
|
28
|
+
// Parse the conditional rule
|
|
29
|
+
const ruleMatch = conditionalRule.match(/when\s+(.+?)\.\$exists\(\)\s+\*\?\s+(\w+(?:\[\])?)\s+:\s+=(.+)/);
|
|
30
|
+
|
|
31
|
+
if (!ruleMatch) {
|
|
32
|
+
throw new Error(`Invalid conditional rule format: ${conditionalRule}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const [, runtimePath, expectedType, defaultValue] = ruleMatch;
|
|
36
|
+
const receivedValue = input[field];
|
|
37
|
+
const runtimeExists = this.checkRuntimePath(runtimeData, runtimePath);
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
field,
|
|
41
|
+
expected: expectedType,
|
|
42
|
+
received: receivedValue,
|
|
43
|
+
receivedType: typeof receivedValue,
|
|
44
|
+
condition: `${runtimePath}.$exists()`,
|
|
45
|
+
conditionMet: runtimeExists,
|
|
46
|
+
runtimePropertyExists: runtimeExists,
|
|
47
|
+
runtimePropertyPath: runtimePath,
|
|
48
|
+
suggestion: this.generateSuggestion(field, expectedType, receivedValue, runtimeExists, defaultValue)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private static checkRuntimePath(obj: any, path: string): boolean {
|
|
53
|
+
const parts = path.split('.');
|
|
54
|
+
let current = obj;
|
|
55
|
+
|
|
56
|
+
for (const part of parts) {
|
|
57
|
+
if (current == null || typeof current !== 'object' || !(part in current)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
current = current[part];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return current !== undefined && current !== null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private static generateSuggestion(
|
|
67
|
+
field: string,
|
|
68
|
+
expectedType: string,
|
|
69
|
+
receivedValue: any,
|
|
70
|
+
runtimeExists: boolean,
|
|
71
|
+
defaultValue: string
|
|
72
|
+
): string {
|
|
73
|
+
if (!runtimeExists) {
|
|
74
|
+
return `Since the runtime condition is not met, this field will use the default value: ${defaultValue}. You can omit this field from your input.`;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (typeof receivedValue !== expectedType.replace('[]', '')) {
|
|
78
|
+
return `Convert '${receivedValue}' to ${expectedType}. Expected: ${this.getTypeExample(expectedType)}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return "Value is valid";
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private static getTypeExample(type: string): string {
|
|
85
|
+
const examples: Record<string, string> = {
|
|
86
|
+
'boolean': 'true or false',
|
|
87
|
+
'string': '"example string"',
|
|
88
|
+
'number': '42 or 3.14',
|
|
89
|
+
'int': '42',
|
|
90
|
+
'object': '{ key: "value" }',
|
|
91
|
+
'array': '["item1", "item2"]',
|
|
92
|
+
'string[]': '["item1", "item2"]',
|
|
93
|
+
'number[]': '[1, 2, 3]',
|
|
94
|
+
'boolean[]': '[true, false]'
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
return examples[type] || `a ${type}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static formatDetailedError(error: ConditionalValidationError): string {
|
|
101
|
+
const { field, expected, received, receivedType, condition, conditionMet, suggestion } = error;
|
|
102
|
+
|
|
103
|
+
return [
|
|
104
|
+
`❌ Validation Error for field '${field}':`,
|
|
105
|
+
` Expected: ${expected}`,
|
|
106
|
+
` Received: ${JSON.stringify(received)} (${receivedType})`,
|
|
107
|
+
` Conditional Rule: when ${condition} → validate as ${expected}`,
|
|
108
|
+
` Runtime Condition Met: ${conditionMet ? '✅' : '❌'}`,
|
|
109
|
+
` 💡 Suggestion: ${suggestion}`,
|
|
110
|
+
``
|
|
111
|
+
].join('\n');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Example usage in your test framework
|
|
116
|
+
export class TestResultAnalyzer {
|
|
117
|
+
|
|
118
|
+
static analyzeConditionalValidation(
|
|
119
|
+
testCase: any,
|
|
120
|
+
validationResult: any,
|
|
121
|
+
schema: any
|
|
122
|
+
): void {
|
|
123
|
+
console.log(`\n🔍 DETAILED CONDITIONAL ANALYSIS for ${testCase.name}:`);
|
|
124
|
+
|
|
125
|
+
// Extract conditional fields from schema definition
|
|
126
|
+
const conditionalFields = this.extractConditionalFieldsFromSchema(schema);
|
|
127
|
+
|
|
128
|
+
conditionalFields.forEach(fieldInfo => {
|
|
129
|
+
const { fieldName, rule } = fieldInfo;
|
|
130
|
+
const inputValue = testCase.input[fieldName];
|
|
131
|
+
const outputValue = validationResult.data?.[fieldName];
|
|
132
|
+
const runtimeExists = this.checkRuntimeCondition(fieldInfo.runtimePath, testCase.input);
|
|
133
|
+
|
|
134
|
+
console.log(`\n 📊 Field: ${fieldName}`);
|
|
135
|
+
console.log(` Rule: ${rule}`);
|
|
136
|
+
console.log(` Runtime Condition (${fieldInfo.runtimePath}): ${runtimeExists ? '✅ EXISTS' : '❌ MISSING'}`);
|
|
137
|
+
|
|
138
|
+
if (runtimeExists) {
|
|
139
|
+
// Should validate user input
|
|
140
|
+
const typeValid = typeof inputValue === fieldInfo.expectedType;
|
|
141
|
+
console.log(` Input Validation: ${typeValid ? '✅' : '❌'} (${typeof inputValue} vs ${fieldInfo.expectedType})`);
|
|
142
|
+
console.log(` Value: ${JSON.stringify(inputValue)} → ${JSON.stringify(outputValue)}`);
|
|
143
|
+
console.log(` Preserved: ${inputValue === outputValue ? '✅' : '❌'}`);
|
|
144
|
+
} else {
|
|
145
|
+
// Should use default
|
|
146
|
+
const usedDefault = outputValue === fieldInfo.defaultValue;
|
|
147
|
+
console.log(` Default Applied: ${usedDefault ? '✅' : '❌'}`);
|
|
148
|
+
console.log(` Expected Default: ${JSON.stringify(fieldInfo.defaultValue)}`);
|
|
149
|
+
console.log(` Actual Output: ${JSON.stringify(outputValue)}`);
|
|
150
|
+
console.log(` User Input Ignored: ${inputValue !== outputValue ? '✅' : '❌'}`);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private static extractConditionalFieldsFromSchema(schema: any): Array<{
|
|
156
|
+
fieldName: string;
|
|
157
|
+
rule: string;
|
|
158
|
+
runtimePath: string;
|
|
159
|
+
expectedType: string;
|
|
160
|
+
defaultValue: any;
|
|
161
|
+
}> {
|
|
162
|
+
// This would parse your schema definition to extract conditional field info
|
|
163
|
+
// Implementation depends on your schema structure
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private static checkRuntimeCondition(path: string, input: any): boolean {
|
|
168
|
+
const parts = path.split('.');
|
|
169
|
+
let current = input;
|
|
170
|
+
|
|
171
|
+
for (const part of parts) {
|
|
172
|
+
if (current == null || typeof current !== 'object' || !(part in current)) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
current = current[part];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return current !== undefined && current !== null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Performance monitoring enhancement
|
|
183
|
+
export class PerformanceProfiler {
|
|
184
|
+
|
|
185
|
+
static profileConditionalValidation(testCase: any, schema: any): {
|
|
186
|
+
totalTime: number;
|
|
187
|
+
conditionCheckTime: number;
|
|
188
|
+
validationTime: number;
|
|
189
|
+
breakdown: Array<{ field: string; time: number; }>;
|
|
190
|
+
} {
|
|
191
|
+
const start = performance.now();
|
|
192
|
+
|
|
193
|
+
// Simulate detailed timing
|
|
194
|
+
const conditionStart = performance.now();
|
|
195
|
+
// ... condition checking logic
|
|
196
|
+
const conditionEnd = performance.now();
|
|
197
|
+
|
|
198
|
+
const validationStart = performance.now();
|
|
199
|
+
const result = schema.safeParse(testCase.input);
|
|
200
|
+
const validationEnd = performance.now();
|
|
201
|
+
|
|
202
|
+
const end = performance.now();
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
totalTime: end - start,
|
|
206
|
+
conditionCheckTime: conditionEnd - conditionStart,
|
|
207
|
+
validationTime: validationEnd - validationStart,
|
|
208
|
+
breakdown: [] // Field-by-field timing
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
static reportPerformanceBottlenecks(profiles: any[]): void {
|
|
213
|
+
console.log('\n⚡ PERFORMANCE ANALYSIS:');
|
|
214
|
+
|
|
215
|
+
const avgTime = profiles.reduce((sum, p) => sum + p.totalTime, 0) / profiles.length;
|
|
216
|
+
const slowest = profiles.reduce((max, p) => p.totalTime > max.totalTime ? p : max);
|
|
217
|
+
|
|
218
|
+
console.log(` Average Execution Time: ${avgTime.toFixed(2)}ms`);
|
|
219
|
+
console.log(` Slowest Test: ${slowest.totalTime.toFixed(2)}ms`);
|
|
220
|
+
|
|
221
|
+
if (avgTime > 5) {
|
|
222
|
+
console.log(' ⚠️ Consider optimizing for better performance');
|
|
223
|
+
} else if (avgTime < 1) {
|
|
224
|
+
console.log(' 🚀 Excellent performance!');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Guards Module
|
|
3
|
+
*
|
|
4
|
+
* Contains all type guard functions extracted from InterfaceSchema
|
|
5
|
+
* to improve maintainability and reduce file size.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
ConstantValue,
|
|
10
|
+
OptionalConstantValue,
|
|
11
|
+
SchemaInterface,
|
|
12
|
+
OptionalSchemaInterface,
|
|
13
|
+
UnionValue,
|
|
14
|
+
} from "../../../../types/SchemaValidator.type";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Type guard functions for schema validation
|
|
18
|
+
*/
|
|
19
|
+
export class TypeGuards {
|
|
20
|
+
/**
|
|
21
|
+
* Check if value is a union value
|
|
22
|
+
*/
|
|
23
|
+
static isUnionValue(value: any): value is UnionValue {
|
|
24
|
+
return (
|
|
25
|
+
typeof value === "object" &&
|
|
26
|
+
value !== null &&
|
|
27
|
+
!Array.isArray(value) &&
|
|
28
|
+
"union" in value &&
|
|
29
|
+
Array.isArray(value.union)
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Check if value is a constant value
|
|
35
|
+
*/
|
|
36
|
+
static isConstantValue(value: any): value is ConstantValue | OptionalConstantValue {
|
|
37
|
+
return (
|
|
38
|
+
typeof value === "object" &&
|
|
39
|
+
value !== null &&
|
|
40
|
+
!Array.isArray(value) &&
|
|
41
|
+
"const" in value
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if value is an optional schema interface
|
|
47
|
+
*/
|
|
48
|
+
static isOptionalSchemaInterface(value: any): value is OptionalSchemaInterface {
|
|
49
|
+
return (
|
|
50
|
+
typeof value === "object" &&
|
|
51
|
+
value !== null &&
|
|
52
|
+
!Array.isArray(value) &&
|
|
53
|
+
"optional" in value &&
|
|
54
|
+
value.optional === true &&
|
|
55
|
+
"schema" in value
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Check if value is a conditional validation object
|
|
61
|
+
*/
|
|
62
|
+
static isConditionalValidation(value: any): boolean {
|
|
63
|
+
return (
|
|
64
|
+
typeof value === "object" &&
|
|
65
|
+
value !== null &&
|
|
66
|
+
!Array.isArray(value) &&
|
|
67
|
+
value.__conditional === true &&
|
|
68
|
+
"fieldName" in value &&
|
|
69
|
+
"conditions" in value
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Check if value is a schema interface
|
|
75
|
+
*/
|
|
76
|
+
static isSchemaInterface(value: any): value is SchemaInterface {
|
|
77
|
+
return (
|
|
78
|
+
typeof value === "object" &&
|
|
79
|
+
value !== null &&
|
|
80
|
+
!Array.isArray(value) &&
|
|
81
|
+
!TypeGuards.isConstantValue(value) &&
|
|
82
|
+
!TypeGuards.isOptionalSchemaInterface(value) &&
|
|
83
|
+
!TypeGuards.isConditionalValidation(value)
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Check if value is an array schema (single element array)
|
|
89
|
+
*/
|
|
90
|
+
static isArraySchema(value: any): boolean {
|
|
91
|
+
return Array.isArray(value) && value.length === 1;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Check if field type is a string-based type
|
|
96
|
+
*/
|
|
97
|
+
static isStringFieldType(fieldType: any): fieldType is string {
|
|
98
|
+
return typeof fieldType === "string";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if string contains union syntax
|
|
103
|
+
*/
|
|
104
|
+
static isUnionType(fieldType: string): boolean {
|
|
105
|
+
return fieldType.includes("|");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Check if string is a constant type (starts with =)
|
|
110
|
+
*/
|
|
111
|
+
static isConstantType(fieldType: string): boolean {
|
|
112
|
+
return fieldType.startsWith("=");
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Check if string is an array type (ends with [])
|
|
117
|
+
*/
|
|
118
|
+
static isArrayType(fieldType: string): boolean {
|
|
119
|
+
// Remove optional marker first
|
|
120
|
+
const type = fieldType.endsWith("?") ? fieldType.slice(0, -1) : fieldType;
|
|
121
|
+
// Remove constraints if present
|
|
122
|
+
const baseType = type.match(/^([a-zA-Z\[\]]+)/)?.[1] || type;
|
|
123
|
+
return baseType.endsWith("[]");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Check if string is an optional type (ends with ?)
|
|
128
|
+
*/
|
|
129
|
+
static isOptionalType(fieldType: string): boolean {
|
|
130
|
+
return fieldType.endsWith("?");
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Check if string is a record type
|
|
135
|
+
*/
|
|
136
|
+
static isRecordType(fieldType: string): boolean {
|
|
137
|
+
return fieldType.startsWith("record<") && fieldType.endsWith(">");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Check if string has constraints (contains parentheses)
|
|
142
|
+
*/
|
|
143
|
+
static hasConstraints(fieldType: string): boolean {
|
|
144
|
+
// Remove optional marker
|
|
145
|
+
const type = fieldType.endsWith("?") ? fieldType.slice(0, -1) : fieldType;
|
|
146
|
+
return /^[a-zA-Z\[\]]+\([^)]*\)$/.test(type);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Check if value is a primitive type
|
|
151
|
+
*/
|
|
152
|
+
static isPrimitive(value: any): boolean {
|
|
153
|
+
return (
|
|
154
|
+
value === null ||
|
|
155
|
+
value === undefined ||
|
|
156
|
+
typeof value === "string" ||
|
|
157
|
+
typeof value === "number" ||
|
|
158
|
+
typeof value === "boolean" ||
|
|
159
|
+
typeof value === "symbol" ||
|
|
160
|
+
typeof value === "bigint"
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Check if value is a valid email format
|
|
166
|
+
*/
|
|
167
|
+
static isValidEmail(value: string): boolean {
|
|
168
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Check if value is a valid URL format
|
|
173
|
+
*/
|
|
174
|
+
static isValidUrl(value: string): boolean {
|
|
175
|
+
try {
|
|
176
|
+
new URL(value);
|
|
177
|
+
return true;
|
|
178
|
+
} catch {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Check if value is a valid UUID format
|
|
185
|
+
*/
|
|
186
|
+
static isValidUuid(value: string): boolean {
|
|
187
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Check if value is a valid phone format
|
|
192
|
+
*/
|
|
193
|
+
static isValidPhone(value: string): boolean {
|
|
194
|
+
const cleanPhone = value.replace(/[\s\-\(\)\.+]/g, "");
|
|
195
|
+
return /^[1-9]\d{6,14}$/.test(cleanPhone);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Check if value is a valid slug format
|
|
200
|
+
*/
|
|
201
|
+
static isValidSlug(value: string): boolean {
|
|
202
|
+
return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Check if value is a valid username format
|
|
207
|
+
*/
|
|
208
|
+
static isValidUsername(value: string): boolean {
|
|
209
|
+
return /^[a-zA-Z0-9_-]{3,20}$/.test(value);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Check if value is empty (for empty/!empty operators)
|
|
214
|
+
*/
|
|
215
|
+
static isEmpty(value: any): boolean {
|
|
216
|
+
if (value === null || value === undefined) return true;
|
|
217
|
+
if (typeof value === "string") return value.length === 0;
|
|
218
|
+
if (Array.isArray(value)) return value.length === 0;
|
|
219
|
+
if (typeof value === "object") return Object.keys(value).length === 0;
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Check if value is a valid JSON string
|
|
225
|
+
*/
|
|
226
|
+
static isValidJson(value: string): boolean {
|
|
227
|
+
try {
|
|
228
|
+
JSON.parse(value);
|
|
229
|
+
return true;
|
|
230
|
+
} catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Check if value is a valid date
|
|
237
|
+
*/
|
|
238
|
+
static isValidDate(value: any): boolean {
|
|
239
|
+
if (value instanceof Date) {
|
|
240
|
+
return !isNaN(value.getTime());
|
|
241
|
+
}
|
|
242
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
243
|
+
const date = new Date(value);
|
|
244
|
+
return !isNaN(date.getTime());
|
|
245
|
+
}
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Check if value is a finite number
|
|
251
|
+
*/
|
|
252
|
+
static isFiniteNumber(value: any): boolean {
|
|
253
|
+
return typeof value === "number" && isFinite(value);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Check if value is an integer
|
|
258
|
+
*/
|
|
259
|
+
static isInteger(value: any): boolean {
|
|
260
|
+
return typeof value === "number" && isFinite(value) && value % 1 === 0;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Check if value is a positive number
|
|
265
|
+
*/
|
|
266
|
+
static isPositive(value: any): boolean {
|
|
267
|
+
return typeof value === "number" && isFinite(value) && value > 0;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Check if value is a negative number
|
|
272
|
+
*/
|
|
273
|
+
static isNegative(value: any): boolean {
|
|
274
|
+
return typeof value === "number" && isFinite(value) && value < 0;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Get the type name of a value for error messages
|
|
279
|
+
*/
|
|
280
|
+
static getTypeName(value: any): string {
|
|
281
|
+
if (value === null) return "null";
|
|
282
|
+
if (value === undefined) return "undefined";
|
|
283
|
+
if (Array.isArray(value)) return "array";
|
|
284
|
+
if (value instanceof Date) return "Date";
|
|
285
|
+
if (value instanceof RegExp) return "RegExp";
|
|
286
|
+
return typeof value;
|
|
287
|
+
}
|
|
288
|
+
}
|