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,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional Validation - dependent field validation
|
|
3
|
+
*
|
|
4
|
+
* This module provides powerful conditional validation where fields can depend
|
|
5
|
+
* on other fields' values, making complex business logic validation simple.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { SchemaInterface } from "../mode/interfaces/Interface";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Conditional validation utilities
|
|
12
|
+
*/
|
|
13
|
+
export const When = {
|
|
14
|
+
/**
|
|
15
|
+
* Create conditional validation based on another field's value
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const UserSchema = Interface({
|
|
20
|
+
* accountType: Make.union("free", "premium", "enterprise"),
|
|
21
|
+
* maxProjects: When.field("accountType").is("free").then("int(1,3)")
|
|
22
|
+
* .is("premium").then("int(1,50)")
|
|
23
|
+
* .is("enterprise").then("int(1,)")
|
|
24
|
+
* .default("int(1,1)"),
|
|
25
|
+
*
|
|
26
|
+
* paymentMethod: When.field("accountType").isNot("free").then("string").else("string?"),
|
|
27
|
+
* billingAddress: When.field("paymentMethod").exists().then({
|
|
28
|
+
* street: "string",
|
|
29
|
+
* city: "string",
|
|
30
|
+
* country: "string(2,2)"
|
|
31
|
+
* }).else("any?")
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
field(fieldName: string): ConditionalBuilder {
|
|
36
|
+
return new ConditionalBuilder(fieldName);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create validation that depends on multiple fields
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const OrderSchema = Interface({
|
|
45
|
+
* orderType: Make.union("pickup", "delivery"),
|
|
46
|
+
* address: "string?",
|
|
47
|
+
* deliveryFee: "number?",
|
|
48
|
+
*
|
|
49
|
+
* // Complex conditional validation
|
|
50
|
+
* ...When.fields(["orderType", "address"]).match({
|
|
51
|
+
* orderType: "delivery",
|
|
52
|
+
* address: (val) => val && val.length > 0
|
|
53
|
+
* }).then({
|
|
54
|
+
* deliveryFee: "number(0,)" // Required for delivery with address
|
|
55
|
+
* }).else({
|
|
56
|
+
* deliveryFee: "number?" // Optional otherwise
|
|
57
|
+
* })
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
fields(fieldNames: string[]): MultiConditionalBuilder {
|
|
62
|
+
return new MultiConditionalBuilder(fieldNames);
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Create custom validation logic
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const EventSchema = Interface({
|
|
71
|
+
* startDate: "date",
|
|
72
|
+
* endDate: "date",
|
|
73
|
+
*
|
|
74
|
+
* // Custom validation: endDate must be after startDate
|
|
75
|
+
* ...When.custom((data) => {
|
|
76
|
+
* if (data.endDate <= data.startDate) {
|
|
77
|
+
* return { error: "End date must be after start date" };
|
|
78
|
+
* }
|
|
79
|
+
* return { valid: true };
|
|
80
|
+
* })
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
custom(
|
|
85
|
+
validator: (data: any) => { valid: true } | { error: string }
|
|
86
|
+
): CustomValidator {
|
|
87
|
+
return new CustomValidator(validator);
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Builder for single field conditional validation
|
|
93
|
+
*/
|
|
94
|
+
class ConditionalBuilder {
|
|
95
|
+
private conditions: Array<{
|
|
96
|
+
condition: (value: any) => boolean;
|
|
97
|
+
schema: any;
|
|
98
|
+
}> = [];
|
|
99
|
+
private defaultSchema: any = null;
|
|
100
|
+
|
|
101
|
+
constructor(private fieldName: string) {}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Check if field equals specific value
|
|
105
|
+
*/
|
|
106
|
+
is(value: any): ConditionalThen {
|
|
107
|
+
return new ConditionalThen(this, (fieldValue) => fieldValue === value);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Check if field does not equal specific value
|
|
112
|
+
*/
|
|
113
|
+
isNot(value: any): ConditionalThen {
|
|
114
|
+
return new ConditionalThen(this, (fieldValue) => fieldValue !== value);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Check if field exists (not null/undefined)
|
|
119
|
+
*/
|
|
120
|
+
exists(): ConditionalThen {
|
|
121
|
+
return new ConditionalThen(this, (fieldValue) => fieldValue != null);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Check if field matches pattern
|
|
126
|
+
*/
|
|
127
|
+
matches(pattern: RegExp): ConditionalThen {
|
|
128
|
+
return new ConditionalThen(
|
|
129
|
+
this,
|
|
130
|
+
(fieldValue) => typeof fieldValue === "string" && pattern.test(fieldValue)
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Check if field is in array of values
|
|
136
|
+
*/
|
|
137
|
+
in(values: any[]): ConditionalThen {
|
|
138
|
+
return new ConditionalThen(this, (fieldValue) =>
|
|
139
|
+
values.includes(fieldValue)
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Custom condition function
|
|
145
|
+
*/
|
|
146
|
+
when(condition: (value: any) => boolean): ConditionalThen {
|
|
147
|
+
return new ConditionalThen(this, condition);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
addCondition(condition: (value: any) => boolean, schema: any): this {
|
|
151
|
+
this.conditions.push({ condition, schema });
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
default(schema: any): any {
|
|
156
|
+
this.defaultSchema = schema;
|
|
157
|
+
return this.build();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
build(): any {
|
|
161
|
+
// Return a special object that the validation engine can recognize
|
|
162
|
+
return {
|
|
163
|
+
__conditional: true,
|
|
164
|
+
fieldName: this.fieldName,
|
|
165
|
+
conditions: this.conditions,
|
|
166
|
+
default: this.defaultSchema,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Builder for the "then" part of conditional validation
|
|
173
|
+
*/
|
|
174
|
+
class ConditionalThen {
|
|
175
|
+
constructor(
|
|
176
|
+
private builder: ConditionalBuilder,
|
|
177
|
+
private condition: (value: any) => boolean
|
|
178
|
+
) {}
|
|
179
|
+
|
|
180
|
+
then(schema: any): ConditionalBuilder {
|
|
181
|
+
return this.builder.addCondition(this.condition, schema);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Builder for multi-field conditional validation
|
|
187
|
+
*/
|
|
188
|
+
class MultiConditionalBuilder {
|
|
189
|
+
private matchConditions: any = {};
|
|
190
|
+
|
|
191
|
+
constructor(private fieldNames: string[]) {}
|
|
192
|
+
|
|
193
|
+
match(conditions: Record<string, any>): MultiConditionalThen {
|
|
194
|
+
this.matchConditions = conditions;
|
|
195
|
+
return new MultiConditionalThen(this, conditions);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Builder for multi-field "then" part
|
|
201
|
+
*/
|
|
202
|
+
class MultiConditionalThen {
|
|
203
|
+
constructor(
|
|
204
|
+
private builder: MultiConditionalBuilder,
|
|
205
|
+
private conditions: Record<string, any>
|
|
206
|
+
) {}
|
|
207
|
+
|
|
208
|
+
then(schema: any): MultiConditionalElse {
|
|
209
|
+
return new MultiConditionalElse(schema, null);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Builder for multi-field "else" part
|
|
215
|
+
*/
|
|
216
|
+
class MultiConditionalElse {
|
|
217
|
+
constructor(
|
|
218
|
+
private thenSchema: any,
|
|
219
|
+
private elseSchema: any
|
|
220
|
+
) {}
|
|
221
|
+
|
|
222
|
+
else(schema: any): any {
|
|
223
|
+
return {
|
|
224
|
+
__multiConditional: true,
|
|
225
|
+
then: this.thenSchema,
|
|
226
|
+
else: schema,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Custom validator builder
|
|
233
|
+
*/
|
|
234
|
+
class CustomValidator {
|
|
235
|
+
constructor(
|
|
236
|
+
private validator: (data: any) => { valid: true } | { error: string }
|
|
237
|
+
) {}
|
|
238
|
+
|
|
239
|
+
build(): any {
|
|
240
|
+
return {
|
|
241
|
+
__customValidator: true,
|
|
242
|
+
validator: this.validator,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* schema composition with inheritance
|
|
249
|
+
*/
|
|
250
|
+
export const Extend = {
|
|
251
|
+
/**
|
|
252
|
+
* Create schema inheritance with method-like syntax
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```typescript
|
|
256
|
+
* const BaseEntitySchema = Interface({
|
|
257
|
+
* id: "uuid",
|
|
258
|
+
* createdAt: "date",
|
|
259
|
+
* updatedAt: "date"
|
|
260
|
+
* });
|
|
261
|
+
*
|
|
262
|
+
* const UserSchema = Extend.from(BaseEntitySchema).with({
|
|
263
|
+
* email: "email",
|
|
264
|
+
* username: "string(3,20)",
|
|
265
|
+
* profile: {
|
|
266
|
+
* firstName: "string",
|
|
267
|
+
* lastName: "string"
|
|
268
|
+
* }
|
|
269
|
+
* });
|
|
270
|
+
*
|
|
271
|
+
* const AdminSchema = Extend.from(UserSchema).with({
|
|
272
|
+
* permissions: "string[]",
|
|
273
|
+
* role: Make.const("admin")
|
|
274
|
+
* }).override({
|
|
275
|
+
* email: "email(,254)" // Override with more specific validation
|
|
276
|
+
* });
|
|
277
|
+
* ```
|
|
278
|
+
*/
|
|
279
|
+
from(baseSchema: SchemaInterface): ExtendBuilder {
|
|
280
|
+
return new ExtendBuilder(baseSchema);
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Builder for schema extension
|
|
286
|
+
*/
|
|
287
|
+
class ExtendBuilder {
|
|
288
|
+
constructor(private baseSchema: SchemaInterface) {}
|
|
289
|
+
|
|
290
|
+
with(additionalFields: any): ExtendWithBuilder {
|
|
291
|
+
return new ExtendWithBuilder(this.baseSchema, additionalFields);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Builder for extended schema with additional methods
|
|
297
|
+
*/
|
|
298
|
+
class ExtendWithBuilder {
|
|
299
|
+
constructor(
|
|
300
|
+
private baseSchema: SchemaInterface,
|
|
301
|
+
private additionalFields: any
|
|
302
|
+
) {}
|
|
303
|
+
|
|
304
|
+
override(overrides: any): SchemaInterface {
|
|
305
|
+
// Merge base schema, additional fields, and overrides
|
|
306
|
+
return {
|
|
307
|
+
...this.baseSchema,
|
|
308
|
+
...this.additionalFields,
|
|
309
|
+
...overrides,
|
|
310
|
+
} as SchemaInterface;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
build(): SchemaInterface {
|
|
314
|
+
return {
|
|
315
|
+
...this.baseSchema,
|
|
316
|
+
...this.additionalFields,
|
|
317
|
+
} as SchemaInterface;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Export all utilities
|
|
323
|
+
*/
|
|
324
|
+
export {
|
|
325
|
+
ConditionalBuilder,
|
|
326
|
+
MultiConditionalBuilder,
|
|
327
|
+
CustomValidator,
|
|
328
|
+
ExtendBuilder,
|
|
329
|
+
};
|
|
330
|
+
export default When;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# ReliantType Extensions
|
|
2
|
+
|
|
3
|
+
Advanced extensions for the ReliantType validation library, providing powerful features for schema validation, documentation generation, and real-time validation.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
The extensions are built with a clean, maintainable architecture:
|
|
8
|
+
|
|
9
|
+
- **Core Extensions**: High-level APIs for common use cases
|
|
10
|
+
- **Specialized Modules**: Focused utilities in the `mods/` directory
|
|
11
|
+
|
|
12
|
+
## Available Extensions
|
|
13
|
+
|
|
14
|
+
### Smart Inference (`Smart`)
|
|
15
|
+
|
|
16
|
+
Automatically infer schema definitions from sample data or TypeScript types.
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { Smart } from 'reliant-type';
|
|
20
|
+
|
|
21
|
+
// Infer from sample data
|
|
22
|
+
const sampleUser = {
|
|
23
|
+
id: 1,
|
|
24
|
+
email: "user@example.com",
|
|
25
|
+
name: "John Doe",
|
|
26
|
+
tags: ["developer", "typescript"]
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const UserSchema = Smart.fromSample(sampleUser);
|
|
30
|
+
// Generates: { id: "positive", email: "email", name: "string", tags: "string[]" }
|
|
31
|
+
|
|
32
|
+
// Infer from TypeScript interface with sample
|
|
33
|
+
interface User {
|
|
34
|
+
id: number;
|
|
35
|
+
email: string;
|
|
36
|
+
name?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const schema = Smart.fromType<User>({
|
|
40
|
+
id: 1,
|
|
41
|
+
email: "user@example.com",
|
|
42
|
+
name: "John"
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Conditional Validation (`When`)
|
|
47
|
+
|
|
48
|
+
Create complex validation rules based on field dependencies.
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { When } from 'reliant-type';
|
|
52
|
+
|
|
53
|
+
const OrderSchema = Interface({
|
|
54
|
+
orderType: Make.union("pickup", "delivery"),
|
|
55
|
+
address: "string?",
|
|
56
|
+
|
|
57
|
+
// Conditional validation
|
|
58
|
+
deliveryFee: When.field("orderType")
|
|
59
|
+
.is("delivery")
|
|
60
|
+
.then("number(0,)")
|
|
61
|
+
.default("number?")
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Real-time Validation (`Live`)
|
|
66
|
+
|
|
67
|
+
Reactive validation for forms and streaming data.
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { Live } from 'reliant-type';
|
|
71
|
+
|
|
72
|
+
// Form validation
|
|
73
|
+
const formValidator = Live.form(UserSchema);
|
|
74
|
+
formValidator.bindField('email', emailInput);
|
|
75
|
+
formValidator.enableAutoValidation();
|
|
76
|
+
|
|
77
|
+
// Stream validation
|
|
78
|
+
const streamValidator = Live.stream(DataSchema);
|
|
79
|
+
streamValidator.onValid(data => processData(data));
|
|
80
|
+
streamValidator.onInvalid((data, errors) => logErrors(errors));
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Auto Documentation (`Docs`)
|
|
84
|
+
|
|
85
|
+
Generate comprehensive documentation from schemas.
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { Docs } from 'reliant-type';
|
|
89
|
+
|
|
90
|
+
// Generate OpenAPI specification
|
|
91
|
+
const openApiSpec = Docs.openapi(UserSchema, {
|
|
92
|
+
title: "User API",
|
|
93
|
+
version: "1.0.0",
|
|
94
|
+
servers: ["https://api.example.com"]
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Generate TypeScript definitions
|
|
98
|
+
const typeDefinitions = Docs.typescript(UserSchema, {
|
|
99
|
+
exportName: "User",
|
|
100
|
+
namespace: "API"
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Generate interactive documentation
|
|
104
|
+
const interactiveDocs = Docs.interactive(UserSchema, {
|
|
105
|
+
title: "User Schema Playground",
|
|
106
|
+
allowTesting: true
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Specialized Modules
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
### OpenAPICo nverter
|
|
114
|
+
|
|
115
|
+
Convert schemas to OpenAPI 3.0 specifications.
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
import { OpenAPIConverter } from 'reliant-type';
|
|
119
|
+
|
|
120
|
+
const openApiSchema = OpenAPIConverter.convertSchema(schema);
|
|
121
|
+
const fullSpec = OpenAPIConverter.generateOpenAPISpec(schema, options);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### TypeScriptGenerator
|
|
125
|
+
|
|
126
|
+
Generate TypeScript code from schemas.
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { TypeScriptGenerator } from 'reliant-type';
|
|
130
|
+
|
|
131
|
+
const interface = TypeScriptGenerator.generateInterface(schema, options);
|
|
132
|
+
const utilityTypes = TypeScriptGenerator.generateUtilityTypes(schema, "User");
|
|
133
|
+
const module = TypeScriptGenerator.generateModule(schema, options);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Quick Access
|
|
137
|
+
|
|
138
|
+
Use the `Quick` object for common operations:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { Quick } from 'reliant-type';
|
|
142
|
+
|
|
143
|
+
// Quick schema inference
|
|
144
|
+
const schema = Quick.fromSample(sampleData);
|
|
145
|
+
|
|
146
|
+
// Quick conditional validation
|
|
147
|
+
const conditionalField = Quick.when("status").is("active").then("string");
|
|
148
|
+
|
|
149
|
+
// Quick documentation
|
|
150
|
+
const docs = Quick.docs(schema);
|
|
151
|
+
const typescript = Quick.typescript(schema);
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
## Features
|
|
156
|
+
|
|
157
|
+
- **Type Safety**: Full TypeScript support with proper type inference
|
|
158
|
+
- **Performance**: Optimized validation engine with early termination
|
|
159
|
+
- **Extensibility**: Clean architecture for adding new features
|
|
160
|
+
- **Browser & Node.js**: Works in both environments
|
|
161
|
+
- **Zero Dependencies**: Built on existing Fortify utilities
|
|
162
|
+
|
|
163
|
+
## Best Practices
|
|
164
|
+
|
|
165
|
+
1. **Use Smart Inference**: Start with `Smart.fromSample()` for rapid prototyping
|
|
166
|
+
2. **Leverage Conditional Validation**: Use `When` for complex business rules
|
|
167
|
+
3. **Real-time Feedback**: Implement `Live` validation for better UX
|
|
168
|
+
4. **Document Everything**: Generate docs with `Docs` for API documentation
|
|
169
|
+
5. **Type Generation**: Use TypeScript generation for type-safe APIs
|
|
170
|
+
|
|
171
|
+
The extensions provide a powerful, flexible foundation for advanced schema validation while maintaining simplicity and performance.
|