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,737 @@
1
+ /**
2
+ * Unified TypeScript Type Inference System
3
+ *
4
+ * Combines core schema type inference with advanced conditional analysis.
5
+ * This is the single source of truth for all TypeScript type operations.
6
+ */
7
+
8
+ import {
9
+ ConditionalNode,
10
+ FieldAccessNode,
11
+ ComparisonNode,
12
+ MethodCallNode,
13
+ TokenType,
14
+ } from "../conditional/types/ConditionalTypes";
15
+ import { ASTWalker, ASTVisitor } from "../conditional/parser/ConditionalAST";
16
+ import {
17
+ ConstantValue,
18
+ OptionalConstantValue,
19
+ OptionalSchemaInterface,
20
+ UnionValue,
21
+ } from "../../../../types/SchemaValidator.type";
22
+
23
+ // ============================================================================
24
+ // CORE TYPE SYSTEM - Unified from types/interface.type.ts
25
+ // ============================================================================
26
+
27
+ /**
28
+ * Core type mapping for basic field types
29
+ */
30
+ export type CoreTypeMap = {
31
+ // Basic types
32
+ string: string;
33
+ number: number;
34
+ boolean: boolean;
35
+ date: Date;
36
+ any: any;
37
+
38
+ // String formats
39
+ email: string;
40
+ url: string;
41
+ uuid: string;
42
+ phone: string;
43
+ slug: string;
44
+ username: string;
45
+
46
+ // Number types
47
+ int: number;
48
+ integer: number;
49
+ positive: number;
50
+ negative: number;
51
+ float: number;
52
+ double: number;
53
+
54
+ // Special types
55
+ unknown: unknown;
56
+ void: undefined;
57
+ null: null;
58
+ undefined: undefined;
59
+ };
60
+
61
+ /**
62
+ * Extract base type from field type string (removes constraints and modifiers)
63
+ */
64
+ export type ExtractBaseType<T extends string> =
65
+ T extends `${infer Base}(${string})`
66
+ ? Base
67
+ : T extends `${infer Base}?`
68
+ ? Base
69
+ : T extends `${infer Base}[]`
70
+ ? Base
71
+ : T extends `${infer Base}[]?`
72
+ ? Base
73
+ : T extends `${infer Base}!`
74
+ ? Base
75
+ : // Handle parentheses around union types like "(web | test | ok)?"
76
+ T extends `(${infer Content})?`
77
+ ? Content
78
+ : T extends `(${infer Content})`
79
+ ? Content
80
+ : T;
81
+
82
+ /**
83
+ * Check if field type is optional
84
+ */
85
+ export type IsOptional<T extends string> = T extends `${string}?`
86
+ ? true
87
+ : false;
88
+
89
+ /**
90
+ * Check if field type is required (non-empty/non-zero)
91
+ */
92
+ export type IsRequired<T extends string> = T extends `${string}!`
93
+ ? true
94
+ : false;
95
+
96
+ /**
97
+ * Check if field type is an array
98
+ */
99
+ export type IsArray<T extends string> = T extends `${string}[]` | `${string}[]?`
100
+ ? true
101
+ : false;
102
+
103
+ /**
104
+ * Extract element type from array type, handling parentheses
105
+ */
106
+ export type ExtractElementType<T extends string> =
107
+ T extends `${infer Element}[]`
108
+ ? Element extends `(${infer UnionContent})`
109
+ ? UnionContent
110
+ : Element
111
+ : T extends `${infer Element}[]?`
112
+ ? Element extends `(${infer UnionContent})`
113
+ ? UnionContent
114
+ : Element
115
+ : T;
116
+
117
+ /**
118
+ * Map field type string to TypeScript type
119
+ */
120
+ export type MapFieldType<T extends string> =
121
+ // Handle arrays first
122
+ IsArray<T> extends true
123
+ ? Array<MapFieldType<ExtractElementType<T>>>
124
+ : // Handle record types (record<K, V> or Record<K, V>)
125
+ T extends `record<${infer K}, ${infer V}>`
126
+ ? Record<
127
+ MapFieldType<K> extends string | number | symbol
128
+ ? MapFieldType<K>
129
+ : string,
130
+ MapFieldType<V>
131
+ >
132
+ : T extends `Record<${infer K}, ${infer V}>`
133
+ ? Record<
134
+ MapFieldType<K> extends string | number | symbol
135
+ ? MapFieldType<K>
136
+ : string,
137
+ MapFieldType<V>
138
+ >
139
+ : // Handle conditional expressions (contains "when" and "*?")
140
+ T extends `when ${string} *? ${string}`
141
+ ? InferConditionalType<T>
142
+ : // Handle union types (contains |) - check after removing optional and parentheses
143
+ ExtractBaseType<T> extends `${string}|${string}`
144
+ ? ParseUnionType<ExtractBaseType<T>>
145
+ : // Handle constant types (starts with =)
146
+ T extends `=${infer Value}?`
147
+ ? Value | undefined
148
+ : T extends `=${infer Value}`
149
+ ? Value
150
+ : // Handle core types
151
+ ExtractBaseType<T> extends keyof CoreTypeMap
152
+ ? CoreTypeMap[ExtractBaseType<T>]
153
+ : // Fallback to any for unknown types
154
+ any;
155
+
156
+ /**
157
+ * Utility type to trim whitespace from string literal types
158
+ */
159
+ export type Trim<T extends string> = T extends ` ${infer Rest}`
160
+ ? Trim<Rest>
161
+ : T extends `${infer Rest} `
162
+ ? Trim<Rest>
163
+ : T;
164
+
165
+ /**
166
+ * Parse union type string into union of literal types
167
+ */
168
+ export type ParseUnionType<T extends string> =
169
+ // First handle parentheses if present - trim the content inside
170
+ T extends `(${infer Content})`
171
+ ? ParseUnionType<Trim<Content>>
172
+ : // Then parse the union
173
+ T extends `${infer First}|${infer Rest}`
174
+ ? Trim<First> | ParseUnionType<Rest>
175
+ : Trim<T>;
176
+
177
+ /**
178
+ * Handle optional fields
179
+ */
180
+ export type HandleOptional<T, IsOpt extends boolean> = IsOpt extends true
181
+ ? T | undefined
182
+ : T;
183
+
184
+ /**
185
+ * Infer type for a single field
186
+ */
187
+ export type InferFieldType<T> = T extends string
188
+ ? HandleOptional<MapFieldType<T>, IsOptional<T>>
189
+ : T extends ConstantValue
190
+ ? T["const"]
191
+ : T extends OptionalConstantValue
192
+ ? T["const"] | undefined
193
+ : T extends UnionValue<infer U> & { optional: true }
194
+ ? U[number] | undefined
195
+ : T extends UnionValue<infer U>
196
+ ? U[number]
197
+ : T extends OptionalSchemaInterface
198
+ ? InferSchemaType<T["schema"]> | undefined
199
+ : T extends Array<infer U>
200
+ ? Array<InferSchemaType<U>>
201
+ : T extends object
202
+ ? InferSchemaType<T>
203
+ : any;
204
+
205
+ /**
206
+ * Main type inference for schema interfaces
207
+ * FIXED: Handle optional properties correctly in nested objects
208
+ */
209
+ export type InferSchemaType<T> = {
210
+ // Required properties (non-optional)
211
+ [K in keyof T as T[K] extends string
212
+ ? IsOptional<T[K]> extends true
213
+ ? never
214
+ : K
215
+ : K]: InferFieldType<T[K]>;
216
+ } & {
217
+ // Optional properties (with ? suffix)
218
+ [K in keyof T as T[K] extends string
219
+ ? IsOptional<T[K]> extends true
220
+ ? K
221
+ : never
222
+ : never]?: InferFieldType<T[K]>;
223
+ };
224
+
225
+ // Additional utility types for Make.ts compatibility
226
+ export type InterfaceSchemaFromType<T> = {
227
+ [K in keyof T]: T[K] extends string
228
+ ? T[K]
229
+ : T[K] extends number
230
+ ? "number"
231
+ : T[K] extends boolean
232
+ ? "boolean"
233
+ : T[K] extends Date
234
+ ? "date"
235
+ : T[K] extends any[]
236
+ ? "array"
237
+ : T[K] extends object
238
+ ? InterfaceSchemaFromType<T[K]>
239
+ : "any";
240
+ };
241
+
242
+ export type TypeToSchema<T> = InterfaceSchemaFromType<T>;
243
+
244
+ // ============================================================================
245
+ // CONDITIONAL TYPE ANALYSIS - Advanced conditional logic
246
+ // ============================================================================
247
+
248
+ // TypeScript utility types for conditional validation
249
+ export type ConditionalExpression<T> = string;
250
+
251
+ // Extract field paths from conditional expressions
252
+ export type ExtractFields<T extends string> =
253
+ T extends `when ${infer Field} ${string}`
254
+ ? Field extends `${infer F}.${infer Rest}`
255
+ ? F | ExtractFields<`when ${Rest} ${string}`>
256
+ : Field
257
+ : never;
258
+
259
+ // Infer return type from conditional expression
260
+ export type InferConditionalType<
261
+ T extends string,
262
+ ThenType = unknown,
263
+ ElseType = unknown,
264
+ > = T extends `${string} *? ${infer Then} : ${infer Else}`
265
+ ? Then extends `=${infer ThenValue}`
266
+ ? Else extends `=${infer ElseValue}`
267
+ ? ThenValue | ElseValue
268
+ : ThenType | ElseType
269
+ : ThenType | ElseType
270
+ : ThenType | ElseType;
271
+
272
+ // Validate field access against data type
273
+ export type ValidateFieldAccess<
274
+ TData,
275
+ TField extends string,
276
+ > = TField extends keyof TData
277
+ ? TData[TField]
278
+ : TField extends `${infer K}.${infer Rest}`
279
+ ? K extends keyof TData
280
+ ? TData[K] extends object
281
+ ? ValidateFieldAccess<TData[K], Rest>
282
+ : never
283
+ : never
284
+ : never;
285
+
286
+ // Type-safe conditional validation
287
+ export interface TypeSafeConditional<TData = any> {
288
+ /**
289
+ * Create a type-safe conditional expression
290
+ */
291
+ when<TField extends keyof TData>(
292
+ field: TField
293
+ ): ConditionalBuilder<TData, TData[TField]>;
294
+
295
+ /**
296
+ * Create a type-safe nested field conditional
297
+ */
298
+ whenField<TPath extends string>(
299
+ path: TPath
300
+ ): ConditionalBuilder<TData, ValidateFieldAccess<TData, TPath>>;
301
+ }
302
+
303
+ // Conditional builder for type-safe chaining
304
+ export interface ConditionalBuilder<TData, TFieldType> {
305
+ /**
306
+ * Equality comparison
307
+ */
308
+ equals<TValue extends TFieldType>(
309
+ value: TValue
310
+ ): ConditionalThen<TData, TFieldType>;
311
+
312
+ /**
313
+ * Inequality comparison
314
+ */
315
+ notEquals<TValue extends TFieldType>(
316
+ value: TValue
317
+ ): ConditionalThen<TData, TFieldType>;
318
+
319
+ /**
320
+ * Greater than comparison (for numbers)
321
+ */
322
+ greaterThan<TValue extends TFieldType>(
323
+ value: TFieldType extends number ? TValue : never
324
+ ): ConditionalThen<TData, TFieldType>;
325
+
326
+ /**
327
+ * Greater than or equal comparison (for numbers)
328
+ */
329
+ greaterEqual<TValue extends TFieldType>(
330
+ value: TFieldType extends number ? TValue : never
331
+ ): ConditionalThen<TData, TFieldType>;
332
+
333
+ /**
334
+ * Less than comparison (for numbers)
335
+ */
336
+ lessThan<TValue extends TFieldType>(
337
+ value: TFieldType extends number ? TValue : never
338
+ ): ConditionalThen<TData, TFieldType>;
339
+
340
+ /**
341
+ * Less than or equal comparison (for numbers)
342
+ */
343
+ lessEqual<TValue extends TFieldType>(
344
+ value: TFieldType extends number ? TValue : never
345
+ ): ConditionalThen<TData, TFieldType>;
346
+
347
+ /**
348
+ * Regex match (for strings)
349
+ */
350
+ matches<TPattern extends string>(
351
+ pattern: TFieldType extends string ? TPattern : never
352
+ ): ConditionalThen<TData, TFieldType>;
353
+
354
+ /**
355
+ * Array inclusion check
356
+ */
357
+ in<TValues extends readonly TFieldType[]>(
358
+ ...values: TValues
359
+ ): ConditionalThen<TData, TFieldType>;
360
+
361
+ /**
362
+ * Array exclusion check
363
+ */
364
+ notIn<TValues extends readonly TFieldType[]>(
365
+ ...values: TValues
366
+ ): ConditionalThen<TData, TFieldType>;
367
+
368
+ /**
369
+ * Existence check
370
+ */
371
+ exists(): ConditionalThen<TData, TFieldType>;
372
+
373
+ /**
374
+ * Non-existence check
375
+ */
376
+ notExists(): ConditionalThen<TData, TFieldType>;
377
+
378
+ /**
379
+ * Contains check (for strings and arrays)
380
+ */
381
+ contains<TValue>(
382
+ value: TFieldType extends string
383
+ ? string
384
+ : TFieldType extends readonly (infer U)[]
385
+ ? U
386
+ : never
387
+ ): ConditionalThen<TData, TFieldType>;
388
+
389
+ /**
390
+ * Starts with check (for strings)
391
+ */
392
+ startsWith<TPrefix extends string>(
393
+ prefix: TFieldType extends string ? TPrefix : never
394
+ ): ConditionalThen<TData, TFieldType>;
395
+
396
+ /**
397
+ * Ends with check (for strings)
398
+ */
399
+ endsWith<TSuffix extends string>(
400
+ suffix: TFieldType extends string ? TSuffix : never
401
+ ): ConditionalThen<TData, TFieldType>;
402
+
403
+ /**
404
+ * Between check (for numbers)
405
+ */
406
+ between<TMin extends TFieldType, TMax extends TFieldType>(
407
+ min: TFieldType extends number ? TMin : never,
408
+ max: TFieldType extends number ? TMax : never
409
+ ): ConditionalThen<TData, TFieldType>;
410
+ }
411
+
412
+ // Then clause builder
413
+ export interface ConditionalThen<TData, TFieldType> {
414
+ /**
415
+ * Specify the value when condition is true
416
+ */
417
+ then<TThenType>(
418
+ value: TThenType
419
+ ): ConditionalElse<TData, TFieldType, TThenType>;
420
+
421
+ /**
422
+ * Specify a constant value when condition is true
423
+ */
424
+ thenConstant<TConstant extends string>(
425
+ value: TConstant
426
+ ): ConditionalElse<TData, TFieldType, TConstant>;
427
+
428
+ /**
429
+ * Specify an array when condition is true
430
+ */
431
+ thenArray<TArrayType>(
432
+ value: TArrayType[]
433
+ ): ConditionalElse<TData, TFieldType, TArrayType[]>;
434
+ }
435
+
436
+ // Else clause builder
437
+ export interface ConditionalElse<TData, _TFieldType, TThenType> {
438
+ /**
439
+ * Specify the value when condition is false
440
+ */
441
+ else<TElseType>(value: TElseType): ConditionalResult<TThenType | TElseType>;
442
+
443
+ /**
444
+ * Specify a constant value when condition is false
445
+ */
446
+ elseConstant<TConstant extends string>(
447
+ value: TConstant
448
+ ): ConditionalResult<TThenType | TConstant>;
449
+
450
+ /**
451
+ * Specify an array when condition is false
452
+ */
453
+ elseArray<TArrayType>(
454
+ value: TArrayType[]
455
+ ): ConditionalResult<TThenType | TArrayType[]>;
456
+
457
+ /**
458
+ * Nested conditional for else clause
459
+ */
460
+ elseWhen<TField extends keyof TData>(
461
+ field: TField
462
+ ): ConditionalBuilder<TData, TData[TField]>;
463
+ }
464
+
465
+ // Final conditional result
466
+ export interface ConditionalResult<TResultType> {
467
+ /**
468
+ * Get the conditional expression string
469
+ */
470
+ toString(): string;
471
+
472
+ /**
473
+ * Get the inferred result type
474
+ */
475
+ getType(): TResultType;
476
+
477
+ /**
478
+ * Validate the conditional against data
479
+ */
480
+ validate(data: any): {
481
+ success: boolean;
482
+ value?: TResultType;
483
+ errors: string[];
484
+ };
485
+ }
486
+
487
+ /**
488
+ * Type inference analyzer for existing conditional expressions
489
+ */
490
+ export class TypeInferenceAnalyzer {
491
+ /**
492
+ * Analyze a conditional AST and infer types
493
+ */
494
+ static analyzeConditional(ast: ConditionalNode): TypeInferenceResult {
495
+ const analyzer = new TypeInferenceVisitor();
496
+ return ASTWalker.walk(ast, analyzer);
497
+ }
498
+
499
+ /**
500
+ * Extract field types from conditional expression
501
+ */
502
+ static extractFieldTypes(ast: ConditionalNode): Record<string, string> {
503
+ const fieldTypes: Record<string, string> = {};
504
+
505
+ const visitor: ASTVisitor<void> = {
506
+ visitConditional: (node) => {
507
+ ASTWalker.walk(node.condition, visitor);
508
+ ASTWalker.walk(node.thenValue, visitor);
509
+ if (node.elseValue) ASTWalker.walk(node.elseValue, visitor);
510
+ },
511
+
512
+ visitLogicalExpression: (node) => {
513
+ ASTWalker.walk(node.left, visitor);
514
+ ASTWalker.walk(node.right, visitor);
515
+ },
516
+
517
+ visitComparison: (node) => {
518
+ const fieldPath = node.left.path.join(".");
519
+ const valueType = this.inferTypeFromComparison(node);
520
+ fieldTypes[fieldPath] = valueType;
521
+ },
522
+
523
+ visitMethodCall: (node) => {
524
+ const fieldPath = node.field.path.join(".");
525
+ const valueType = this.inferTypeFromMethod(node);
526
+ fieldTypes[fieldPath] = valueType;
527
+ },
528
+
529
+ visitFieldAccess: () => {},
530
+ visitLiteral: () => {},
531
+ visitConstant: () => {},
532
+ visitArray: () => {},
533
+ };
534
+
535
+ ASTWalker.walk(ast, visitor);
536
+ return fieldTypes;
537
+ }
538
+
539
+ private static inferTypeFromComparison(node: ComparisonNode): string {
540
+ switch (node.operator) {
541
+ case TokenType.GREATER_THAN:
542
+ case TokenType.GREATER_EQUAL:
543
+ case TokenType.LESS_THAN:
544
+ case TokenType.LESS_EQUAL:
545
+ return "number";
546
+
547
+ case TokenType.MATCHES:
548
+ return "string";
549
+
550
+ case TokenType.EQUALS:
551
+ case TokenType.NOT_EQUALS:
552
+ return node.right.dataType;
553
+
554
+ default:
555
+ return "unknown";
556
+ }
557
+ }
558
+
559
+ private static inferTypeFromMethod(node: MethodCallNode): string {
560
+ switch (node.method) {
561
+ case TokenType.IN:
562
+ case TokenType.NOT_IN:
563
+ return node.arguments && node.arguments.length > 0
564
+ ? node.arguments[0].dataType
565
+ : "unknown";
566
+
567
+ case TokenType.CONTAINS:
568
+ case TokenType.STARTS_WITH:
569
+ case TokenType.ENDS_WITH:
570
+ return "string | array";
571
+
572
+ case TokenType.BETWEEN:
573
+ return "number";
574
+
575
+ case TokenType.EXISTS:
576
+ case TokenType.NOT_EXISTS:
577
+ return "any";
578
+
579
+ default:
580
+ return "unknown";
581
+ }
582
+ }
583
+ }
584
+
585
+ // Type inference result
586
+ export interface TypeInferenceResult {
587
+ fieldTypes: Record<string, string>;
588
+ returnType: string;
589
+ complexity: number;
590
+ suggestions: string[];
591
+ }
592
+
593
+ // Type inference visitor
594
+ class TypeInferenceVisitor implements ASTVisitor<TypeInferenceResult> {
595
+ visitConditional(node: ConditionalNode): TypeInferenceResult {
596
+ const conditionResult = ASTWalker.walk(node.condition, this);
597
+ const thenResult = ASTWalker.walk(node.thenValue, this);
598
+ const elseResult = node.elseValue
599
+ ? ASTWalker.walk(node.elseValue, this)
600
+ : null;
601
+
602
+ return {
603
+ fieldTypes: {
604
+ ...conditionResult.fieldTypes,
605
+ ...thenResult.fieldTypes,
606
+ ...(elseResult?.fieldTypes || {}),
607
+ },
608
+ returnType: this.combineTypes(
609
+ thenResult.returnType,
610
+ elseResult?.returnType || "undefined"
611
+ ),
612
+ complexity:
613
+ conditionResult.complexity +
614
+ thenResult.complexity +
615
+ (elseResult?.complexity || 0) +
616
+ 1,
617
+ suggestions: [
618
+ ...conditionResult.suggestions,
619
+ ...thenResult.suggestions,
620
+ ...(elseResult?.suggestions || []),
621
+ ],
622
+ };
623
+ }
624
+
625
+ visitLogicalExpression(node: any): TypeInferenceResult {
626
+ const leftResult = ASTWalker.walk(node.left, this);
627
+ const rightResult = ASTWalker.walk(node.right, this);
628
+
629
+ return {
630
+ fieldTypes: { ...leftResult.fieldTypes, ...rightResult.fieldTypes },
631
+ returnType: "boolean",
632
+ complexity: leftResult.complexity + rightResult.complexity + 1,
633
+ suggestions: [...leftResult.suggestions, ...rightResult.suggestions],
634
+ };
635
+ }
636
+
637
+ visitComparison(node: any): TypeInferenceResult {
638
+ const fieldPath = node.left.path.join(".");
639
+ // Use public method or implement inline
640
+ const fieldType = this.inferTypeFromComparison(node);
641
+
642
+ return {
643
+ fieldTypes: { [fieldPath]: fieldType },
644
+ returnType: "boolean",
645
+ complexity: 1,
646
+ suggestions: [],
647
+ };
648
+ }
649
+
650
+ visitMethodCall(node: any): TypeInferenceResult {
651
+ const fieldPath = node.field.path.join(".");
652
+ // Use public method or implement inline
653
+ const fieldType = this.inferTypeFromMethod(node);
654
+
655
+ return {
656
+ fieldTypes: { [fieldPath]: fieldType },
657
+ returnType: "boolean",
658
+ complexity: 2,
659
+ suggestions: [],
660
+ };
661
+ }
662
+
663
+ private inferTypeFromComparison(node: any): string {
664
+ // Simple type inference based on comparison
665
+ if (node.right && node.right.dataType) {
666
+ return node.right.dataType;
667
+ }
668
+ return "unknown";
669
+ }
670
+
671
+ private inferTypeFromMethod(node: any): string {
672
+ // Simple type inference based on method
673
+ switch (node.method) {
674
+ case "in":
675
+ case "not_in":
676
+ return node.arguments && node.arguments.length > 0
677
+ ? node.arguments[0].dataType
678
+ : "unknown";
679
+ case "contains":
680
+ case "starts_with":
681
+ case "ends_with":
682
+ return "string | array";
683
+ case "between":
684
+ return "number";
685
+ case "exists":
686
+ case "not_exists":
687
+ return "any";
688
+ default:
689
+ return "unknown";
690
+ }
691
+ }
692
+
693
+ visitFieldAccess(): TypeInferenceResult {
694
+ return {
695
+ fieldTypes: {},
696
+ returnType: "unknown",
697
+ complexity: 0,
698
+ suggestions: [],
699
+ };
700
+ }
701
+
702
+ visitLiteral(node: any): TypeInferenceResult {
703
+ return {
704
+ fieldTypes: {},
705
+ returnType: node.dataType,
706
+ complexity: 0,
707
+ suggestions: [],
708
+ };
709
+ }
710
+
711
+ visitConstant(_node: any): TypeInferenceResult {
712
+ return {
713
+ fieldTypes: {},
714
+ returnType: "string",
715
+ complexity: 0,
716
+ suggestions: [],
717
+ };
718
+ }
719
+
720
+ visitArray(node: any): TypeInferenceResult {
721
+ const elementType =
722
+ node.elements.length > 0 ? node.elements[0].dataType : "unknown";
723
+ return {
724
+ fieldTypes: {},
725
+ returnType: `${elementType}[]`,
726
+ complexity: 0,
727
+ suggestions: [],
728
+ };
729
+ }
730
+
731
+ private combineTypes(type1: string, type2: string): string {
732
+ if (type1 === type2) return type1;
733
+ if (type1 === "undefined") return type2;
734
+ if (type2 === "undefined") return type1;
735
+ return `${type1} | ${type2}`;
736
+ }
737
+ }