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,406 @@
1
+ # ReliantType Conditional Parser - Complete Guide
2
+
3
+ ## Overview
4
+
5
+ The `ConditionalParser` is responsible for parsing conditional validation expressions in ReliantType into an Abstract Syntax Tree (AST). It handles complex syntax like:
6
+
7
+ ```typescript
8
+ "when role=admin *? string[] : string[]?"
9
+ "when age > 18 AND status=active *? string(1,50) : string?"
10
+ ```
11
+
12
+ ## Architecture Flow
13
+
14
+ ```
15
+ Input String → Lexer → Tokens → Parser → AST → Validation
16
+ ```
17
+
18
+ ## Class Structure
19
+
20
+ ### Constructor & Configuration
21
+
22
+ ```typescript
23
+ constructor(config: Partial<ParserConfig> = {})
24
+ ```
25
+
26
+ **Purpose**: Initialize the parser with configuration options.
27
+
28
+ **Key Properties**:
29
+ - `tokens`: Array of tokens from the lexer
30
+ - `current`: Current position in the token array
31
+ - `errors`: Collection of parsing errors
32
+ - `config`: Parser configuration settings
33
+
34
+ **Default Config**:
35
+ ```typescript
36
+ {
37
+ allowNestedConditionals: true, // Allow "when ... *? when ... *? ..."
38
+ maxNestingDepth: 5, // Maximum nesting levels
39
+ strictMode: false, // Strict parsing rules
40
+ enableDebug: false // Debug output
41
+ }
42
+ ```
43
+
44
+ ## Main Parsing Flow
45
+
46
+ ### 1. `parse(input: string)` - Entry Point
47
+
48
+ ```typescript
49
+ parse(input: string): { ast?: ConditionalNode; errors: ConditionalError[] }
50
+ ```
51
+
52
+ **Steps**:
53
+ 1. **Tokenize**: Uses `ConditionalLexer` to convert string to tokens
54
+ 2. **Parse**: Calls `parseConditional()` to build AST
55
+ 3. **Validate**: Checks for remaining tokens
56
+ 4. **Return**: AST and any errors found
57
+
58
+ **Example Flow**:
59
+ ```
60
+ Input: "when role=admin *? string[] : string[]?"
61
+ Tokens: [WHEN, IDENTIFIER(role), EQUALS, IDENTIFIER(admin), CONDITIONAL_THEN, ...]
62
+ AST: ConditionalNode with condition and values
63
+ ```
64
+
65
+ ### 2. `parseConditional()` - Core Logic
66
+
67
+ ```typescript
68
+ private parseConditional(): ConditionalNode
69
+ ```
70
+
71
+ **Purpose**: Parse the main conditional structure: `when condition *? thenValue : elseValue`
72
+
73
+ **Steps**:
74
+ 1. **Expect "when"**: Must start with WHEN token
75
+ 2. **Parse condition**: Call `parseCondition()` for the condition part
76
+ 3. **Expect "*?"**: Must have CONDITIONAL_THEN token
77
+ 4. **Parse then value**: What to return if condition is true
78
+ 5. **Parse else value** (optional): What to return if condition is false
79
+
80
+ **AST Structure Created**:
81
+ ```typescript
82
+ {
83
+ type: "conditional",
84
+ condition: ConditionNode,
85
+ thenValue: ValueNode,
86
+ elseValue?: ValueNode,
87
+ position: number
88
+ }
89
+ ```
90
+
91
+ ## Condition Parsing (Left Side of *?)
92
+
93
+ ### 3. `parseCondition()` - Condition Entry Point
94
+
95
+ Delegates to `parseLogicalOr()` to handle operator precedence.
96
+
97
+ ### 4. `parseLogicalOr()` - Handle OR Operations
98
+
99
+ ```typescript
100
+ private parseLogicalOr(): ConditionNode
101
+ ```
102
+
103
+ **Purpose**: Parse expressions like `condition1 OR condition2 OR condition3`
104
+
105
+ **Logic**:
106
+ 1. Parse left side with `parseLogicalAnd()`
107
+ 2. While OR tokens exist:
108
+ - Parse right side
109
+ - Create LogicalExpressionNode
110
+ - Continue chain
111
+
112
+ **Example**: `role=admin OR role=superuser`
113
+ ```
114
+ Result: LogicalExpressionNode {
115
+ operator: "OR",
116
+ left: ComparisonNode(role=admin),
117
+ right: ComparisonNode(role=superuser)
118
+ }
119
+ ```
120
+
121
+ ### 5. `parseLogicalAnd()` - Handle AND Operations
122
+
123
+ ```typescript
124
+ private parseLogicalAnd(): ConditionNode
125
+ ```
126
+
127
+ **Purpose**: Parse expressions like `condition1 AND condition2`
128
+
129
+ **Higher precedence than OR**, so `A OR B AND C` becomes `A OR (B AND C)`
130
+
131
+ ### 6. `parseComparison()` - Handle Comparisons & Methods
132
+
133
+ ```typescript
134
+ private parseComparison(): ConditionNode
135
+ ```
136
+
137
+ **Most Complex Method** - Handles:
138
+ - **Parentheses**: `(role=admin OR role=user)`
139
+ - **Field access**: `user.profile.name`
140
+ - **Method calls**: `email.contains("@company.com")`
141
+ - **Comparisons**: `age > 18`, `status = "active"`
142
+
143
+ **Flow**:
144
+ 1. **Check parentheses**: If `(`, parse grouped condition
145
+ 2. **Parse field**: Get field path like `user.profile.name`
146
+ 3. **Check for method**: If `.methodName`, parse method call
147
+ 4. **Parse comparison**: Handle operators like `=`, `>`, `<`, etc.
148
+
149
+ ## Field & Method Parsing
150
+
151
+ ### 7. `parseFieldAccess()` - Parse Field Paths
152
+
153
+ ```typescript
154
+ private parseFieldAccess(): FieldAccessNode
155
+ ```
156
+
157
+ **Purpose**: Parse field paths like `user.profile.name`
158
+
159
+ **Logic**:
160
+ 1. Start with identifier (field name)
161
+ 2. While seeing `.identifier` (not method):
162
+ - Add to path
163
+ 3. Stop when hitting method name or end
164
+
165
+ **Result**: `FieldAccessNode { path: ["user", "profile", "name"] }`
166
+
167
+ ### 8. `parseMethodCall()` - Parse Method Invocations
168
+
169
+ ```typescript
170
+ private parseMethodCall(field: FieldAccessNode, position: number): MethodCallNode
171
+ ```
172
+
173
+ **Purpose**: Parse method calls like `.exists`, `.contains("value")`, `.!empty`
174
+
175
+ **Supported Methods**:
176
+ - **No arguments**: `.exists`, `.empty`, `.null`
177
+ - **With arguments**: `.contains("text")`, `.in(["a", "b"])`
178
+ - **Negated**: `.!exists`, `.!empty`, `.!null`
179
+
180
+ **Special Handling**:
181
+ - Methods starting with `!` (negation)
182
+ - Methods without parentheses
183
+ - Argument parsing for parameterized methods
184
+
185
+ ## Value Parsing (Right Side of *?)
186
+
187
+ ### 9. `parseValue()` - Parse Return Values
188
+
189
+ ```typescript
190
+ private parseValue(): ValueNode
191
+ ```
192
+
193
+ **Purpose**: Parse what the conditional should return
194
+
195
+ **Handles**:
196
+ - **Nested conditionals**: `when ... *? when ... *? value : value : value`
197
+ - **Constants**: `=admin` (literal value)
198
+ - **Arrays**: `["value1", "value2"]`
199
+ - **Literals**: `"string"`, `42`, `true`
200
+
201
+ ### 10. `parseArray()` - Parse Array Values
202
+
203
+ ```typescript
204
+ private parseArray(position: number): ArrayNode
205
+ ```
206
+
207
+ **Purpose**: Parse array literals like `["admin", "user", "guest"]`
208
+
209
+ **Logic**:
210
+ 1. Expect `[`
211
+ 2. Parse comma-separated literals
212
+ 3. Expect `]`
213
+
214
+ ### 11. `parseLiteral()` - Parse Basic Values
215
+
216
+ ```typescript
217
+ private parseLiteral(): LiteralNode
218
+ ```
219
+
220
+ **Purpose**: Parse primitive values and complex patterns
221
+
222
+ **Handles**:
223
+ - **Strings**: `"hello world"`
224
+ - **Numbers**: `42`, `3.14`
225
+ - **Booleans**: `true`, `false`
226
+ - **Complex patterns**: `.tmp`, `@(company|org|gov)`
227
+ - **Schema types**: `string[]`, `number(1,10)`
228
+
229
+ ## Pattern Parsing
230
+
231
+ ### 12. `parseComplexPattern()` - Handle Regex-like Patterns
232
+
233
+ ```typescript
234
+ private parseComplexPattern(): LiteralNode
235
+ ```
236
+
237
+ **Purpose**: Parse complex patterns like:
238
+ - `@(company|org|gov)` - Email domain patterns
239
+ - `(temp|disposable|10min)` - Choice patterns
240
+ - `^[A-Z]+$` - Regex patterns
241
+
242
+ **Logic**:
243
+ 1. Track parentheses depth
244
+ 2. Build pattern string token by token
245
+ 3. Stop at conditional operators or balanced parentheses
246
+
247
+ ### 13. `parseComparisonValue()` - Parse Right Side of Comparisons
248
+
249
+ ```typescript
250
+ private parseComparisonValue(): LiteralNode
251
+ ```
252
+
253
+ **Purpose**: Parse values used in comparisons, with special handling for patterns
254
+
255
+ **Special Cases**:
256
+ - Regex patterns
257
+ - Complex patterns with parentheses
258
+ - Pattern building until delimiter
259
+
260
+ ## Utility Methods
261
+
262
+ ### Token Navigation
263
+
264
+ ```typescript
265
+ private match(...types: TokenType[]): boolean // Check and consume token
266
+ private check(type: TokenType): boolean // Check without consuming
267
+ private advance(): Token // Move to next token
268
+ private peek(): Token // Look at current token
269
+ private peekNext(): Token | undefined // Look ahead one token
270
+ private previous(): Token // Get previous token
271
+ private isAtEnd(): boolean // Check if at end
272
+ ```
273
+
274
+ ### Method Resolution
275
+
276
+ ```typescript
277
+ private getMethodTokenType(methodName: string): TokenType | undefined
278
+ private isMethodName(name: string): boolean
279
+ ```
280
+
281
+ **Purpose**: Map method names to token types for validation
282
+
283
+ **Method Mapping**:
284
+ ```typescript
285
+ {
286
+ "in": TokenType.IN,
287
+ "!in": TokenType.NOT_IN,
288
+ "exists": TokenType.EXISTS,
289
+ "!exists": TokenType.NOT_EXISTS,
290
+ "contains": TokenType.CONTAINS,
291
+ "!contains": TokenType.NOT_CONTAINS,
292
+ // ... more methods
293
+ }
294
+ ```
295
+
296
+ ### Error Handling
297
+
298
+ ```typescript
299
+ private addError(type: ErrorType, message: string, suggestion?: string): void
300
+ ```
301
+
302
+ **Purpose**: Add detailed error information with context
303
+
304
+ **Error Context Includes**:
305
+ - Token position and line/column
306
+ - Nearby tokens for context
307
+ - Suggestions for fixing
308
+ - Error type classification
309
+
310
+ ## Complete Example Walkthrough
311
+
312
+ Let's trace through parsing: `"when role=admin AND age > 18 *? string[] : string?"`
313
+
314
+ ### Step 1: Tokenization
315
+ ```
316
+ [WHEN, IDENTIFIER(role), EQUALS, IDENTIFIER(admin), AND,
317
+ IDENTIFIER(age), GREATER_THAN, NUMBER(18), CONDITIONAL_THEN,
318
+ IDENTIFIER(string), LBRACKET, RBRACKET, COLON,
319
+ IDENTIFIER(string), UNKNOWN(?), EOF]
320
+ ```
321
+
322
+ ### Step 2: Parse Flow
323
+ 1. **parseConditional()**: Expects WHEN ✓
324
+ 2. **parseCondition()** → **parseLogicalOr()**:
325
+ - **parseLogicalAnd()**:
326
+ - **parseComparison()**: `role=admin` → ComparisonNode
327
+ - See AND token, continue
328
+ - **parseComparison()**: `age > 18` → ComparisonNode
329
+ - Create LogicalExpressionNode(AND, left, right)
330
+ 3. Expect CONDITIONAL_THEN (*?) ✓
331
+ 4. **parseValue()**: `string[]` → LiteralNode("string[]")
332
+ 5. See COLON, parse else value
333
+ 6. **parseValue()**: `string?` → LiteralNode("string?")
334
+
335
+ ### Step 3: Final AST
336
+ ```typescript
337
+ ConditionalNode {
338
+ condition: LogicalExpressionNode {
339
+ operator: "AND",
340
+ left: ComparisonNode {
341
+ operator: "EQUALS",
342
+ left: FieldAccessNode { path: ["role"] },
343
+ right: LiteralNode { value: "admin" }
344
+ },
345
+ right: ComparisonNode {
346
+ operator: "GREATER_THAN",
347
+ left: FieldAccessNode { path: ["age"] },
348
+ right: LiteralNode { value: 18 }
349
+ }
350
+ },
351
+ thenValue: LiteralNode { value: "string[]" },
352
+ elseValue: LiteralNode { value: "string?" }
353
+ }
354
+ ```
355
+
356
+ ## Key Design Patterns
357
+
358
+ ### 1. Recursive Descent Parser
359
+ - Each grammar rule has its own method
360
+ - Methods call each other recursively
361
+ - Operator precedence handled by method hierarchy
362
+
363
+ ### 2. Error Recovery
364
+ - Errors collected rather than throwing immediately
365
+ - Context preserved for better error messages
366
+ - Parsing continues when possible
367
+
368
+ ### 3. Token Lookahead
369
+ - `peek()` and `peekNext()` for decision making
370
+ - No backtracking needed
371
+ - Efficient single-pass parsing
372
+
373
+ ### 4. AST Builder Pattern
374
+ - Centralized AST node creation in `ASTBuilder`
375
+ - Consistent node structure
376
+ - Position tracking for error reporting
377
+
378
+ ## Contributing Tips
379
+
380
+ ### Understanding the Code Flow
381
+ 1. **Start with `parse()`** - the entry point
382
+ 2. **Follow the grammar** - each method represents a grammar rule
383
+ 3. **Trace with examples** - use simple examples to understand flow
384
+ 4. **Check error handling** - see how errors are collected and reported
385
+
386
+ ### Common Areas for Contribution
387
+ 1. **New operators** - Add support for new comparison operators
388
+ 2. **New methods** - Add field methods like `.matches()`, `.length()`
389
+ 3. **Better error messages** - Improve error context and suggestions
390
+ 4. **Performance** - Optimize token consumption and lookahead
391
+ 5. **Type inference** - Enhance TypeScript type inference from AST
392
+
393
+ ### Testing Strategy
394
+ ```typescript
395
+ // Test individual parsing methods
396
+ const parser = new ConditionalParser();
397
+ const result = parser.parse("when field=value *? string : string?");
398
+
399
+ // Test error cases
400
+ const errorResult = parser.parse("when field= *? string"); // Missing value
401
+
402
+ // Test complex nested cases
403
+ const nestedResult = parser.parse("when a=1 *? when b=2 *? string : number : boolean");
404
+ ```
405
+
406
+ This parser is the core of ReliantType's conditional validation system, enabling powerful, readable validation logic with full TypeScript support.
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Type definitions for enhanced conditional validation system
3
+ */
4
+
5
+ import { ValidationError } from "../../../../../types/types";
6
+
7
+ // Token types for lexical analysis
8
+ export enum TokenType {
9
+ // Keywords
10
+ WHEN = "WHEN",
11
+
12
+ // Operators
13
+ EQUALS = "EQUALS", // =
14
+ NOT_EQUALS = "NOT_EQUALS", // !=
15
+ GREATER_THAN = "GREATER_THAN", // >
16
+ GREATER_EQUAL = "GREATER_EQUAL", // >=
17
+ LESS_THAN = "LESS_THAN", // <
18
+ LESS_EQUAL = "LESS_EQUAL", // <=
19
+ MATCHES = "MATCHES", // ~
20
+ NOT_MATCHES = "NOT_MATCHES", // !~
21
+
22
+ // Logical operators
23
+ AND = "AND", // &&
24
+ OR = "OR", // ||
25
+ NOT = "NOT", // !
26
+
27
+ // State operators
28
+ NOT_EXISTS = "NOT_EXISTS", // !exists
29
+ NOT_EMPTY = "NOT_EMPTY", // !empty
30
+ NOT_NULL = "NOT_NULL", // !null
31
+
32
+ // Method operators
33
+ IN = "IN", // .in()
34
+ NOT_IN = "NOT_IN", // .notIn()
35
+ EXISTS = "EXISTS", // .exists
36
+ EMPTY = "EMPTY", // .empty
37
+ NULL = "NULL", // .null
38
+ CONTAINS = "CONTAINS", // .contains()
39
+ NOT_CONTAINS = "NOT_CONTAINS", // .notContains()
40
+ STARTS_WITH = "STARTS_WITH", // .startsWith()
41
+ ENDS_WITH = "ENDS_WITH", // .endsWith()
42
+ BETWEEN = "BETWEEN", // .between()
43
+
44
+ // Conditional syntax
45
+ CONDITIONAL_THEN = "CONDITIONAL_THEN", // *?
46
+ COLON = "COLON", // :
47
+
48
+ // Grouping
49
+ LPAREN = "LPAREN", // (
50
+ RPAREN = "RPAREN", // )
51
+ LBRACKET = "LBRACKET", // [
52
+ RBRACKET = "RBRACKET", // ]
53
+ LBRACE = "LBRACE", // {
54
+ RBRACE = "RBRACE", // }
55
+
56
+ // Values
57
+ IDENTIFIER = "IDENTIFIER", // field names, values
58
+ STRING = "STRING", // quoted strings
59
+ NUMBER = "NUMBER", // numeric values
60
+ BOOLEAN = "BOOLEAN", // true/false
61
+ CONSTANT = "CONSTANT", // =value syntax
62
+
63
+ // Separators
64
+ COMMA = "COMMA", // ,
65
+ DOT = "DOT", // .
66
+ PIPE = "PIPE", // | (for regex alternation)
67
+ CARET = "CARET", // ^ (for regex start anchor)
68
+ DOLLAR = "DOLLAR", // $ (for regex end anchor)
69
+ AT = "AT", // @ (for email patterns)
70
+
71
+ // Special
72
+ EOF = "EOF", // End of input
73
+ WHITESPACE = "WHITESPACE", // Spaces, tabs
74
+ UNKNOWN = "UNKNOWN", // Unknown token
75
+ REGEX_PATTERN = "REGEX_PATTERN", // Complex regex patterns
76
+ }
77
+
78
+ // Token structure
79
+ export interface Token {
80
+ type: TokenType;
81
+ value: string;
82
+ position: number;
83
+ line: number;
84
+ column: number;
85
+ }
86
+
87
+ // AST Node types
88
+ export enum ASTNodeType {
89
+ CONDITIONAL = "CONDITIONAL",
90
+ CONDITION = "CONDITION",
91
+ LOGICAL_EXPRESSION = "LOGICAL_EXPRESSION",
92
+ COMPARISON = "COMPARISON",
93
+ METHOD_CALL = "METHOD_CALL",
94
+ FIELD_ACCESS = "FIELD_ACCESS",
95
+ LITERAL = "LITERAL",
96
+ CONSTANT = "CONSTANT",
97
+ ARRAY = "ARRAY",
98
+ }
99
+
100
+ // Base AST node
101
+ export interface ASTNode {
102
+ type: ASTNodeType;
103
+ position: number;
104
+ }
105
+
106
+ // Conditional expression: when condition *? thenValue : elseValue
107
+ export interface ConditionalNode extends ASTNode {
108
+ type: ASTNodeType.CONDITIONAL;
109
+ condition: ConditionNode;
110
+ thenValue: ValueNode;
111
+ elseValue?: ValueNode;
112
+ }
113
+
114
+ // Condition node (can be logical expression or simple comparison)
115
+ export type ConditionNode =
116
+ | LogicalExpressionNode
117
+ | ComparisonNode
118
+ | MethodCallNode;
119
+
120
+ // Logical expression: condition && condition, condition || condition
121
+ export interface LogicalExpressionNode extends ASTNode {
122
+ type: ASTNodeType.LOGICAL_EXPRESSION;
123
+ operator: "AND" | "OR";
124
+ left: ConditionNode;
125
+ right: ConditionNode;
126
+ }
127
+
128
+ // Comparison: field = value, field > value, etc.
129
+ export interface ComparisonNode extends ASTNode {
130
+ type: ASTNodeType.COMPARISON;
131
+ operator: TokenType;
132
+ left: FieldAccessNode;
133
+ right: LiteralNode;
134
+ }
135
+
136
+ // Method call: field.in(values), field.exists, field.$exists(), etc.
137
+ export interface MethodCallNode extends ASTNode {
138
+ type: ASTNodeType.METHOD_CALL;
139
+ method: TokenType;
140
+ field: FieldAccessNode;
141
+ arguments?: LiteralNode[];
142
+ isRuntimeMethod?: boolean; // Flag to indicate runtime methods (starting with $)
143
+ }
144
+
145
+ // Field access: simple field or nested field.subfield
146
+ export interface FieldAccessNode extends ASTNode {
147
+ type: ASTNodeType.FIELD_ACCESS;
148
+ path: string[];
149
+ }
150
+
151
+ // Literal values: strings, numbers, booleans
152
+ export interface LiteralNode extends ASTNode {
153
+ type: ASTNodeType.LITERAL;
154
+ value: string | number | boolean;
155
+ dataType: "string" | "number" | "boolean";
156
+ }
157
+
158
+ // Constant values: =value syntax
159
+ export interface ConstantNode extends ASTNode {
160
+ type: ASTNodeType.CONSTANT;
161
+ value: string;
162
+ }
163
+
164
+ // Array of values: [value1, value2]
165
+ export interface ArrayNode extends ASTNode {
166
+ type: ASTNodeType.ARRAY;
167
+ elements: LiteralNode[];
168
+ }
169
+
170
+ // Value types for then/else clauses
171
+ export type ValueNode =
172
+ | LiteralNode
173
+ | ConstantNode
174
+ | ArrayNode
175
+ | ConditionalNode;
176
+
177
+ // Evaluation context
178
+ export interface EvaluationContext {
179
+ data: Record<string, any>;
180
+ schema?: Record<string, any>; // Add schema for path validation
181
+ fieldPath: string[];
182
+ parentContext?: Record<string, any>; // NEW: Parent context for nested field resolution
183
+ options?: {
184
+ strict?: boolean;
185
+ debug?: boolean;
186
+ validatePaths?: boolean; // New option to enable path validation
187
+ enableCaching?: boolean; // Performance optimization option
188
+ };
189
+ }
190
+
191
+ // Evaluation result
192
+ export interface EvaluationResult {
193
+ success: boolean;
194
+ value?: any;
195
+ errors: ValidationError[];
196
+ debugInfo?: {
197
+ evaluationPath: string[];
198
+ conditionResults: Record<string, boolean>;
199
+ finalCondition: boolean;
200
+ };
201
+ }
202
+
203
+ // Parser configuration
204
+ export interface ParserConfig {
205
+ allowNestedConditionals: boolean;
206
+ maxNestingDepth: number;
207
+ strictMode: boolean;
208
+ enableDebug: boolean;
209
+ }
210
+
211
+ // Error types
212
+ export enum ErrorType {
213
+ SYNTAX_ERROR = "SYNTAX_ERROR",
214
+ SEMANTIC_ERROR = "SEMANTIC_ERROR",
215
+ EVALUATION_ERROR = "EVALUATION_ERROR",
216
+ TYPE_ERROR = "TYPE_ERROR",
217
+ }
218
+
219
+ // Enhanced error information
220
+ export interface ConditionalError {
221
+ type: ErrorType;
222
+ message: string;
223
+ position: number;
224
+ line: number;
225
+ column: number;
226
+ suggestion?: string;
227
+ context?: {
228
+ nearbyTokens: Token[];
229
+ expectedTokens: TokenType[];
230
+ };
231
+ }
232
+
233
+ // Operator metadata
234
+ export interface OperatorInfo {
235
+ symbol: string;
236
+ precedence: number;
237
+ associativity: "left" | "right";
238
+ operandCount: number;
239
+ supportedTypes: string[];
240
+ description: string;
241
+ examples: string[];
242
+ }
243
+
244
+ // Method metadata
245
+ export interface MethodInfo {
246
+ name: string;
247
+ parameterCount: number;
248
+ parameterTypes: string[];
249
+ returnType: string;
250
+ description: string;
251
+ examples: string[];
252
+ supportedFieldTypes: string[];
253
+ }
254
+
255
+ // Schema introspection result
256
+ export interface SchemaIntrospection {
257
+ fieldName: string;
258
+ conditionalSyntax: string;
259
+ parsedAST: ConditionalNode;
260
+ possibleValues: any[];
261
+ requiredConditions: string[];
262
+ optionalConditions: string[];
263
+ nullabilityRules: string[];
264
+ }
265
+
266
+ // Validation result for schema pre-validation
267
+ export interface SchemaValidationResult {
268
+ valid: boolean;
269
+ errors: ConditionalError[];
270
+ warnings: string[];
271
+ suggestions: string[];
272
+ introspection: SchemaIntrospection[];
273
+ }