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,730 @@
1
+ /**
2
+ * Intelligent Schema Pre-compilation System
3
+ *
4
+ * This system pre-compiles schemas into optimized validation functions
5
+ * to eliminate runtime parsing overhead and dramatically improve performance.
6
+ */
7
+
8
+ import { SchemaValidationResult, ValidationError } from "../../types/types";
9
+ import { SchemaFieldType } from "../../types/SchemaValidator.type";
10
+ import { CompiledValidator, OptimizationStrategy } from "../../types/scompiler";
11
+ import { ValidationHelpers } from "../mode/interfaces/validators/ValidationHelpers";
12
+ import { ConstraintParser } from "../mode/interfaces/validators/ConstraintParser";
13
+ import { OptimizedUnionValidator } from "../mode/interfaces/validators/UnionCache";
14
+ import {
15
+ ErrorHandler,
16
+ } from "../mode/interfaces/errors/ErrorHandler";
17
+ import { ErrorCode } from "../mode/interfaces/errors/types/errors.type";
18
+
19
+ export class SchemaCompiler {
20
+ private static compiledCache = new Map<string, CompiledValidator>();
21
+ private static optimizationStrategies: OptimizationStrategy[] = [];
22
+ private static maxCacheSize = 2000;
23
+ private static compilationStats = {
24
+ hits: 0,
25
+ misses: 0,
26
+ compilations: 0,
27
+ optimizations: 0,
28
+ };
29
+
30
+ /**
31
+ * Initialize optimization strategies
32
+ */
33
+ static {
34
+ this.registerOptimizationStrategies();
35
+ }
36
+
37
+ /**
38
+ * Compile a schema definition into an optimized validator
39
+ */
40
+ static compileSchema(
41
+ schemaDefinition: Record<string, SchemaFieldType>,
42
+ options: any = {}
43
+ ): CompiledValidator {
44
+ const cacheKey = this.generateCacheKey(schemaDefinition, options);
45
+
46
+ // Check cache first
47
+ const cached = this.compiledCache.get(cacheKey);
48
+ if (cached) {
49
+ this.compilationStats.hits++;
50
+ return cached;
51
+ }
52
+
53
+ this.compilationStats.misses++;
54
+ this.compilationStats.compilations++;
55
+
56
+ // Analyze schema complexity
57
+ const metadata = this.analyzeSchemaComplexity(schemaDefinition);
58
+
59
+ // Generate optimized validator
60
+ const validator = this.generateOptimizedValidator(
61
+ schemaDefinition,
62
+ metadata,
63
+ options
64
+ );
65
+
66
+ // Apply optimization strategies
67
+ const optimizedValidator = this.applyOptimizations(validator);
68
+
69
+ // Cache the result
70
+ this.compiledCache.set(cacheKey, optimizedValidator);
71
+ this.cleanupCache();
72
+
73
+ return optimizedValidator;
74
+ }
75
+
76
+ /**
77
+ * Analyze schema complexity to determine optimization strategy
78
+ */
79
+ private static analyzeSchemaComplexity(
80
+ schema: Record<string, SchemaFieldType>
81
+ ): CompiledValidator["metadata"] {
82
+ let fieldCount = 0;
83
+ let nestingLevel = 0;
84
+ let hasUnions = false;
85
+ let hasArrays = false;
86
+ let hasConditionals = false;
87
+
88
+ const analyzeField = (field: SchemaFieldType, depth: number = 0): void => {
89
+ fieldCount++;
90
+ nestingLevel = Math.max(nestingLevel, depth);
91
+
92
+ if (typeof field === "string") {
93
+ if (field.includes("|")) hasUnions = true;
94
+ if (field.includes("[]")) hasArrays = true;
95
+ if (field.includes("when")) hasConditionals = true;
96
+ } else if (typeof field === "object" && field !== null) {
97
+ if ("union" in field) hasUnions = true;
98
+ else {
99
+ // Nested object
100
+ Object.values(field).forEach((nestedField) =>
101
+ analyzeField(nestedField, depth + 1)
102
+ );
103
+ }
104
+ }
105
+ };
106
+
107
+ Object.values(schema).forEach((field) => analyzeField(field));
108
+
109
+ const complexity = this.calculateComplexityScore({
110
+ fieldCount,
111
+ nestingLevel,
112
+ hasUnions,
113
+ hasArrays,
114
+ hasConditionals,
115
+ });
116
+
117
+ return {
118
+ complexity,
119
+ fieldCount,
120
+ nestingLevel,
121
+ hasUnions,
122
+ hasArrays,
123
+ hasConditionals,
124
+ };
125
+ }
126
+
127
+ /**
128
+ * Calculate complexity score for optimization decisions
129
+ */
130
+ private static calculateComplexityScore(
131
+ metadata: Omit<CompiledValidator["metadata"], "complexity">
132
+ ): number {
133
+ let score = metadata.fieldCount;
134
+ score += metadata.nestingLevel * 3; // Nesting is expensive
135
+ score += metadata.hasUnions ? 2 : 0;
136
+ score += metadata.hasArrays ? 2 : 0;
137
+ score += metadata.hasConditionals ? 5 : 0; // Conditionals are most expensive
138
+ return score;
139
+ }
140
+
141
+ /**
142
+ * Generate optimized validator function
143
+ */
144
+ private static generateOptimizedValidator(
145
+ schema: Record<string, SchemaFieldType>,
146
+ metadata: CompiledValidator["metadata"],
147
+ options: any
148
+ ): CompiledValidator {
149
+ // Generate validation function based on complexity
150
+ const validate = this.createValidationFunction(schema, metadata, options);
151
+
152
+ return {
153
+ validate,
154
+ metadata,
155
+ cacheKey: this.generateCacheKey(schema, options),
156
+ compiledAt: Date.now(),
157
+ };
158
+ }
159
+
160
+ /**
161
+ * Create optimized validation function
162
+ */
163
+ private static createValidationFunction(
164
+ schema: Record<string, SchemaFieldType>,
165
+ metadata: CompiledValidator["metadata"],
166
+ options: any
167
+ ): (value: any) => SchemaValidationResult {
168
+ // For simple schemas, use fast path
169
+ if (metadata.complexity < 10) {
170
+ return this.createSimpleValidator(schema, options);
171
+ }
172
+
173
+ // For complex schemas, use optimized path
174
+ if (metadata.nestingLevel > 2) {
175
+ return this.createNestedValidator(schema, options);
176
+ }
177
+
178
+ // Default optimized validator
179
+ return this.createStandardValidator(schema, options);
180
+ }
181
+
182
+ /**
183
+ * Fast path for simple schemas
184
+ */
185
+ private static createSimpleValidator(
186
+ schema: Record<string, SchemaFieldType>,
187
+ options: any
188
+ ): (value: any) => SchemaValidationResult {
189
+ // Pre-compile all field validators
190
+ const fieldValidators = new Map<
191
+ string,
192
+ (value: any) => SchemaValidationResult
193
+ >();
194
+
195
+ for (const [key, fieldType] of Object.entries(schema)) {
196
+ fieldValidators.set(key, this.compileFieldValidator(fieldType, options));
197
+ }
198
+
199
+ return (value: any): SchemaValidationResult => {
200
+ if (typeof value !== "object" || value === null) {
201
+ return {
202
+ success: false,
203
+ errors: [ErrorHandler.createTypeError([], "object", value)],
204
+ warnings: [],
205
+ data: value,
206
+ };
207
+ }
208
+
209
+ const errors: ValidationError[] = [];
210
+ const validatedData: any = {};
211
+
212
+ // Fast validation loop
213
+ for (const [key, validator] of fieldValidators) {
214
+ const result = validator(value[key]);
215
+ if (!result.success) {
216
+ errors.push(...result.errors);
217
+ } else {
218
+ validatedData[key] = result.data;
219
+ }
220
+ }
221
+
222
+ return {
223
+ success: errors.length === 0,
224
+ errors,
225
+ warnings: [],
226
+ data: validatedData,
227
+ };
228
+ };
229
+ }
230
+
231
+ /**
232
+ * Optimized validator for nested schemas
233
+ */
234
+ private static createNestedValidator(
235
+ schema: Record<string, SchemaFieldType>,
236
+ options: any
237
+ ): (value: any) => SchemaValidationResult {
238
+ // Pre-compile nested structure
239
+ const compiledStructure = this.preCompileNestedStructure(schema, options);
240
+
241
+ return (value: any): SchemaValidationResult => {
242
+ return this.validateWithCompiledStructure(value, compiledStructure);
243
+ };
244
+ }
245
+
246
+ /**
247
+ * Standard optimized validator
248
+ */
249
+ private static createStandardValidator(
250
+ schema: Record<string, SchemaFieldType>,
251
+ options: any
252
+ ): (value: any) => SchemaValidationResult {
253
+ // Use lazy initialization to avoid circular dependency
254
+ let InterfaceSchema: any = null;
255
+ let tempSchema: any = null;
256
+
257
+ return (value: any) => {
258
+ if (!InterfaceSchema) {
259
+ // Lazy load InterfaceSchema to avoid circular dependency
260
+ try {
261
+ // Use dynamic import for better compatibility
262
+ const module = eval('require')("../mode/interfaces/InterfaceSchema");
263
+ InterfaceSchema = module.InterfaceSchema;
264
+ } catch (e) {
265
+ // Fallback - this shouldn't happen in normal operation
266
+ console.warn("Could not load InterfaceSchema:", e);
267
+ return {
268
+ success: false,
269
+ errors: [{ message: "Schema compilation failed", path: [], code: "COMPILATION_ERROR" }],
270
+ warnings: [],
271
+ data: value,
272
+ };
273
+ }
274
+
275
+ tempSchema = new InterfaceSchema(schema, {
276
+ ...options,
277
+ skipOptimization: true,
278
+ });
279
+ }
280
+ return tempSchema.safeParse(value);
281
+ };
282
+ }
283
+
284
+ /**
285
+ * Compile individual field validator with real validation logic
286
+ */
287
+ private static compileFieldValidator(
288
+ fieldType: SchemaFieldType,
289
+ options: any
290
+ ): (value: any) => SchemaValidationResult {
291
+ if (typeof fieldType === "string") {
292
+ // Check for conditional syntax first
293
+ if (fieldType.includes("when ") && fieldType.includes(" *? ")) {
294
+ // This is a conditional field - delegate to InterfaceSchema
295
+ // Use lazy loading to avoid circular dependency
296
+ let InterfaceSchema: any = null;
297
+ let tempSchema: any = null;
298
+
299
+ const initializeSchema = () => {
300
+ if (!InterfaceSchema) {
301
+ InterfaceSchema = eval('require')("../mode/interfaces/InterfaceSchema").InterfaceSchema;
302
+ tempSchema = new InterfaceSchema(
303
+ { temp: fieldType },
304
+ {
305
+ ...options,
306
+ skipOptimization: true,
307
+ }
308
+ );
309
+ }
310
+ };
311
+ return (value: any, fullData?: any) => {
312
+ // Initialize schema on first use
313
+ initializeSchema();
314
+
315
+ // For conditional fields, we need the full data context for runtime methods
316
+ const dataToValidate = fullData
317
+ ? { temp: value, ...fullData }
318
+ : { temp: value };
319
+ const result = tempSchema.safeParse(dataToValidate);
320
+ return {
321
+ success: result.success,
322
+ errors: result.errors.map((err: string) =>
323
+ err.replace("temp: ", "")
324
+ ),
325
+ warnings: result.warnings.map((warn: string) =>
326
+ warn.replace("temp: ", "")
327
+ ),
328
+ data: result.success ? result.data?.temp : undefined,
329
+ };
330
+ };
331
+ }
332
+
333
+ // Pre-parse the field type for optimization
334
+ // ValidationHelpers and ConstraintParser are already imported at the top
335
+
336
+ const parsed = ConstraintParser.parseConstraints(fieldType);
337
+ const { type, constraints, optional } = parsed;
338
+
339
+ // Return optimized validator based on type
340
+ if (type.includes("|")) {
341
+ // Union type - use fixed validation that handles both type and literal unions
342
+ return (value: any): SchemaValidationResult => {
343
+ if (value === undefined && optional) {
344
+ return {
345
+ success: true,
346
+ errors: [],
347
+ warnings: [],
348
+ data: options.default,
349
+ };
350
+ }
351
+
352
+ // Use the fixed union validation from ValidationHelpers
353
+ return ValidationHelpers.validateUnionType(type, value);
354
+ };
355
+ }
356
+
357
+ if (type === "string") {
358
+ // Optimized string validator
359
+ return (value: any, fullData?: any): SchemaValidationResult => {
360
+ if (value === undefined && optional) {
361
+ return {
362
+ success: true,
363
+ errors: [],
364
+ warnings: [],
365
+ data: options.default,
366
+ };
367
+ }
368
+ if (typeof value !== "string") {
369
+ return {
370
+ success: false,
371
+ errors: [ErrorHandler.createTypeError([], "string", value)],
372
+ warnings: [],
373
+ data: value,
374
+ };
375
+ }
376
+ if (constraints.minLength && value.length < constraints.minLength) {
377
+ return {
378
+ success: false,
379
+ errors: [
380
+ ErrorHandler.createStringError(
381
+ [],
382
+ `String too short (min: ${constraints.minLength})`,
383
+ value,
384
+ ErrorCode.STRING_TOO_SHORT
385
+ ),
386
+ ],
387
+ warnings: [],
388
+ data: value,
389
+ };
390
+ }
391
+ if (constraints.maxLength && value.length > constraints.maxLength) {
392
+ return {
393
+ success: false,
394
+ errors: [
395
+ ErrorHandler.createStringError(
396
+ [],
397
+ `String too long (max: ${constraints.maxLength})`,
398
+ value,
399
+ ErrorCode.STRING_TOO_LONG
400
+ ),
401
+ ],
402
+ warnings: [],
403
+ data: value,
404
+ };
405
+ }
406
+ return { success: true, errors: [], warnings: [], data: value };
407
+ };
408
+ }
409
+
410
+ if (type === "number" || type === "int") {
411
+ // Optimized number validator
412
+ return (value: any, fullData?: any): SchemaValidationResult => {
413
+ if (value === undefined && optional) {
414
+ return {
415
+ success: true,
416
+ errors: [],
417
+ warnings: [],
418
+ data: options.default,
419
+ };
420
+ }
421
+ if (typeof value !== "number" || isNaN(value)) {
422
+ return {
423
+ success: false,
424
+ errors: [ErrorHandler.createTypeError([], "number", value)],
425
+ warnings: [],
426
+ data: value,
427
+ };
428
+ }
429
+ if (type === "int" && !Number.isInteger(value)) {
430
+ return {
431
+ success: false,
432
+ errors: [ErrorHandler.createTypeError([], "integer", value)],
433
+ warnings: [],
434
+ data: value,
435
+ };
436
+ }
437
+ if (constraints.min !== undefined && value < constraints.min) {
438
+ return {
439
+ success: false,
440
+ errors: [
441
+ ErrorHandler.createNumberError(
442
+ [],
443
+ `Number too small (min: ${constraints.min})`,
444
+ value,
445
+ ErrorCode.NUMBER_TOO_SMALL
446
+ ),
447
+ ],
448
+ warnings: [],
449
+ data: value,
450
+ };
451
+ }
452
+ if (constraints.max !== undefined && value > constraints.max) {
453
+ return {
454
+ success: false,
455
+ errors: [
456
+ ErrorHandler.createNumberError(
457
+ [],
458
+ `Number too large (max: ${constraints.max})`,
459
+ value,
460
+ ErrorCode.NUMBER_TOO_LARGE
461
+ ),
462
+ ],
463
+ warnings: [],
464
+ data: value,
465
+ };
466
+ }
467
+ return { success: true, errors: [], warnings: [], data: value };
468
+ };
469
+ }
470
+
471
+ // Fallback to ValidationHelpers for complex types
472
+ return (value: any, fullData?: any): SchemaValidationResult => {
473
+ return ValidationHelpers.routeTypeValidation(
474
+ type,
475
+ value,
476
+ options,
477
+ constraints
478
+ );
479
+ };
480
+ }
481
+
482
+ // Fallback for non-string field types
483
+ return (value: any, fullData?: any): SchemaValidationResult => {
484
+ return { success: true, errors: [], warnings: [], data: value };
485
+ };
486
+ }
487
+
488
+ /**
489
+ * Pre-compile nested structure for fast traversal
490
+ */
491
+ private static preCompileNestedStructure(schema: any, options: any): any {
492
+ const compiledStructure: any = {
493
+ fields: new Map(),
494
+ validators: new Map(),
495
+ paths: [],
496
+ isFlat: true,
497
+ };
498
+
499
+ const compileLevel = (obj: any, path: string[] = []): void => {
500
+ for (const [key, value] of Object.entries(obj)) {
501
+ const currentPath = [...path, key];
502
+ const pathKey = currentPath.join(".");
503
+
504
+ compiledStructure.paths.push(pathKey);
505
+
506
+ if (typeof value === "string") {
507
+ // Compile field validator
508
+ const validator = this.compileFieldValidator(value, options);
509
+ compiledStructure.validators.set(pathKey, validator);
510
+ compiledStructure.fields.set(pathKey, {
511
+ type: "primitive",
512
+ validator,
513
+ });
514
+ } else if (
515
+ typeof value === "object" &&
516
+ value !== null &&
517
+ !Array.isArray(value)
518
+ ) {
519
+ // Nested object
520
+ compiledStructure.isFlat = false;
521
+ compiledStructure.fields.set(pathKey, {
522
+ type: "object",
523
+ schema: value,
524
+ });
525
+ compileLevel(value, currentPath);
526
+ } else if (Array.isArray(value) && value.length === 1) {
527
+ // Array of objects
528
+ compiledStructure.fields.set(pathKey, {
529
+ type: "array",
530
+ itemSchema: value[0],
531
+ });
532
+ if (typeof value[0] === "object") {
533
+ compileLevel(value[0], [...currentPath, "[]"]);
534
+ }
535
+ }
536
+ }
537
+ };
538
+
539
+ compileLevel(schema);
540
+ return compiledStructure;
541
+ }
542
+
543
+ /**
544
+ * Validate using pre-compiled structure
545
+ */
546
+ private static validateWithCompiledStructure(
547
+ value: any,
548
+ structure: any
549
+ ): SchemaValidationResult {
550
+ if (typeof value !== "object" || value === null) {
551
+ return {
552
+ success: false,
553
+ errors: [ErrorHandler.createTypeError([], "object", value)],
554
+ warnings: [],
555
+ data: value,
556
+ };
557
+ }
558
+
559
+ const errors: ValidationError[] = [];
560
+ const validatedData: any = {};
561
+
562
+ // Fast path for flat structures
563
+ if (structure.isFlat) {
564
+ for (const [pathKey, validator] of structure.validators) {
565
+ const fieldKey = pathKey.split(".").pop();
566
+ const fieldValue = value[fieldKey!];
567
+ const result = validator(fieldValue, value); // Pass full data context
568
+
569
+ if (!result.success) {
570
+ errors.push(...result.errors);
571
+ } else if (result.data !== undefined) {
572
+ validatedData[fieldKey!] = result.data;
573
+ }
574
+ }
575
+ } else {
576
+ // Complex nested validation
577
+ for (const path of structure.paths) {
578
+ const pathParts = path.split(".");
579
+ const fieldValue = this.getValueByPath(value, pathParts);
580
+ const field = structure.fields.get(path);
581
+
582
+ if (field.type === "primitive") {
583
+ const result = field.validator(fieldValue, value); // Pass full data context
584
+ if (!result.success) {
585
+ errors.push(...result.errors);
586
+ } else {
587
+ this.setValueByPath(validatedData, pathParts, result.data);
588
+ }
589
+ }
590
+ }
591
+ }
592
+
593
+ return {
594
+ success: errors.length === 0,
595
+ errors,
596
+ warnings: [],
597
+ data: errors.length === 0 ? validatedData : undefined,
598
+ };
599
+ }
600
+
601
+ /**
602
+ * Get value by path array
603
+ */
604
+ private static getValueByPath(obj: any, path: string[]): any {
605
+ let current = obj;
606
+ for (const key of path) {
607
+ if (current === null || current === undefined) return undefined;
608
+ current = current[key];
609
+ }
610
+ return current;
611
+ }
612
+
613
+ /**
614
+ * Set value by path array
615
+ */
616
+ private static setValueByPath(obj: any, path: string[], value: any): void {
617
+ let current = obj;
618
+ for (let i = 0; i < path.length - 1; i++) {
619
+ const key = path[i];
620
+ if (!(key in current)) {
621
+ current[key] = {};
622
+ }
623
+ current = current[key];
624
+ }
625
+ current[path[path.length - 1]] = value;
626
+ }
627
+
628
+ /**
629
+ * Apply optimization strategies based on schema characteristics
630
+ */
631
+ private static applyOptimizations(
632
+ validator: CompiledValidator
633
+ ): CompiledValidator {
634
+ let optimized = validator;
635
+
636
+ for (const strategy of this.optimizationStrategies) {
637
+ if (strategy.condition(validator.metadata)) {
638
+ optimized = strategy.optimize(optimized);
639
+ this.compilationStats.optimizations++;
640
+ }
641
+ }
642
+
643
+ return optimized;
644
+ }
645
+
646
+ /**
647
+ * Register optimization strategies
648
+ */
649
+ private static registerOptimizationStrategies(): void {
650
+ // Union optimization strategy
651
+ this.optimizationStrategies.push({
652
+ name: "union-caching",
653
+ condition: (metadata) => metadata.hasUnions,
654
+ optimize: (validator) => {
655
+ // Apply union caching optimization
656
+ return validator;
657
+ },
658
+ });
659
+
660
+ // Array optimization strategy
661
+ this.optimizationStrategies.push({
662
+ name: "array-batching",
663
+ condition: (metadata) => metadata.hasArrays,
664
+ optimize: (validator) => {
665
+ // Apply array batching optimization
666
+ return validator;
667
+ },
668
+ });
669
+
670
+ // Nested object optimization
671
+ this.optimizationStrategies.push({
672
+ name: "nested-flattening",
673
+ condition: (metadata) => metadata.nestingLevel > 2,
674
+ optimize: (validator) => {
675
+ // Apply nested object flattening
676
+ return validator;
677
+ },
678
+ });
679
+ }
680
+
681
+ /**
682
+ * Generate cache key for schema
683
+ */
684
+ private static generateCacheKey(schema: any, options: any): string {
685
+ return JSON.stringify({ schema, options });
686
+ }
687
+
688
+ /**
689
+ * Cleanup cache when it gets too large
690
+ */
691
+ private static cleanupCache(): void {
692
+ if (this.compiledCache.size > this.maxCacheSize) {
693
+ // Remove oldest entries
694
+ const entries = Array.from(this.compiledCache.entries());
695
+ entries.sort((a, b) => a[1].compiledAt - b[1].compiledAt);
696
+
697
+ const toRemove = entries.length - this.maxCacheSize;
698
+ for (let i = 0; i < toRemove; i++) {
699
+ this.compiledCache.delete(entries[i][0]);
700
+ }
701
+ }
702
+ }
703
+
704
+ /**
705
+ * Get compilation statistics
706
+ */
707
+ static getStats() {
708
+ const hitRate =
709
+ this.compilationStats.hits /
710
+ (this.compilationStats.hits + this.compilationStats.misses);
711
+ return {
712
+ ...this.compilationStats,
713
+ hitRate: hitRate || 0,
714
+ cacheSize: this.compiledCache.size,
715
+ };
716
+ }
717
+
718
+ /**
719
+ * Clear all caches
720
+ */
721
+ static clearCache(): void {
722
+ this.compiledCache.clear();
723
+ this.compilationStats = {
724
+ hits: 0,
725
+ misses: 0,
726
+ compilations: 0,
727
+ optimizations: 0,
728
+ };
729
+ }
730
+ }