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,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Engine - Core validation logic for schema extensions
|
|
3
|
+
*
|
|
4
|
+
* This module provides the core validation engine that powers all schema extensions.
|
|
5
|
+
* It acts as a bridge between extensions and the main validation system, delegating
|
|
6
|
+
* actual validation to the TypeValidators module to avoid duplication.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { SchemaInterface } from "../../mode/interfaces/Interface";
|
|
10
|
+
import { TypeValidators } from "../../mode/interfaces/validators/TypeValidators";
|
|
11
|
+
import { ConstraintParser } from "../../mode/interfaces/validators/ConstraintParser";
|
|
12
|
+
import { TypeGuards } from "../../mode/interfaces/validators/TypeGuards";
|
|
13
|
+
import { ValidationHelpers } from "../../mode/interfaces/validators/ValidationHelpers";
|
|
14
|
+
import { ErrorHandler } from "../../mode/interfaces/errors/ErrorHandler";
|
|
15
|
+
import { SchemaOptions } from "../../../types/SchemaValidator.type";
|
|
16
|
+
import { ErrorCode } from "../../mode/interfaces/errors/types/errors.type";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Core validation engine for schema validation
|
|
20
|
+
*/
|
|
21
|
+
export class ValidationEngine {
|
|
22
|
+
/**
|
|
23
|
+
* Validate a value against a schema field definition
|
|
24
|
+
* Delegates to TypeValidators for actual validation logic
|
|
25
|
+
*/
|
|
26
|
+
static validateField(fieldSchema: any, value: any): ValidationFieldResult {
|
|
27
|
+
if (typeof fieldSchema === "string") {
|
|
28
|
+
return this.validateStringSchema(fieldSchema, value);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (typeof fieldSchema === "object" && !Array.isArray(fieldSchema)) {
|
|
32
|
+
return this.validateObjectSchema(fieldSchema, value);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Default: accept any value
|
|
36
|
+
return { isValid: true, errors: [] };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Validate against string-based schema definitions
|
|
41
|
+
* Uses TypeValidators for consistent validation logic
|
|
42
|
+
*/
|
|
43
|
+
private static validateStringSchema(
|
|
44
|
+
fieldSchema: string,
|
|
45
|
+
value: any
|
|
46
|
+
): ValidationFieldResult {
|
|
47
|
+
// Parse the field schema using ConstraintParser
|
|
48
|
+
const parsed = ConstraintParser.parseConstraints(fieldSchema);
|
|
49
|
+
const { type, constraints, optional } = parsed;
|
|
50
|
+
|
|
51
|
+
// Handle null/undefined for optional fields
|
|
52
|
+
if (optional && (value === null || value === undefined)) {
|
|
53
|
+
return { isValid: true, errors: [] };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Required field cannot be null/undefined
|
|
57
|
+
if (!optional && (value === null || value === undefined)) {
|
|
58
|
+
return {
|
|
59
|
+
isValid: false,
|
|
60
|
+
errors: [`Field is required but received ${value}`],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Use TypeValidators for actual validation
|
|
65
|
+
const options: SchemaOptions = { loose: false }; // Default options
|
|
66
|
+
let validationResult;
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
// Delegate to appropriate TypeValidator method based on type
|
|
70
|
+
switch (type) {
|
|
71
|
+
case "string":
|
|
72
|
+
validationResult = TypeValidators.validateString(
|
|
73
|
+
value,
|
|
74
|
+
options,
|
|
75
|
+
constraints
|
|
76
|
+
);
|
|
77
|
+
break;
|
|
78
|
+
case "number":
|
|
79
|
+
case "float":
|
|
80
|
+
case "double":
|
|
81
|
+
validationResult = TypeValidators.validateNumber(
|
|
82
|
+
value,
|
|
83
|
+
options,
|
|
84
|
+
constraints
|
|
85
|
+
);
|
|
86
|
+
break;
|
|
87
|
+
case "int":
|
|
88
|
+
case "integer":
|
|
89
|
+
case "positive":
|
|
90
|
+
case "negative":
|
|
91
|
+
validationResult = TypeValidators.validateInteger(
|
|
92
|
+
value,
|
|
93
|
+
options,
|
|
94
|
+
constraints,
|
|
95
|
+
type as any
|
|
96
|
+
);
|
|
97
|
+
break;
|
|
98
|
+
case "boolean":
|
|
99
|
+
validationResult = TypeValidators.validateBoolean(value, options, {});
|
|
100
|
+
break;
|
|
101
|
+
case "date":
|
|
102
|
+
validationResult = TypeValidators.validateDate(
|
|
103
|
+
value,
|
|
104
|
+
options,
|
|
105
|
+
{},
|
|
106
|
+
"date"
|
|
107
|
+
);
|
|
108
|
+
break;
|
|
109
|
+
case "email":
|
|
110
|
+
validationResult = TypeValidators.validateEmail(value);
|
|
111
|
+
break;
|
|
112
|
+
case "url":
|
|
113
|
+
validationResult = TypeValidators.validateUrl(value, "url.web");
|
|
114
|
+
break;
|
|
115
|
+
case "uuid":
|
|
116
|
+
case "guid":
|
|
117
|
+
validationResult = TypeValidators.validateUuid(value, type as any);
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
// Handle arrays and other complex types
|
|
121
|
+
if (type.includes("[]")) {
|
|
122
|
+
// For arrays, use ValidationHelpers.validateArrayWithConstraints
|
|
123
|
+
const elementType = type.replace("[]", "");
|
|
124
|
+
validationResult = ValidationHelpers.validateArrayWithConstraints(
|
|
125
|
+
value,
|
|
126
|
+
elementType,
|
|
127
|
+
constraints,
|
|
128
|
+
(elemType: string, elemValue: any) => {
|
|
129
|
+
// Recursively validate each element and convert result format
|
|
130
|
+
const fieldResult = this.validateStringSchema(
|
|
131
|
+
elemType,
|
|
132
|
+
elemValue
|
|
133
|
+
);
|
|
134
|
+
// Convert string errors to ValidationError objects
|
|
135
|
+
const validationErrors = fieldResult.errors.map((errorMsg) => {
|
|
136
|
+
if (typeof errorMsg === "string") {
|
|
137
|
+
// console.log("converting string error to ValidationError");
|
|
138
|
+
return ErrorHandler.convertStringToError(errorMsg, ErrorCode.VALIDATION_ERROR
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
// If it's already a ValidationError object, return as is
|
|
142
|
+
if (
|
|
143
|
+
errorMsg &&
|
|
144
|
+
typeof errorMsg === "object" &&
|
|
145
|
+
"message" in errorMsg
|
|
146
|
+
) {
|
|
147
|
+
return errorMsg as any;
|
|
148
|
+
}
|
|
149
|
+
// Fallback: convert to string and then to ValidationError
|
|
150
|
+
// console.log(
|
|
151
|
+
// "converting unknown error format to ValidationError"
|
|
152
|
+
// );
|
|
153
|
+
return ErrorHandler.convertStringToError(
|
|
154
|
+
String(errorMsg),
|
|
155
|
+
ErrorCode.VALIDATION_ERROR
|
|
156
|
+
);
|
|
157
|
+
});
|
|
158
|
+
return {
|
|
159
|
+
success: fieldResult.isValid,
|
|
160
|
+
errors: validationErrors,
|
|
161
|
+
warnings: [],
|
|
162
|
+
data: elemValue,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
} else {
|
|
167
|
+
// // Unknown type - accept any value
|
|
168
|
+
validationResult = {
|
|
169
|
+
success: true,
|
|
170
|
+
errors: [],
|
|
171
|
+
warnings: [],
|
|
172
|
+
data: value,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Convert TypeValidators result format to ValidationEngine format
|
|
178
|
+
return {
|
|
179
|
+
isValid: validationResult.success,
|
|
180
|
+
errors: (validationResult.errors || []).map((error) => {
|
|
181
|
+
if (typeof error === "string") {
|
|
182
|
+
return error;
|
|
183
|
+
}
|
|
184
|
+
if (error && typeof error === "object" && error.message) {
|
|
185
|
+
return error.message;
|
|
186
|
+
}
|
|
187
|
+
// Fallback: try to extract meaningful information
|
|
188
|
+
if (error && typeof error === "object") {
|
|
189
|
+
if (
|
|
190
|
+
error.toString &&
|
|
191
|
+
error.toString !== Object.prototype.toString
|
|
192
|
+
) {
|
|
193
|
+
return error.toString();
|
|
194
|
+
}
|
|
195
|
+
return JSON.stringify(error);
|
|
196
|
+
}
|
|
197
|
+
return String(error);
|
|
198
|
+
}),
|
|
199
|
+
};
|
|
200
|
+
} catch (error) {
|
|
201
|
+
return {
|
|
202
|
+
isValid: false,
|
|
203
|
+
errors: [
|
|
204
|
+
`Validation error: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
205
|
+
],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Validate against object schema definitions
|
|
212
|
+
*/
|
|
213
|
+
private static validateObjectSchema(
|
|
214
|
+
fieldSchema: any,
|
|
215
|
+
value: any
|
|
216
|
+
): ValidationFieldResult {
|
|
217
|
+
const errors: string[] = [];
|
|
218
|
+
|
|
219
|
+
if (typeof value !== "object" || value === null) {
|
|
220
|
+
errors.push("Expected object but received " + typeof value);
|
|
221
|
+
return { isValid: false, errors };
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Validate all nested fields
|
|
225
|
+
for (const [nestedField, nestedSchema] of Object.entries(fieldSchema)) {
|
|
226
|
+
const nestedResult = this.validateField(nestedSchema, value[nestedField]);
|
|
227
|
+
if (!nestedResult.isValid) {
|
|
228
|
+
const errRes = nestedResult.errors.map((err) => {
|
|
229
|
+
// Handle both string and ValidationError object cases
|
|
230
|
+
const errorMessage =
|
|
231
|
+
typeof err === "string"
|
|
232
|
+
? err
|
|
233
|
+
: err && typeof err === "object" && "message" in err
|
|
234
|
+
? (err as any).message
|
|
235
|
+
: JSON.stringify(err);
|
|
236
|
+
return `${nestedField}: ${errorMessage}`;
|
|
237
|
+
});
|
|
238
|
+
errors.push(...errRes);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return { isValid: errors.length === 0, errors };
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// All individual validation methods removed - now delegated to TypeValidators
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Validate entire object against schema
|
|
249
|
+
*/
|
|
250
|
+
static validateObject(schema: SchemaInterface, data: any): ValidationResult {
|
|
251
|
+
const errors: Record<string, string[]> = {};
|
|
252
|
+
let isValid = true;
|
|
253
|
+
|
|
254
|
+
if (!data || typeof data !== "object") {
|
|
255
|
+
return {
|
|
256
|
+
isValid: false,
|
|
257
|
+
data,
|
|
258
|
+
errors: { _root: ["Expected object but received " + typeof data] },
|
|
259
|
+
timestamp: new Date(),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Validate each field in the schema
|
|
264
|
+
for (const [fieldName, fieldSchema] of Object.entries(schema)) {
|
|
265
|
+
const fieldResult = this.validateField(fieldSchema, data[fieldName]);
|
|
266
|
+
|
|
267
|
+
if (!fieldResult.isValid) {
|
|
268
|
+
errors[fieldName] = fieldResult.errors;
|
|
269
|
+
isValid = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return {
|
|
274
|
+
isValid,
|
|
275
|
+
data,
|
|
276
|
+
errors,
|
|
277
|
+
timestamp: new Date(),
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Type definitions
|
|
284
|
+
*/
|
|
285
|
+
export interface ValidationFieldResult {
|
|
286
|
+
isValid: boolean;
|
|
287
|
+
errors: string[];
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export interface ValidationResult {
|
|
291
|
+
isValid: boolean;
|
|
292
|
+
data: any;
|
|
293
|
+
errors: Record<string, string[]>;
|
|
294
|
+
timestamp: Date;
|
|
295
|
+
}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Interface-like Schema System
|
|
3
|
+
*
|
|
4
|
+
* The most intuitive way to define schemas - just like TypeScript interfaces!
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { Interface as IF} from "reliant-type";
|
|
9
|
+
*
|
|
10
|
+
* // Define schema like a TypeScript interface
|
|
11
|
+
* const UserSchema = IF({
|
|
12
|
+
* id: "number",
|
|
13
|
+
* email: "email",
|
|
14
|
+
* name: "string",
|
|
15
|
+
* age: "number?", // Optional
|
|
16
|
+
* isActive: "boolean?", // Optional
|
|
17
|
+
* tags: "string[]?", // Optional array
|
|
18
|
+
* role: "admin", // Constant value
|
|
19
|
+
* profile: { // Nested object
|
|
20
|
+
* bio: "string?",
|
|
21
|
+
* avatar: "url?"
|
|
22
|
+
* }
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Validate data
|
|
26
|
+
* const result = UserSchema.safeParse(userData);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { InterfaceSchema } from "./InterfaceSchema";
|
|
31
|
+
import {
|
|
32
|
+
ConstantValue,
|
|
33
|
+
OptionalConstantValue,
|
|
34
|
+
OptionalSchemaInterface,
|
|
35
|
+
SchemaInterface,
|
|
36
|
+
SchemaOptions,
|
|
37
|
+
SchemaFieldType,
|
|
38
|
+
UnionValue,
|
|
39
|
+
} from "../../../types/SchemaValidator.type";
|
|
40
|
+
import { InferSchemaType } from "./typescript/TypeInference";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Convert Make objects to string syntax that InterfaceSchema understands
|
|
44
|
+
*/
|
|
45
|
+
function convertMakeObjectsToStrings(definition: any): any {
|
|
46
|
+
if (typeof definition !== "object" || definition === null) {
|
|
47
|
+
return definition;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Handle arrays
|
|
51
|
+
if (Array.isArray(definition)) {
|
|
52
|
+
return definition.map((item) => convertMakeObjectsToStrings(item));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check if this is a Make.const() object: convert => =constVal
|
|
56
|
+
if (
|
|
57
|
+
typeof definition === "object" &&
|
|
58
|
+
"const" in definition &&
|
|
59
|
+
Object.keys(definition).length === 1
|
|
60
|
+
) {
|
|
61
|
+
// Convert Make.const() to string syntax
|
|
62
|
+
return `=${definition.const}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Check if this is a Make.union() object
|
|
66
|
+
if (
|
|
67
|
+
typeof definition === "object" &&
|
|
68
|
+
"union" in definition &&
|
|
69
|
+
Array.isArray(definition.union)
|
|
70
|
+
) {
|
|
71
|
+
// Check if it's an optional union (Make.unionOptional)
|
|
72
|
+
if ("optional" in definition && definition.optional === true) {
|
|
73
|
+
// Convert Make.unionOptional() to string syntax with "?" suffix
|
|
74
|
+
return definition.union.join("|") + "?";
|
|
75
|
+
} else {
|
|
76
|
+
// Convert Make.union() to string syntax
|
|
77
|
+
return definition.union.join("|");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Recursively process nested objects
|
|
82
|
+
const result: any = {};
|
|
83
|
+
for (const [key, value] of Object.entries(definition)) {
|
|
84
|
+
result[key] = convertMakeObjectsToStrings(value);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Create a schema using TypeScript interface-like syntax with full type inference
|
|
91
|
+
*
|
|
92
|
+
* @param definition - Schema definition using TypeScript-like syntax
|
|
93
|
+
* @param options - Optional validation options
|
|
94
|
+
* @returns InterfaceSchema instance with inferred types
|
|
95
|
+
*
|
|
96
|
+
* @example Basic Usage
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const UserSchema = Interface({
|
|
99
|
+
* id: "number",
|
|
100
|
+
* email: "email",
|
|
101
|
+
* name: "string",
|
|
102
|
+
* age: "number?",
|
|
103
|
+
* isActive: "boolean?",
|
|
104
|
+
* tags: "string[]?"
|
|
105
|
+
* });
|
|
106
|
+
*
|
|
107
|
+
* // result is fully typed as:
|
|
108
|
+
* // SchemaValidationResult<{
|
|
109
|
+
* // id: number;
|
|
110
|
+
* // email: string;
|
|
111
|
+
* // name: string;
|
|
112
|
+
* // age?: number;
|
|
113
|
+
* // isActive?: boolean;
|
|
114
|
+
* // tags?: string[];
|
|
115
|
+
* // }>
|
|
116
|
+
* const result = UserSchema.safeParse(data);
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* @example With Constraints
|
|
120
|
+
* ```typescript
|
|
121
|
+
* const UserSchema = Interface({
|
|
122
|
+
* username: "string(3,20)", // 3-20 characters
|
|
123
|
+
* age: "number(18,120)", // 18-120 years
|
|
124
|
+
* tags: "string[](1,10)?", // 1-10 tags, optional
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* @example Nested Objects
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const OrderSchema = Interface({
|
|
131
|
+
* id: "number",
|
|
132
|
+
* customer: {
|
|
133
|
+
* name: "string",
|
|
134
|
+
* email: "email",
|
|
135
|
+
* address: {
|
|
136
|
+
* street: "string",
|
|
137
|
+
* city: "string",
|
|
138
|
+
* zipCode: "string"
|
|
139
|
+
* }
|
|
140
|
+
* },
|
|
141
|
+
* items: [{
|
|
142
|
+
* name: "string",
|
|
143
|
+
* price: "number",
|
|
144
|
+
* quantity: "int"
|
|
145
|
+
* }]
|
|
146
|
+
* });
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export function Interface<const T extends SchemaInterface>(
|
|
150
|
+
definition: T,
|
|
151
|
+
options?: SchemaOptions
|
|
152
|
+
): InterfaceSchema<InferSchemaType<T>> {
|
|
153
|
+
// Convert Make objects to string syntax before creating schema
|
|
154
|
+
const processedDefinition = convertMakeObjectsToStrings(definition);
|
|
155
|
+
|
|
156
|
+
// Debug: Log the conversion (disabled for now)
|
|
157
|
+
// if (process.env.NODE_ENV !== "production") {
|
|
158
|
+
// console.log("DEBUG: Original definition:", JSON.stringify(definition, null, 2));
|
|
159
|
+
// console.log("DEBUG: Processed definition:", JSON.stringify(processedDefinition, null, 2));
|
|
160
|
+
// }
|
|
161
|
+
|
|
162
|
+
return new InterfaceSchema<InferSchemaType<T>>(processedDefinition, options);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Type helper for inferring TypeScript types from schema definitions
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const UserSchema = Interface({
|
|
171
|
+
* id: "number",
|
|
172
|
+
* email: "email",
|
|
173
|
+
* name: "string",
|
|
174
|
+
* age: "number?",
|
|
175
|
+
* tags: "string[]?"
|
|
176
|
+
* });
|
|
177
|
+
*
|
|
178
|
+
* // Infer the TypeScript type
|
|
179
|
+
* type User = InferType<typeof UserSchema>;
|
|
180
|
+
* // User = {
|
|
181
|
+
* // id: number;
|
|
182
|
+
* // email: string;
|
|
183
|
+
* // name: string;
|
|
184
|
+
* // age?: number;
|
|
185
|
+
* // tags?: string[];
|
|
186
|
+
* // }
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export type InferType<T extends InterfaceSchema<any>> =
|
|
190
|
+
T extends InterfaceSchema<infer U> ? U : never;
|
|
191
|
+
|
|
192
|
+
// Export the main inference type for direct use
|
|
193
|
+
export type { InferSchemaType };
|
|
194
|
+
|
|
195
|
+
// Re-export types for convenience
|
|
196
|
+
export type {
|
|
197
|
+
SchemaInterface,
|
|
198
|
+
SchemaOptions,
|
|
199
|
+
SchemaFieldType,
|
|
200
|
+
ConstantValue,
|
|
201
|
+
} from "../../../types/SchemaValidator.type";
|
|
202
|
+
export { InterfaceSchema } from "./InterfaceSchema";
|
|
203
|
+
|
|
204
|
+
// Re-export TypeScript integration
|
|
205
|
+
export { TypeScriptIntegration, IDE, TypeInference } from "./typescript";
|
|
206
|
+
export type {
|
|
207
|
+
ConditionalExpression,
|
|
208
|
+
TypeInferenceResult,
|
|
209
|
+
ConditionalResult,
|
|
210
|
+
FieldPaths,
|
|
211
|
+
GetValueByPath,
|
|
212
|
+
ValidateConditional,
|
|
213
|
+
} from "./typescript";
|
|
214
|
+
|
|
215
|
+
// Re-export validators for advanced usage
|
|
216
|
+
export {
|
|
217
|
+
TypeValidators,
|
|
218
|
+
ConstraintParser,
|
|
219
|
+
TypeGuards,
|
|
220
|
+
ValidationHelpers,
|
|
221
|
+
} from "./validators";
|
|
222
|
+
export type { ParsedConstraints } from "./validators";
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Available field types for schema definitions
|
|
226
|
+
*/
|
|
227
|
+
export const FieldTypes = {
|
|
228
|
+
// Basic types
|
|
229
|
+
STRING: "string" as const,
|
|
230
|
+
STRING_OPTIONAL: "string?" as const,
|
|
231
|
+
NUMBER: "number" as const,
|
|
232
|
+
NUMBER_OPTIONAL: "number?" as const,
|
|
233
|
+
BOOLEAN: "boolean" as const,
|
|
234
|
+
BOOLEAN_OPTIONAL: "boolean?" as const,
|
|
235
|
+
DATE: "date" as const,
|
|
236
|
+
DATE_OPTIONAL: "date?" as const,
|
|
237
|
+
ANY: "any" as const,
|
|
238
|
+
ANY_OPTIONAL: "any?" as const,
|
|
239
|
+
|
|
240
|
+
// String formats
|
|
241
|
+
EMAIL: "email" as const,
|
|
242
|
+
EMAIL_OPTIONAL: "email?" as const,
|
|
243
|
+
URL: "url" as const,
|
|
244
|
+
URL_OPTIONAL: "url?" as const,
|
|
245
|
+
UUID: "uuid" as const,
|
|
246
|
+
UUID_OPTIONAL: "uuid?" as const,
|
|
247
|
+
PHONE: "phone" as const,
|
|
248
|
+
PHONE_OPTIONAL: "phone?" as const,
|
|
249
|
+
SLUG: "slug" as const,
|
|
250
|
+
SLUG_OPTIONAL: "slug?" as const,
|
|
251
|
+
USERNAME: "username" as const,
|
|
252
|
+
USERNAME_OPTIONAL: "username?" as const,
|
|
253
|
+
|
|
254
|
+
// Number types
|
|
255
|
+
INT: "int" as const,
|
|
256
|
+
INT_OPTIONAL: "int?" as const,
|
|
257
|
+
POSITIVE: "positive" as const,
|
|
258
|
+
POSITIVE_OPTIONAL: "positive?" as const,
|
|
259
|
+
FLOAT: "float" as const,
|
|
260
|
+
FLOAT_OPTIONAL: "float?" as const,
|
|
261
|
+
|
|
262
|
+
// Array types
|
|
263
|
+
STRING_ARRAY: "string[]" as const,
|
|
264
|
+
STRING_ARRAY_OPTIONAL: "string[]?" as const,
|
|
265
|
+
NUMBER_ARRAY: "number[]" as const,
|
|
266
|
+
NUMBER_ARRAY_OPTIONAL: "number[]?" as const,
|
|
267
|
+
BOOLEAN_ARRAY: "boolean[]" as const,
|
|
268
|
+
BOOLEAN_ARRAY_OPTIONAL: "boolean[]?" as const,
|
|
269
|
+
INT_ARRAY: "int[]" as const,
|
|
270
|
+
INT_ARRAY_OPTIONAL: "int[]?" as const,
|
|
271
|
+
EMAIL_ARRAY: "email[]" as const,
|
|
272
|
+
EMAIL_ARRAY_OPTIONAL: "email[]?" as const,
|
|
273
|
+
URL_ARRAY: "url[]" as const,
|
|
274
|
+
URL_ARRAY_OPTIONAL: "url[]?" as const,
|
|
275
|
+
|
|
276
|
+
// Record types
|
|
277
|
+
RECORD_STRING_ANY: "record<string,any>" as const,
|
|
278
|
+
RECORD_STRING_ANY_OPTIONAL: "record<string,any>?" as const,
|
|
279
|
+
RECORD_STRING_STRING: "record<string,string>" as const,
|
|
280
|
+
RECORD_STRING_STRING_OPTIONAL: "record<string,string>?" as const,
|
|
281
|
+
RECORD_STRING_NUMBER: "record<string,number>" as const,
|
|
282
|
+
RECORD_STRING_NUMBER_OPTIONAL: "record<string,number>?" as const,
|
|
283
|
+
} as const;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Quick schema creation helpers
|
|
287
|
+
*/
|
|
288
|
+
export const QuickSchemas = {
|
|
289
|
+
/**
|
|
290
|
+
* User schema with common fields
|
|
291
|
+
*/
|
|
292
|
+
User: Interface({
|
|
293
|
+
id: "number",
|
|
294
|
+
email: "email",
|
|
295
|
+
name: "string",
|
|
296
|
+
createdAt: "date?",
|
|
297
|
+
updatedAt: "date?",
|
|
298
|
+
}),
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* API response schema
|
|
302
|
+
*/
|
|
303
|
+
APIResponse: Interface({
|
|
304
|
+
success: "boolean",
|
|
305
|
+
data: "any?",
|
|
306
|
+
errors: "string[]?",
|
|
307
|
+
timestamp: "date?",
|
|
308
|
+
}),
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Pagination schema
|
|
312
|
+
*/
|
|
313
|
+
Pagination: Interface({
|
|
314
|
+
page: "int",
|
|
315
|
+
limit: "int",
|
|
316
|
+
total: "int",
|
|
317
|
+
hasNext: "boolean?",
|
|
318
|
+
hasPrev: "boolean?",
|
|
319
|
+
}),
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Address schema
|
|
323
|
+
*/
|
|
324
|
+
Address: Interface({
|
|
325
|
+
street: "string",
|
|
326
|
+
city: "string",
|
|
327
|
+
state: "string?",
|
|
328
|
+
zipCode: "string",
|
|
329
|
+
country: "string",
|
|
330
|
+
}),
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Contact info schema
|
|
334
|
+
*/
|
|
335
|
+
Contact: Interface({
|
|
336
|
+
email: "email?",
|
|
337
|
+
phone: "phone?",
|
|
338
|
+
website: "url?",
|
|
339
|
+
}),
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Schema modification utilities - transform and combine schemas
|
|
344
|
+
*/
|
|
345
|
+
export { Mod } from "../../../utils/Mod";
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Helper functions for creating schema values
|
|
349
|
+
*/
|
|
350
|
+
export { Make } from "../../../utils/Make";
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Custom error class for schema validation
|
|
354
|
+
*/
|
|
355
|
+
export class SchemaValidationError extends Error {
|
|
356
|
+
constructor(
|
|
357
|
+
message: string,
|
|
358
|
+
public errors: string[],
|
|
359
|
+
public warnings: string[]
|
|
360
|
+
) {
|
|
361
|
+
super(message);
|
|
362
|
+
this.name = "SchemaValidationError";
|
|
363
|
+
}
|
|
364
|
+
}
|