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.
Files changed (345) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1305 -0
  3. package/dist/cjs/constants/SECURITY_CONSTANTS.js +49 -0
  4. package/dist/cjs/constants/SECURITY_CONSTANTS.js.map +1 -0
  5. package/dist/cjs/constants/VALIDATION_CONSTANTS.js +103 -0
  6. package/dist/cjs/constants/VALIDATION_CONSTANTS.js.map +1 -0
  7. package/dist/cjs/core/schema/extensions/SmartInference.js +200 -0
  8. package/dist/cjs/core/schema/extensions/SmartInference.js.map +1 -0
  9. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/Docs.js +100 -0
  10. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/Docs.js.map +1 -0
  11. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js +192 -0
  12. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js.map +1 -0
  13. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js +174 -0
  14. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js.map +1 -0
  15. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js +54 -0
  16. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js.map +1 -0
  17. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js +50 -0
  18. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js.map +1 -0
  19. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/index.js +15 -0
  20. package/dist/cjs/core/schema/extensions/components/AutoDocumentation/index.js.map +1 -0
  21. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js +70 -0
  22. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js.map +1 -0
  23. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js +40 -0
  24. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js.map +1 -0
  25. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js +19 -0
  26. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js.map +1 -0
  27. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js +20 -0
  28. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js.map +1 -0
  29. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js +49 -0
  30. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js.map +1 -0
  31. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/index.js +98 -0
  32. package/dist/cjs/core/schema/extensions/components/ConditionalValidation/index.js.map +1 -0
  33. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/FormValidator.js +85 -0
  34. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/FormValidator.js.map +1 -0
  35. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/LiveValidator.js +133 -0
  36. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/LiveValidator.js.map +1 -0
  37. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/StreamValidator.js +351 -0
  38. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/StreamValidator.js.map +1 -0
  39. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/index.js +109 -0
  40. package/dist/cjs/core/schema/extensions/components/RealtimeValidation/index.js.map +1 -0
  41. package/dist/cjs/core/schema/extensions/index.js +61 -0
  42. package/dist/cjs/core/schema/extensions/index.js.map +1 -0
  43. package/dist/cjs/core/schema/extensions/mods/index.js +51 -0
  44. package/dist/cjs/core/schema/extensions/mods/index.js.map +1 -0
  45. package/dist/cjs/core/schema/extensions/mods/openapi-converter.js +227 -0
  46. package/dist/cjs/core/schema/extensions/mods/openapi-converter.js.map +1 -0
  47. package/dist/cjs/core/schema/extensions/mods/typescript-generator.js +287 -0
  48. package/dist/cjs/core/schema/extensions/mods/typescript-generator.js.map +1 -0
  49. package/dist/cjs/core/schema/extensions/mods/validation-engine.js +224 -0
  50. package/dist/cjs/core/schema/extensions/mods/validation-engine.js.map +1 -0
  51. package/dist/cjs/core/schema/mode/interfaces/Interface.js +277 -0
  52. package/dist/cjs/core/schema/mode/interfaces/Interface.js.map +1 -0
  53. package/dist/cjs/core/schema/mode/interfaces/InterfaceSchema.js +1431 -0
  54. package/dist/cjs/core/schema/mode/interfaces/InterfaceSchema.js.map +1 -0
  55. package/dist/cjs/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js +520 -0
  56. package/dist/cjs/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js.map +1 -0
  57. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js +624 -0
  58. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js.map +1 -0
  59. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js +811 -0
  60. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js.map +1 -0
  61. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js +599 -0
  62. package/dist/cjs/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js.map +1 -0
  63. package/dist/cjs/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js +89 -0
  64. package/dist/cjs/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js.map +1 -0
  65. package/dist/cjs/core/schema/mode/interfaces/errors/ErrorHandler.js +356 -0
  66. package/dist/cjs/core/schema/mode/interfaces/errors/ErrorHandler.js.map +1 -0
  67. package/dist/cjs/core/schema/mode/interfaces/errors/types/errors.type.js +80 -0
  68. package/dist/cjs/core/schema/mode/interfaces/errors/types/errors.type.js.map +1 -0
  69. package/dist/cjs/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js +778 -0
  70. package/dist/cjs/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js.map +1 -0
  71. package/dist/cjs/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js +523 -0
  72. package/dist/cjs/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js.map +1 -0
  73. package/dist/cjs/core/schema/mode/interfaces/typescript/ConditionalTypes.js +681 -0
  74. package/dist/cjs/core/schema/mode/interfaces/typescript/ConditionalTypes.js.map +1 -0
  75. package/dist/cjs/core/schema/mode/interfaces/typescript/IDESupport.js +430 -0
  76. package/dist/cjs/core/schema/mode/interfaces/typescript/IDESupport.js.map +1 -0
  77. package/dist/cjs/core/schema/mode/interfaces/typescript/TypeInference.js +225 -0
  78. package/dist/cjs/core/schema/mode/interfaces/typescript/TypeInference.js.map +1 -0
  79. package/dist/cjs/core/schema/mode/interfaces/typescript/index.js +44 -0
  80. package/dist/cjs/core/schema/mode/interfaces/typescript/index.js.map +1 -0
  81. package/dist/cjs/core/schema/mode/interfaces/validators/ConstraintParser.js +1134 -0
  82. package/dist/cjs/core/schema/mode/interfaces/validators/ConstraintParser.js.map +1 -0
  83. package/dist/cjs/core/schema/mode/interfaces/validators/TypeGuards.js +256 -0
  84. package/dist/cjs/core/schema/mode/interfaces/validators/TypeGuards.js.map +1 -0
  85. package/dist/cjs/core/schema/mode/interfaces/validators/TypeValidators.js +429 -0
  86. package/dist/cjs/core/schema/mode/interfaces/validators/TypeValidators.js.map +1 -0
  87. package/dist/cjs/core/schema/mode/interfaces/validators/UnionCache.js +404 -0
  88. package/dist/cjs/core/schema/mode/interfaces/validators/UnionCache.js.map +1 -0
  89. package/dist/cjs/core/schema/mode/interfaces/validators/ValidationHelpers.js +851 -0
  90. package/dist/cjs/core/schema/mode/interfaces/validators/ValidationHelpers.js.map +1 -0
  91. package/dist/cjs/core/schema/mode/interfaces/validators/mods/passValidator.js +262 -0
  92. package/dist/cjs/core/schema/mode/interfaces/validators/mods/passValidator.js.map +1 -0
  93. package/dist/cjs/core/schema/mode/interfaces/validators/mods/securityValidator.js +887 -0
  94. package/dist/cjs/core/schema/mode/interfaces/validators/mods/securityValidator.js.map +1 -0
  95. package/dist/cjs/core/schema/mode/interfaces/validators/mods/urlValidation.js +191 -0
  96. package/dist/cjs/core/schema/mode/interfaces/validators/mods/urlValidation.js.map +1 -0
  97. package/dist/cjs/core/schema/optimization/ObjectValidationCache.js +462 -0
  98. package/dist/cjs/core/schema/optimization/ObjectValidationCache.js.map +1 -0
  99. package/dist/cjs/core/schema/optimization/PerformanceMonitor.js +773 -0
  100. package/dist/cjs/core/schema/optimization/PerformanceMonitor.js.map +1 -0
  101. package/dist/cjs/core/schema/optimization/SchemaCompiler.js +600 -0
  102. package/dist/cjs/core/schema/optimization/SchemaCompiler.js.map +1 -0
  103. package/dist/cjs/core/types/ValidatorTypes.js +70 -0
  104. package/dist/cjs/core/types/ValidatorTypes.js.map +1 -0
  105. package/dist/cjs/core/types/parser.type.js +12 -0
  106. package/dist/cjs/core/types/parser.type.js.map +1 -0
  107. package/dist/cjs/core/utils/Make.js +61 -0
  108. package/dist/cjs/core/utils/Make.js.map +1 -0
  109. package/dist/cjs/core/utils/Mod.js +1033 -0
  110. package/dist/cjs/core/utils/Mod.js.map +1 -0
  111. package/dist/cjs/core/utils/UrlArgs.js +102 -0
  112. package/dist/cjs/core/utils/UrlArgs.js.map +1 -0
  113. package/dist/cjs/core/utils/arrayToEnum.js +18 -0
  114. package/dist/cjs/core/utils/arrayToEnum.js.map +1 -0
  115. package/dist/cjs/core/utils/createUrlArgsEnumFArray.js +13 -0
  116. package/dist/cjs/core/utils/createUrlArgsEnumFArray.js.map +1 -0
  117. package/dist/cjs/core/utils/securityHelpers.js +215 -0
  118. package/dist/cjs/core/utils/securityHelpers.js.map +1 -0
  119. package/dist/cjs/core/utils/securityValidatorHelpers.js +65 -0
  120. package/dist/cjs/core/utils/securityValidatorHelpers.js.map +1 -0
  121. package/dist/cjs/index.js +31 -0
  122. package/dist/cjs/index.js.map +1 -0
  123. package/dist/cjs/package.json +3 -0
  124. package/dist/esm/constants/SECURITY_CONSTANTS.js +47 -0
  125. package/dist/esm/constants/SECURITY_CONSTANTS.js.map +1 -0
  126. package/dist/esm/constants/VALIDATION_CONSTANTS.js +98 -0
  127. package/dist/esm/constants/VALIDATION_CONSTANTS.js.map +1 -0
  128. package/dist/esm/core/schema/extensions/SmartInference.js +197 -0
  129. package/dist/esm/core/schema/extensions/SmartInference.js.map +1 -0
  130. package/dist/esm/core/schema/extensions/components/AutoDocumentation/Docs.js +98 -0
  131. package/dist/esm/core/schema/extensions/components/AutoDocumentation/Docs.js.map +1 -0
  132. package/dist/esm/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js +190 -0
  133. package/dist/esm/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.js.map +1 -0
  134. package/dist/esm/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js +172 -0
  135. package/dist/esm/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.js.map +1 -0
  136. package/dist/esm/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js +52 -0
  137. package/dist/esm/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.js.map +1 -0
  138. package/dist/esm/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js +48 -0
  139. package/dist/esm/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.js.map +1 -0
  140. package/dist/esm/core/schema/extensions/components/AutoDocumentation/index.js +12 -0
  141. package/dist/esm/core/schema/extensions/components/AutoDocumentation/index.js.map +1 -0
  142. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js +68 -0
  143. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.js.map +1 -0
  144. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js +38 -0
  145. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalElse.js.map +1 -0
  146. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js +17 -0
  147. package/dist/esm/core/schema/extensions/components/ConditionalValidation/ConditionalThen.js.map +1 -0
  148. package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js +18 -0
  149. package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.js.map +1 -0
  150. package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js +45 -0
  151. package/dist/esm/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.js.map +1 -0
  152. package/dist/esm/core/schema/extensions/components/ConditionalValidation/index.js +92 -0
  153. package/dist/esm/core/schema/extensions/components/ConditionalValidation/index.js.map +1 -0
  154. package/dist/esm/core/schema/extensions/components/RealtimeValidation/FormValidator.js +83 -0
  155. package/dist/esm/core/schema/extensions/components/RealtimeValidation/FormValidator.js.map +1 -0
  156. package/dist/esm/core/schema/extensions/components/RealtimeValidation/LiveValidator.js +131 -0
  157. package/dist/esm/core/schema/extensions/components/RealtimeValidation/LiveValidator.js.map +1 -0
  158. package/dist/esm/core/schema/extensions/components/RealtimeValidation/StreamValidator.js +349 -0
  159. package/dist/esm/core/schema/extensions/components/RealtimeValidation/StreamValidator.js.map +1 -0
  160. package/dist/esm/core/schema/extensions/components/RealtimeValidation/index.js +103 -0
  161. package/dist/esm/core/schema/extensions/components/RealtimeValidation/index.js.map +1 -0
  162. package/dist/esm/core/schema/extensions/index.js +53 -0
  163. package/dist/esm/core/schema/extensions/index.js.map +1 -0
  164. package/dist/esm/core/schema/extensions/mods/index.js +47 -0
  165. package/dist/esm/core/schema/extensions/mods/index.js.map +1 -0
  166. package/dist/esm/core/schema/extensions/mods/openapi-converter.js +225 -0
  167. package/dist/esm/core/schema/extensions/mods/openapi-converter.js.map +1 -0
  168. package/dist/esm/core/schema/extensions/mods/typescript-generator.js +284 -0
  169. package/dist/esm/core/schema/extensions/mods/typescript-generator.js.map +1 -0
  170. package/dist/esm/core/schema/extensions/mods/validation-engine.js +222 -0
  171. package/dist/esm/core/schema/extensions/mods/validation-engine.js.map +1 -0
  172. package/dist/esm/core/schema/mode/interfaces/Interface.js +269 -0
  173. package/dist/esm/core/schema/mode/interfaces/Interface.js.map +1 -0
  174. package/dist/esm/core/schema/mode/interfaces/InterfaceSchema.js +1429 -0
  175. package/dist/esm/core/schema/mode/interfaces/InterfaceSchema.js.map +1 -0
  176. package/dist/esm/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js +518 -0
  177. package/dist/esm/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.js.map +1 -0
  178. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js +620 -0
  179. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalAST.js.map +1 -0
  180. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js +809 -0
  181. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.js.map +1 -0
  182. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js +597 -0
  183. package/dist/esm/core/schema/mode/interfaces/conditional/parser/ConditionalParser.js.map +1 -0
  184. package/dist/esm/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js +89 -0
  185. package/dist/esm/core/schema/mode/interfaces/conditional/types/ConditionalTypes.js.map +1 -0
  186. package/dist/esm/core/schema/mode/interfaces/errors/ErrorHandler.js +354 -0
  187. package/dist/esm/core/schema/mode/interfaces/errors/ErrorHandler.js.map +1 -0
  188. package/dist/esm/core/schema/mode/interfaces/errors/types/errors.type.js +80 -0
  189. package/dist/esm/core/schema/mode/interfaces/errors/types/errors.type.js.map +1 -0
  190. package/dist/esm/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js +776 -0
  191. package/dist/esm/core/schema/mode/interfaces/precompilation/FieldPrecompilers.js.map +1 -0
  192. package/dist/esm/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js +521 -0
  193. package/dist/esm/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.js.map +1 -0
  194. package/dist/esm/core/schema/mode/interfaces/typescript/ConditionalTypes.js +681 -0
  195. package/dist/esm/core/schema/mode/interfaces/typescript/ConditionalTypes.js.map +1 -0
  196. package/dist/esm/core/schema/mode/interfaces/typescript/IDESupport.js +428 -0
  197. package/dist/esm/core/schema/mode/interfaces/typescript/IDESupport.js.map +1 -0
  198. package/dist/esm/core/schema/mode/interfaces/typescript/TypeInference.js +223 -0
  199. package/dist/esm/core/schema/mode/interfaces/typescript/TypeInference.js.map +1 -0
  200. package/dist/esm/core/schema/mode/interfaces/typescript/index.js +35 -0
  201. package/dist/esm/core/schema/mode/interfaces/typescript/index.js.map +1 -0
  202. package/dist/esm/core/schema/mode/interfaces/validators/ConstraintParser.js +1132 -0
  203. package/dist/esm/core/schema/mode/interfaces/validators/ConstraintParser.js.map +1 -0
  204. package/dist/esm/core/schema/mode/interfaces/validators/TypeGuards.js +254 -0
  205. package/dist/esm/core/schema/mode/interfaces/validators/TypeGuards.js.map +1 -0
  206. package/dist/esm/core/schema/mode/interfaces/validators/TypeValidators.js +427 -0
  207. package/dist/esm/core/schema/mode/interfaces/validators/TypeValidators.js.map +1 -0
  208. package/dist/esm/core/schema/mode/interfaces/validators/UnionCache.js +400 -0
  209. package/dist/esm/core/schema/mode/interfaces/validators/UnionCache.js.map +1 -0
  210. package/dist/esm/core/schema/mode/interfaces/validators/ValidationHelpers.js +849 -0
  211. package/dist/esm/core/schema/mode/interfaces/validators/ValidationHelpers.js.map +1 -0
  212. package/dist/esm/core/schema/mode/interfaces/validators/mods/passValidator.js +260 -0
  213. package/dist/esm/core/schema/mode/interfaces/validators/mods/passValidator.js.map +1 -0
  214. package/dist/esm/core/schema/mode/interfaces/validators/mods/securityValidator.js +881 -0
  215. package/dist/esm/core/schema/mode/interfaces/validators/mods/securityValidator.js.map +1 -0
  216. package/dist/esm/core/schema/mode/interfaces/validators/mods/urlValidation.js +189 -0
  217. package/dist/esm/core/schema/mode/interfaces/validators/mods/urlValidation.js.map +1 -0
  218. package/dist/esm/core/schema/optimization/ObjectValidationCache.js +460 -0
  219. package/dist/esm/core/schema/optimization/ObjectValidationCache.js.map +1 -0
  220. package/dist/esm/core/schema/optimization/PerformanceMonitor.js +771 -0
  221. package/dist/esm/core/schema/optimization/PerformanceMonitor.js.map +1 -0
  222. package/dist/esm/core/schema/optimization/SchemaCompiler.js +598 -0
  223. package/dist/esm/core/schema/optimization/SchemaCompiler.js.map +1 -0
  224. package/dist/esm/core/types/ValidatorTypes.js +65 -0
  225. package/dist/esm/core/types/ValidatorTypes.js.map +1 -0
  226. package/dist/esm/core/types/parser.type.js +12 -0
  227. package/dist/esm/core/types/parser.type.js.map +1 -0
  228. package/dist/esm/core/utils/Make.js +59 -0
  229. package/dist/esm/core/utils/Make.js.map +1 -0
  230. package/dist/esm/core/utils/Mod.js +1031 -0
  231. package/dist/esm/core/utils/Mod.js.map +1 -0
  232. package/dist/esm/core/utils/UrlArgs.js +98 -0
  233. package/dist/esm/core/utils/UrlArgs.js.map +1 -0
  234. package/dist/esm/core/utils/arrayToEnum.js +16 -0
  235. package/dist/esm/core/utils/arrayToEnum.js.map +1 -0
  236. package/dist/esm/core/utils/createUrlArgsEnumFArray.js +11 -0
  237. package/dist/esm/core/utils/createUrlArgsEnumFArray.js.map +1 -0
  238. package/dist/esm/core/utils/securityHelpers.js +207 -0
  239. package/dist/esm/core/utils/securityHelpers.js.map +1 -0
  240. package/dist/esm/core/utils/securityValidatorHelpers.js +62 -0
  241. package/dist/esm/core/utils/securityValidatorHelpers.js.map +1 -0
  242. package/dist/esm/index.js +12 -0
  243. package/dist/esm/index.js.map +1 -0
  244. package/dist/esm/package.json +3 -0
  245. package/dist/schema.d.ts +2595 -0
  246. package/docs/ALL_TYPES.md +120 -0
  247. package/docs/API-STABILITY.md +336 -0
  248. package/docs/CONDITIONAL-VALIDATION.md +637 -0
  249. package/docs/EXAMPLES.md +876 -0
  250. package/docs/FIELD-TYPES.md +829 -0
  251. package/docs/GETTING-STARTED.md +394 -0
  252. package/docs/LIVE-UTILITY.md +1137 -0
  253. package/docs/QUICK-REFERENCE.md +346 -0
  254. package/docs/README.md +205 -0
  255. package/docs/VSCODE-EXTENSION.md +458 -0
  256. package/package.json +219 -0
  257. package/src/bench/BENCHMARK-RESULTS.md +211 -0
  258. package/src/bench/benchmark-results.json +148 -0
  259. package/src/bench/performance-comparison.ts +218 -0
  260. package/src/bench/precompilation-benchmark.ts +218 -0
  261. package/src/constants/SECURITY_CONSTANTS.ts +44 -0
  262. package/src/constants/VALIDATION_CONSTANTS.ts +176 -0
  263. package/src/core/README.md +395 -0
  264. package/src/core/compiler/SchemaTransformer.ts +279 -0
  265. package/src/core/compiler/TypeAnalyzer.ts +378 -0
  266. package/src/core/compiler/TypeScriptCompilerIntegration.ts +220 -0
  267. package/src/core/compiler/TypeToSchemaConverter.ts +288 -0
  268. package/src/core/index.ts +70 -0
  269. package/src/core/schema/extensions/AutoDocumentation.ts +572 -0
  270. package/src/core/schema/extensions/ConditionalValidation.ts +330 -0
  271. package/src/core/schema/extensions/README.md +171 -0
  272. package/src/core/schema/extensions/RealtimeValidation.ts +656 -0
  273. package/src/core/schema/extensions/SmartInference.ts +224 -0
  274. package/src/core/schema/extensions/components/AutoDocumentation/Docs.ts +98 -0
  275. package/src/core/schema/extensions/components/AutoDocumentation/DocumentationGenerator.ts +201 -0
  276. package/src/core/schema/extensions/components/AutoDocumentation/InteractiveDocumentationGenerator.ts +176 -0
  277. package/src/core/schema/extensions/components/AutoDocumentation/OpenAPIGenerator.ts +175 -0
  278. package/src/core/schema/extensions/components/AutoDocumentation/SchemaAnalyzer.ts +49 -0
  279. package/src/core/schema/extensions/components/AutoDocumentation/TypeScriptGenerator.ts +54 -0
  280. package/src/core/schema/extensions/components/AutoDocumentation/index.ts +17 -0
  281. package/src/core/schema/extensions/components/ConditionalValidation/ConditionalBuilder.ts +101 -0
  282. package/src/core/schema/extensions/components/ConditionalValidation/ConditionalElse.ts +65 -0
  283. package/src/core/schema/extensions/components/ConditionalValidation/ConditionalThen.ts +33 -0
  284. package/src/core/schema/extensions/components/ConditionalValidation/Extend.ts +75 -0
  285. package/src/core/schema/extensions/components/ConditionalValidation/MultiConditionalBuilder.ts +16 -0
  286. package/src/core/schema/extensions/components/ConditionalValidation/MultiConditionalThen.ts +50 -0
  287. package/src/core/schema/extensions/components/ConditionalValidation/index.ts +104 -0
  288. package/src/core/schema/extensions/components/RealtimeValidation/FormValidator.ts +88 -0
  289. package/src/core/schema/extensions/components/RealtimeValidation/LiveValidator.ts +171 -0
  290. package/src/core/schema/extensions/components/RealtimeValidation/StreamValidator.ts +397 -0
  291. package/src/core/schema/extensions/components/RealtimeValidation/index.ts +114 -0
  292. package/src/core/schema/extensions/index.ts +76 -0
  293. package/src/core/schema/extensions/mods/index.ts +131 -0
  294. package/src/core/schema/extensions/mods/openapi-converter.ts +338 -0
  295. package/src/core/schema/extensions/mods/typescript-generator.ts +379 -0
  296. package/src/core/schema/extensions/mods/validation-engine.ts +295 -0
  297. package/src/core/schema/mode/interfaces/Interface.ts +364 -0
  298. package/src/core/schema/mode/interfaces/InterfaceSchema.ts +1838 -0
  299. package/src/core/schema/mode/interfaces/README.md +278 -0
  300. package/src/core/schema/mode/interfaces/conditional/evaluator/ConditionalEvaluator.ts +657 -0
  301. package/src/core/schema/mode/interfaces/conditional/parser/ConditionalAST.ts +826 -0
  302. package/src/core/schema/mode/interfaces/conditional/parser/ConditionalLexer.ts +992 -0
  303. package/src/core/schema/mode/interfaces/conditional/parser/ConditionalParser.ts +803 -0
  304. package/src/core/schema/mode/interfaces/conditional/parser/readme.md +406 -0
  305. package/src/core/schema/mode/interfaces/conditional/types/ConditionalTypes.ts +273 -0
  306. package/src/core/schema/mode/interfaces/errors/ErrorHandler.ts +624 -0
  307. package/src/core/schema/mode/interfaces/errors/types/errors.type.ts +102 -0
  308. package/src/core/schema/mode/interfaces/precompilation/FieldPrecompilers.ts +962 -0
  309. package/src/core/schema/mode/interfaces/precompilation/SchemaPrecompiler.ts +667 -0
  310. package/src/core/schema/mode/interfaces/typescript/ConditionalTypes.ts +1534 -0
  311. package/src/core/schema/mode/interfaces/typescript/IDESupport.ts +534 -0
  312. package/src/core/schema/mode/interfaces/typescript/TypeInference.ts +737 -0
  313. package/src/core/schema/mode/interfaces/typescript/index.ts +92 -0
  314. package/src/core/schema/mode/interfaces/validators/ConstraintParser.ts +1438 -0
  315. package/src/core/schema/mode/interfaces/validators/EnhancedErrorReporting.ts +227 -0
  316. package/src/core/schema/mode/interfaces/validators/TypeGuards.ts +288 -0
  317. package/src/core/schema/mode/interfaces/validators/TypeValidators.ts +660 -0
  318. package/src/core/schema/mode/interfaces/validators/UnionCache.ts +508 -0
  319. package/src/core/schema/mode/interfaces/validators/ValidationHelpers.ts +1257 -0
  320. package/src/core/schema/mode/interfaces/validators/index.ts +21 -0
  321. package/src/core/schema/mode/interfaces/validators/mods/passValidator.ts +424 -0
  322. package/src/core/schema/mode/interfaces/validators/mods/securityValidator.ts +1634 -0
  323. package/src/core/schema/mode/interfaces/validators/mods/urlValidation.ts +333 -0
  324. package/src/core/schema/optimization/ObjectValidationCache.ts +560 -0
  325. package/src/core/schema/optimization/PerformanceInitializer.ts +188 -0
  326. package/src/core/schema/optimization/PerformanceMonitor.ts +898 -0
  327. package/src/core/schema/optimization/SchemaCompiler.ts +730 -0
  328. package/src/core/testing/TestDataGenerator.ts +590 -0
  329. package/src/core/types/SchemaValidator.type.ts +210 -0
  330. package/src/core/types/ValidatorTypes.ts +93 -0
  331. package/src/core/types/extension.type.ts +109 -0
  332. package/src/core/types/objValidationCache.ts +17 -0
  333. package/src/core/types/parser.type.ts +15 -0
  334. package/src/core/types/perfoMonitor.ts +37 -0
  335. package/src/core/types/scompiler.ts +22 -0
  336. package/src/core/types/securityValidator.type.ts +10 -0
  337. package/src/core/types/types.ts +154 -0
  338. package/src/core/utils/Make.ts +97 -0
  339. package/src/core/utils/Mod.ts +1168 -0
  340. package/src/core/utils/UrlArgs.ts +124 -0
  341. package/src/core/utils/arrayToEnum.ts +89 -0
  342. package/src/core/utils/createUrlArgsEnumFArray.ts +11 -0
  343. package/src/core/utils/securityHelpers.ts +341 -0
  344. package/src/core/utils/securityValidatorHelpers.ts +76 -0
  345. package/src/index.ts +124 -0
@@ -0,0 +1,637 @@
1
+ # Conditional Validation Guide
2
+
3
+ Complete guide to ReliantType's conditional validation - from basic V1 syntax to advanced V2 runtime methods.
4
+
5
+ ## 📚 Table of Contents
6
+
7
+ - [Introduction](#introduction)
8
+ - [V1 Conditional Validation (Legacy)](#v1-conditional-validation-legacy)
9
+ - [V2 Conditional Validation (Current)](#v2-conditional-validation-current)
10
+ - [V2 Runtime Methods](#v2-runtime-methods)
11
+ - [Advanced Patterns](#advanced-patterns)
12
+ - [Migration from V1 to V2](#migration-from-v1-to-v2)
13
+ - [Best Practices](#best-practices)
14
+
15
+ ## Introduction
16
+
17
+ Conditional validation allows you to create dynamic validation rules based on the values of other fields or runtime properties. ReliantType supports both V1 (legacy) and V2 (current) conditional validation syntax.
18
+
19
+ ### Basic Concept
20
+
21
+ ```typescript
22
+ const Schema = Interface({
23
+ role: "admin|user|guest",
24
+
25
+ // Conditional validation: "when condition *? then : else"
26
+ permissions: "when role=admin *? string[] : string[]?",
27
+ // ^^^^ ^^ ^
28
+ // keyword operator separator
29
+ });
30
+ ```
31
+
32
+ ## V1 Conditional Validation (Legacy)
33
+
34
+ V1 syntax is still supported for backward compatibility but V2 is recommended for new projects. But the same logic can be applied to V2, only the methods call syntax are different.
35
+
36
+ ### Basic V1 Syntax
37
+
38
+ ```typescript
39
+ const V1Schema = Interface({
40
+ role: "admin|user|guest",
41
+ accountType: "free|premium|enterprise",
42
+ age: "number(13,120)",
43
+
44
+ // Basic equality
45
+ adminAccess: "when role=admin *? string[] : string[]?",
46
+
47
+ // Inequality
48
+ nonGuestAccess: "when role!=guest *? boolean : boolean?",
49
+
50
+ // Numeric comparisons
51
+ adultContent: "when age>=18 *? boolean : boolean?",
52
+ seniorDiscount: "when age>65 *? number(0,50) : number(0,0)",
53
+ youthProgram: "when age<25 *? boolean : boolean?",
54
+
55
+ // Value inclusion
56
+ premiumFeatures:
57
+ "when accountType.$in(premium,enterprise) *? string[] : string[]?",
58
+ });
59
+ ```
60
+
61
+ ### V1 Operators
62
+
63
+ | Operator | Description | Example |
64
+ | -------- | --------------------- | ------------------------------- |
65
+ | `=` | Equals | `when role=admin` |
66
+ | `!=` | Not equals | `when role!=guest` |
67
+ | `>` | Greater than | `when age>18` |
68
+ | `>=` | Greater than or equal | `when age>=21` |
69
+ | `<` | Less than | `when age<65` |
70
+ | `<=` | Less than or equal | `when age<=25` |
71
+ | `.in()` | Value in list | `when role.in(admin,moderator)` |
72
+
73
+ ### V1 Limitations
74
+
75
+ - Will be deprecated in future versions
76
+ - Limited to simple property comparisons
77
+ - No runtime property existence checking
78
+ - No complex method calls
79
+ - Limited string operations
80
+
81
+ ## V2 Conditional Validation (Current)
82
+
83
+ V2 introduces powerful runtime property checking with the new `property.$method()` syntax.
84
+
85
+ ### Basic V2 Syntax
86
+
87
+ ```typescript
88
+ const V2Schema = Interface({
89
+ // Runtime data objects
90
+ config: "any?",
91
+ user: "any?",
92
+ features: "any?",
93
+
94
+ // Basic user data
95
+ id: "uuid",
96
+ email: "email",
97
+ role: "admin|user|guest",
98
+
99
+ // V2 Runtime Methods - Enhanced property checking
100
+ hasPermissions: "when config.permissions.$exists() *? boolean : =false",
101
+ hasProfile: "when user.profile.$exists() *? boolean : =false",
102
+ isListEmpty: "when config.items.$empty() *? boolean : =true",
103
+ hasAdminRole: "when user.roles.$contains(admin) *? boolean : =false",
104
+ });
105
+ ```
106
+
107
+ ### V2 Advantages
108
+
109
+ - **Runtime property checking** - Check if properties exist at runtime
110
+ - **Deep property access** - Navigate nested objects safely
111
+ - **String operations** - Advanced string checking methods
112
+ - **Numeric operations** - Range and value checking
113
+ - **Complex defaults** - Object and array default values
114
+ - **Special character support** - Handle properties with special characters
115
+
116
+ ## V2 Runtime Methods
117
+
118
+ ### Property Existence Methods
119
+
120
+ #### `$exists()` - Check Property Existence
121
+
122
+ ```typescript
123
+ const ExistsSchema = Interface({
124
+ config: "any?",
125
+ user: "any?",
126
+
127
+ // Basic existence checking
128
+ hasConfig: "when config.$exists() *? boolean : =false",
129
+ hasUserProfile: "when user.profile.$exists() *? boolean : =false",
130
+
131
+ // Deep nested checking
132
+ hasAdvancedSettings:
133
+ "when user.profile.settings.advanced.$exists() *? boolean : =false",
134
+
135
+ // Special characters
136
+ hasSpecialFeature:
137
+ 'when config["admin-override"].$exists() *? boolean : =false',
138
+
139
+ // Unicode support
140
+ hasUnicodeFeature: "when features.feature_🚀.$exists() *? boolean : =false",
141
+ });
142
+ ```
143
+
144
+ ### Empty/Null Checking Methods
145
+
146
+ #### `$empty()` - Check if Empty
147
+
148
+ ```typescript
149
+ const EmptySchema = Interface({
150
+ data: "any?",
151
+
152
+ // String empty checking
153
+ hasContent: "when data.description.$empty() *? =no_content : =has_content",
154
+
155
+ // Array empty checking
156
+ hasItems: "when data.items.$empty() *? =no_items : =has_items",
157
+
158
+ // Object empty checking
159
+ hasMetadata: "when data.metadata.$empty() *? =no_metadata : =has_metadata",
160
+ });
161
+ ```
162
+
163
+ #### `$null()` - Check if Null
164
+
165
+ ```typescript
166
+ const NullSchema = Interface({
167
+ data: "any?",
168
+
169
+ // Null checking
170
+ isDataNull: "when data.value.$null() *? =is_null : =not_null",
171
+
172
+ // Combined with existence
173
+ hasValidData:
174
+ "when data.value.$exists() && !data.value.$null() *? boolean : =false",
175
+ });
176
+ ```
177
+
178
+ ### String Methods
179
+
180
+ #### `$contains(value)` - Check String Contains
181
+
182
+ ```typescript
183
+ const ContainsSchema = Interface({
184
+ data: "any?",
185
+
186
+ // Basic contains
187
+ hasImportantInfo:
188
+ "when data.description.$contains(important) *? boolean : =none",
189
+
190
+ // Multiple contains checks
191
+ hasKeywords:
192
+ "when data.content.$contains(urgent) || data.content.$contains(priority) *? boolean : =no_keywords",
193
+
194
+ // Case-sensitive checking
195
+ hasExactMatch: "when data.title.$contains(URGENT) *? boolean : =no_match",
196
+ });
197
+
198
+ const data = {
199
+ title: "Big title ..... ",
200
+ content: "something more beautifull....urgent",
201
+ description: `Lorem ipsum dolor sit amet consectetur, adipisicing elit. Harum neque
202
+ architecto commodi ipsam excepturi repellat consequatur, provident
203
+ asperiores. Excepturi earum vero amet enim consequatur quasi, fugit
204
+ cupiditate! Corrupti, incidunt exercitationem. something ..... `,
205
+ };
206
+ const result = ContainsSchema.safeParse({
207
+ data,
208
+ hasExactMatch: "no_match",
209
+ hasImportantInfo: "none",
210
+ hasKeywords: "no_keywords",
211
+ });
212
+ if (result.success) {
213
+ console.log("✅ Expected success:", result.data);
214
+ } else {
215
+ console.log("❌ Expected errors:", result.errors);
216
+ }
217
+ ```
218
+
219
+ #### `$startsWith(prefix)` - Check String Prefix
220
+
221
+ ```typescript
222
+ const StartsWithSchema = Interface({
223
+ data: "any?",
224
+
225
+ // Prefix checking
226
+ isSystemMessage: "when data.message.$startsWith(SYSTEM:) *? boolean : =false",
227
+ isErrorCode: "when data.code.$startsWith(ERR_) *? boolean : =false",
228
+
229
+ // URL checking
230
+ isSecureUrl: "when data.url.$startsWith(https://) *? boolean : =false",
231
+ });
232
+ ```
233
+
234
+ #### `$endsWith(suffix)` - Check String Suffix
235
+
236
+ ```typescript
237
+ const EndsWithSchema = Interface({
238
+ data: "any?",
239
+
240
+ // File extension checking
241
+ isPdfFile: "when data.filename.$endsWith(.pdf) *? boolean : =no_pdf_file",
242
+ isImageFile:
243
+ "when data.filename.$endsWith(.jpg) || data.filename.$endsWith(.png) *? boolean : =no_img",
244
+
245
+ // Domain checking
246
+ isCorporateEmail:
247
+ "when data.email.$endsWith(@company.com) *? boolean : =no_itsnot_corporated",
248
+ });
249
+
250
+ const data = {
251
+ filename: "super_file.ehezezpaozdj.pdf", //is pdf
252
+ email: "mail@somethingelse.com", //false so should fail
253
+ };
254
+ const result = EndsWithSchema.safeParse({
255
+ data,
256
+ isPdfFile: true,
257
+ isCorporateEmail: true,
258
+ isImageFile: "no_img",
259
+ });
260
+ if (result.success) {
261
+ console.log("✅ Expected success:", result.data);
262
+ } else {
263
+ console.log("❌ Expected errors:", result.errors);
264
+ }
265
+ ```
266
+
267
+ ### Numeric Methods
268
+
269
+ #### `$between(min,max)` - Check Numeric Range
270
+
271
+ ```typescript
272
+ const BetweenSchema = Interface({
273
+ data: "any?",
274
+
275
+ // Age range checking
276
+ isAdult: "when data.age.$between(18,65) *? boolean : =isnt_adult",
277
+
278
+ // Score validation
279
+ isPassingGrade:
280
+ "when data.score.$between(60,100) *? boolean : =itsnt_passgrade",
281
+
282
+ // Price range
283
+ isAffordable: "when data.price.$between(0,100) *? boolean : =yes_itis",
284
+ });
285
+
286
+ const data = {
287
+ age: 17,
288
+ score: 59,
289
+ price: 40,
290
+ };
291
+ const result = BetweenSchema.safeParse({
292
+ data,
293
+ isAdult: true, //should fail because of age >= 18
294
+ isPassingGrade: true, //should also faild
295
+ isAffordable: true,
296
+ });
297
+ if (result.success) {
298
+ console.log("✅ Expected success:", result.data);
299
+ } else {
300
+ console.log("❌ Expected errors:", result.errors);
301
+ }
302
+ ```
303
+
304
+ #### `$in(val1,val2,...)` - Check Value Inclusion
305
+
306
+ ```typescript
307
+ const InSchema = Interface({
308
+ data: "any?",
309
+
310
+ // Role checking
311
+ hasElevatedAccess:
312
+ "when data.role.$in(admin,moderator,super_admin) *? boolean : =not_allowed",
313
+
314
+ // Status checking
315
+ isActiveStatus:
316
+ "when data.status.$in(active,pending,processing) *? boolean : =not_active",
317
+
318
+ // Category checking
319
+ isPremiumCategory:
320
+ "when data.category.$in(premium,enterprise,vip) *? boolean : =itsnot_premium",
321
+ });
322
+
323
+ const data = {
324
+ age: 17,
325
+ role: "admin",
326
+ status: "active",
327
+ category: "premium",
328
+ };
329
+ const result = InSchema.safeParse({
330
+ data,
331
+ hasElevatedAccess: true,
332
+ isActiveStatus: "not_active", //should faild because "status" contains one of the requirements
333
+ isPremiumCategory: "itsnot_premium", // should faild also
334
+ });
335
+ if (result.success) {
336
+ console.log("✅ Expected success:", result.data);
337
+ } else {
338
+ console.log("❌ Expected errors:", result.errors);
339
+ }
340
+ ```
341
+
342
+ ## Advanced Patterns
343
+
344
+ ### Complex Default Values
345
+
346
+ ```typescript
347
+
348
+ const ComplexDefaultsSchema = Interface({
349
+ config: "any?",
350
+
351
+ // Object defaults
352
+ // @fortify-ignore
353
+ defaultSettings:
354
+ 'when config.settings.$exists() *? any : ={"theme":"dark","lang":"en"}',
355
+
356
+ // Array defaults
357
+ // @fortify-ignore
358
+ defaultTags: 'when config.tags.$exists() *? string[] : =["default","user"]',
359
+
360
+ // Nested object defaults
361
+ defaultProfile:
362
+ 'when config.profile.$exists() *? any : ={"name":"Anonymous","avatar":null}',
363
+
364
+ // Complex conditional defaults
365
+ advancedConfig:
366
+ 'when config.advanced.$exists() *? any : ={"features":[],"permissions":{}}',
367
+ });
368
+
369
+ const config = {
370
+ // settings: "yes", //not exist
371
+ // advancedConfig: "yes", //not exist
372
+ defaultProfile: "yes",
373
+ defaultTags: "yes"
374
+ };
375
+ const result = ComplexDefaultsSchema.safeParse({
376
+ config,
377
+ defaultSettings: "",
378
+ defaultTags: true,
379
+ defaultProfile: true,
380
+ advancedConfig: ""
381
+ });
382
+ if (result.success) {
383
+ console.log("✅ Expected success:", result.data);
384
+ } else {
385
+ console.log("❌ Expected errors:", result.errors);
386
+ }
387
+
388
+ ```
389
+
390
+ ### Method Combinations
391
+
392
+ ```typescript
393
+ const CombinedMethodsSchema = Interface({
394
+ user: "any?",
395
+ config: "any?",
396
+
397
+ // Logical AND
398
+ isValidUser:
399
+ "when user.email.$exists() && user.verified.$exists() *? boolean : =false",
400
+
401
+ // Logical OR
402
+ hasContact:
403
+ "when user.email.$exists() || user.phone.$exists() *? boolean : =false",
404
+
405
+ // Complex combinations
406
+ canAccessFeature:
407
+ "when user.role.$in(admin,premium) && config.features.$contains(advanced) *? boolean : =false",
408
+
409
+ // Nested conditions
410
+ accessLevel:
411
+ "when user.role=admin *? when config.superAdmin.$exists() *? =super : =admin : =user",
412
+ });
413
+ ```
414
+
415
+ ### Deep Property Access
416
+
417
+ ```typescript
418
+ const DeepAccessSchema = Interface({
419
+ data: "any?",
420
+
421
+ // Multi-level property access
422
+ hasDeepFeature:
423
+ "when data.user.profile.settings.advanced.features.$exists() *? boolean : =false",
424
+
425
+ // Array property access
426
+ hasFirstItem: "when data.items[0].$exists() *? boolean : =false",
427
+
428
+ // Mixed access patterns
429
+ hasNestedValue:
430
+ "when data.config.nested.deep.value.$exists() *? boolean : =false",
431
+ });
432
+ ```
433
+
434
+ ### Special Characters and Unicode
435
+
436
+ ```typescript
437
+
438
+ const SpecialCharsSchema = Interface({
439
+ config: "any?",
440
+
441
+ // Properties with hyphens
442
+ hasAdminOverride:
443
+ 'when config["admin-override"].$exists() *? boolean : =not_allowed',
444
+
445
+ // Properties with spaces
446
+ hasSpecialConfig:
447
+ 'when config["special config"].$exists() *? boolean : =no_sp_config',
448
+ });
449
+
450
+ const config = {
451
+ "admin-override": true,
452
+ "special config": true
453
+ }
454
+
455
+ const result = SpecialCharsSchema.safeParse({
456
+ config,
457
+ hasAdminOverride: "not_allowed", // should throw err
458
+ hasSpecialConfig: "no_sp_config", // should also throw err
459
+ });
460
+ if (result.success) {
461
+ console.log("✅ Expected success:", result.data);
462
+ } else {
463
+ console.log("❌ Expected errors:", result.errors);
464
+ }
465
+
466
+ ```
467
+
468
+ ## Migration from V1 to V2
469
+
470
+ ### Migration Examples
471
+
472
+ #### Basic Property Checking
473
+
474
+ ```typescript
475
+
476
+ const Schema1 = Interface({
477
+ role: "admin|user|guest",
478
+ permissions: "when role=admin *? string[] : string[]?",
479
+ });
480
+
481
+ const Schema2 = Interface({
482
+ role: "admin|user|guest",
483
+ config: "any?",
484
+ permissions: "when config.hasPermissions.$exists() *? string[] : =[]",
485
+ });
486
+ ```
487
+
488
+ #### Complex Business Logic
489
+
490
+ ```typescript
491
+ const V1BusinessSchema = Interface({
492
+ accountType: "free|premium|enterprise",
493
+ userLevel: "basic|advanced|expert",
494
+
495
+ maxProjects: "when accountType=free *? number(1,3) : number(1,100)",
496
+ advancedFeatures:
497
+ "when userLevel.in(advanced,expert) *? string[] : string[]?",
498
+ });
499
+
500
+ const V2BusinessSchema = Interface({
501
+ accountType: "free|premium|enterprise",
502
+ userLevel: "basic|advanced|expert",
503
+ config: "any?",
504
+ features: "any?",
505
+
506
+ maxProjects:
507
+ "when config.account.$in(free,trial) *? number(1,3) : number(1,100)",
508
+ advancedFeatures: "when features.advanced.$exists() *? string[] : =[]",
509
+
510
+ // New capabilities not possible in V1
511
+ dynamicLimits: "when config.limits.$exists() *? any : ={}",
512
+ customFeatures: "when features.custom.$exists() *? string[] : =[]",
513
+ });
514
+ ```
515
+
516
+ ### Migration Strategy
517
+
518
+ 1. **Identify V1 patterns** in your existing schemas
519
+ 2. **Add runtime data objects** (`config: "any?"`, `features: "any?"`)
520
+ 3. **Replace simple comparisons** with runtime method calls
521
+ 4. **Enhance with new capabilities** available in V2
522
+ 5. **Test thoroughly** to ensure behavior matches expectations
523
+
524
+ ## Best Practices
525
+
526
+ ### 1. Use Descriptive Property Names
527
+
528
+ ```typescript
529
+ // ✅ Good
530
+ const Schema = Interface({
531
+ config: "any?",
532
+ hasPermissions: "when config.permissions.$exists() *? boolean : =false",
533
+ canEditContent: "when config.editRights.$exists() *? boolean : =false",
534
+ });
535
+
536
+ // ❌ Avoid
537
+ const Schema = Interface({
538
+ config: "any?",
539
+ p: "when config.permissions.$exists() *? boolean : =false",
540
+ e: "when config.editRights.$exists() *? boolean : =false",
541
+ });
542
+ ```
543
+
544
+ ### 2. Provide Meaningful Defaults
545
+
546
+ ```typescript
547
+ // ✅ Good - Clear default values
548
+ const Schema = Interface({
549
+ config: "any?",
550
+ userRole: "when config.role.$exists() *? string : =guest",
551
+ permissions: "when config.permissions.$exists() *? string[] : =[]",
552
+ settings: 'when config.settings.$exists() *? any : ={"theme":"light"}',
553
+ });
554
+
555
+ // ❌ Avoid - Unclear defaults
556
+ const Schema = Interface({
557
+ config: "any?",
558
+ userRole: "when config.role.$exists() *? string : =unknown",
559
+ permissions: "when config.permissions.$exists() *? string[] : =null",
560
+ });
561
+ ```
562
+
563
+ ### 3. Use Appropriate Methods
564
+
565
+ ```typescript
566
+ // ✅ Good - Use specific methods for specific checks
567
+ const Schema = Interface({
568
+ data: "any?",
569
+ hasContent:
570
+ "when data.description.$exists() && !data.description.$empty() *? boolean : =false",
571
+ isValidEmail:
572
+ "when data.email.$exists() && data.email.$contains(@) *? boolean : =false",
573
+ isAdminUser: "when data.role.$in(admin,super_admin) *? boolean : =false",
574
+ });
575
+
576
+ // ❌ Avoid - Generic existence checking when specific methods exist
577
+ const Schema = Interface({
578
+ data: "any?",
579
+ hasContent: "when data.description.$exists() *? boolean : =false", // Doesn't check if empty
580
+ isValidEmail: "when data.email.$exists() *? boolean : =false", // Doesn't validate format
581
+ isAdminUser: "when data.role.$exists() *? boolean : =false", // Doesn't check specific values
582
+ });
583
+ ```
584
+
585
+ ### 4. Handle Edge Cases
586
+
587
+ ```typescript
588
+ const RobustSchema = Interface({
589
+ user: "any?",
590
+ config: "any?",
591
+
592
+ // Handle missing nested properties safely
593
+ hasValidProfile:
594
+ "when user.$exists() && user.profile.$exists() && !user.profile.$empty() *? boolean : =false",
595
+
596
+ // Provide fallbacks for missing configuration
597
+ maxRetries: "when config.retries.$exists() *? number : =3",
598
+ timeout: "when config.timeout.$exists() *? number : =5000",
599
+
600
+ // Handle array edge cases
601
+ hasItems:
602
+ "when config.items.$exists() && !config.items.$empty() *? boolean : =false",
603
+ });
604
+ ```
605
+
606
+ ### 5. Performance Considerations
607
+
608
+ ```typescript
609
+ // ✅ Good - Efficient condition ordering
610
+ const Schema = Interface({
611
+ config: "any?",
612
+
613
+ // Check existence first (fastest)
614
+ hasFeature:
615
+ "when config.$exists() && config.features.$exists() *? boolean : =false",
616
+
617
+ // Simple checks before complex ones
618
+ isEnabled:
619
+ "when config.enabled.$exists() && config.features.$contains(advanced) *? boolean : =false",
620
+ });
621
+
622
+ // ❌ Avoid - Inefficient ordering
623
+ const Schema = Interface({
624
+ config: "any?",
625
+
626
+ // Complex check before existence check
627
+ hasFeature:
628
+ "when config.features.$contains(advanced) && config.$exists() *? boolean : =false",
629
+ });
630
+ ```
631
+
632
+ ## 🔗 Related Documentation
633
+
634
+ - **[Getting Started](./GETTING-STARTED.md)** - Basic ReliantType usage
635
+ - **[Field Types Reference](./FIELD-TYPES.md)** - Complete type reference
636
+ - **[Examples Collection](./EXAMPLES.md)** - Real-world usage patterns
637
+ - **[Quick Reference](./QUICK-REFERENCE.md)** - Syntax cheat sheet