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,849 @@
1
+ import { VALIDATOR_TYPES } from '../../../../types/ValidatorTypes.js';
2
+ import { UrlArgsEnum, UrlArgArray } from '../../../../utils/UrlArgs.js';
3
+ import { TypeValidators } from './TypeValidators.js';
4
+ import { OptimizedUnionValidator } from './UnionCache.js';
5
+ import { ErrorHandler } from '../errors/ErrorHandler.js';
6
+ import { ErrorCode } from '../errors/types/errors.type.js';
7
+
8
+ /**
9
+ * Validation Helpers Module
10
+ *
11
+ * Contains optimized helper functions for validation operations
12
+ * extracted from InterfaceSchema to improve maintainability.
13
+ */
14
+ // Cache for parsed constant values with LRU eviction
15
+ const MAX_CACHE_SIZE = 1000;
16
+ const constantCache = new Map();
17
+ // Pre-compiled regex patterns for better performance
18
+ const NUMERIC_PATTERN = /^-?\d+(\.\d+)?([eE][+-]?\d+)?$/;
19
+ const BOOLEAN_PATTERN = /^(true|false|TRUE|FALSE|True|False)$/i;
20
+ const HEX_COLOR_PATTERN = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;
21
+ const BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/;
22
+ const JWT_PATTERN = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
23
+ const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
24
+ /**
25
+ * Helper functions for validation operations
26
+ */
27
+ class ValidationHelpers {
28
+ /**
29
+ * Validate constant types (e.g., "=admin", "=user")
30
+ * with better caching, type safety, and deep equality checks
31
+ */
32
+ static validateConstantType(constantValue, value) {
33
+ // Validate constant types with caching
34
+ // Implement LRU cache behavior
35
+ if (constantCache.size >= MAX_CACHE_SIZE) {
36
+ const firstKey = constantCache.keys().next().value;
37
+ constantCache.delete(firstKey || "");
38
+ }
39
+ let expectedValue = constantCache.get(constantValue);
40
+ if (expectedValue === undefined) {
41
+ try {
42
+ expectedValue = this.parseConstantValue(constantValue);
43
+ constantCache.set(constantValue, expectedValue);
44
+ }
45
+ catch (error) {
46
+ return this.createErrorResult(`Invalid constant value format: ${constantValue}`, value);
47
+ }
48
+ }
49
+ // equality check including deep object/array comparison
50
+ if (!this.deepEquals(value, expectedValue)) {
51
+ return this.createErrorResult(`Expected constant value: ${JSON.stringify(expectedValue)}, got ${JSON.stringify(value)}`, value);
52
+ }
53
+ return this.createSuccessResult(value);
54
+ }
55
+ /**
56
+ * deep equality check for constants
57
+ */
58
+ static deepEquals(a, b) {
59
+ if (a === b)
60
+ return true;
61
+ if (a == null || b == null)
62
+ return a === b;
63
+ if (typeof a !== typeof b)
64
+ return false;
65
+ if (Array.isArray(a) && Array.isArray(b)) {
66
+ if (a.length !== b.length)
67
+ return false;
68
+ return a.every((val, index) => this.deepEquals(val, b[index]));
69
+ }
70
+ if (typeof a === "object" && typeof b === "object") {
71
+ const keysA = Object.keys(a);
72
+ const keysB = Object.keys(b);
73
+ if (keysA.length !== keysB.length)
74
+ return false;
75
+ return keysA.every((key) => keysB.includes(key) && this.deepEquals(a[key], b[key]));
76
+ }
77
+ return false;
78
+ }
79
+ /**
80
+ * constant value parser with better error handling and type support
81
+ */
82
+ static parseConstantValue(constantValue) {
83
+ if (!constantValue || typeof constantValue !== "string") {
84
+ throw new Error("Invalid constant value");
85
+ }
86
+ // Handle quoted strings (remove quotes and return as string)
87
+ if ((constantValue.startsWith('"') && constantValue.endsWith('"')) ||
88
+ (constantValue.startsWith("'") && constantValue.endsWith("'"))) {
89
+ return constantValue.slice(1, -1);
90
+ }
91
+ // numeric check with scientific notation support
92
+ if (NUMERIC_PATTERN.test(constantValue)) {
93
+ const num = parseFloat(constantValue);
94
+ if (isNaN(num) || !isFinite(num)) {
95
+ throw new Error("Invalid numeric constant");
96
+ }
97
+ return num;
98
+ }
99
+ // boolean check (case insensitive)
100
+ if (BOOLEAN_PATTERN.test(constantValue)) {
101
+ return constantValue.toLowerCase() === "true";
102
+ }
103
+ // Array check with validation
104
+ if (constantValue.startsWith("[") && constantValue.endsWith("]")) {
105
+ try {
106
+ const parsed = JSON.parse(constantValue);
107
+ if (!Array.isArray(parsed)) {
108
+ throw new Error("Invalid array format");
109
+ }
110
+ return parsed;
111
+ }
112
+ catch (error) {
113
+ throw new Error("Invalid JSON array format");
114
+ }
115
+ }
116
+ // Object check with validation
117
+ if (constantValue.startsWith("{") && constantValue.endsWith("}")) {
118
+ try {
119
+ const parsed = JSON.parse(constantValue);
120
+ if (typeof parsed !== "object" || Array.isArray(parsed)) {
121
+ throw new Error("Invalid object format");
122
+ }
123
+ return parsed;
124
+ }
125
+ catch (error) {
126
+ throw new Error("Invalid JSON object format");
127
+ }
128
+ }
129
+ // special values
130
+ switch (constantValue.toLowerCase()) {
131
+ case "null":
132
+ return null;
133
+ case "undefined":
134
+ return undefined;
135
+ case "nan":
136
+ return NaN;
137
+ case "infinity":
138
+ return Infinity;
139
+ case "-infinity":
140
+ return -Infinity;
141
+ default:
142
+ return constantValue;
143
+ }
144
+ }
145
+ /**
146
+ * union type validation with better error messages and nested union support
147
+ */
148
+ static validateUnionType(unionType, value) {
149
+ if (!unionType || typeof unionType !== "string") {
150
+ return this.createErrorResult("Invalid union type definition", value);
151
+ }
152
+ try {
153
+ // Split union into parts
154
+ const unionParts = unionType.split("|").map((part) => part.trim());
155
+ // Check if this is a type union (contains basic types) or literal union
156
+ const basicTypes = new Set([
157
+ "string",
158
+ "number",
159
+ "boolean",
160
+ "date",
161
+ "any",
162
+ "null",
163
+ "undefined",
164
+ ]);
165
+ const isTypeUnion = unionParts.some((part) => basicTypes.has(part));
166
+ if (isTypeUnion) {
167
+ // Handle type union - validate that value matches one of the types
168
+ for (const type of unionParts) {
169
+ const typeResult = this.validateSingleType(type, value);
170
+ if (typeResult.success) {
171
+ return this.createSuccessResult(value);
172
+ }
173
+ }
174
+ // None of the types matched
175
+ return this.createErrorResult(`Expected one of types: ${unionParts.join(", ")}, got ${typeof value}`, value);
176
+ }
177
+ else {
178
+ // Handle literal union - use the optimized literal validator
179
+ const result = OptimizedUnionValidator.validateUnion(unionType, value);
180
+ if (!result.isValid) {
181
+ return this.createErrorResult(result.error ||
182
+ `Expected one of: ${unionParts.join(", ")}, got ${value}`, value);
183
+ }
184
+ return this.createSuccessResult(value);
185
+ }
186
+ }
187
+ catch (error) {
188
+ return this.createErrorResult(`Union type validation error: ${error instanceof Error ? error.message : "Unknown error"}`, value);
189
+ }
190
+ }
191
+ /**
192
+ * Validate a single type (helper for type unions)
193
+ */
194
+ static validateSingleType(type, value) {
195
+ switch (type) {
196
+ case "string":
197
+ return typeof value === "string"
198
+ ? this.createSuccessResult(value)
199
+ : this.createErrorResult(`Expected string, got ${typeof value}`, value);
200
+ case "number":
201
+ return typeof value === "number" && !isNaN(value)
202
+ ? this.createSuccessResult(value)
203
+ : this.createErrorResult(`Expected number, got ${typeof value}`, value);
204
+ case "boolean":
205
+ return typeof value === "boolean"
206
+ ? this.createSuccessResult(value)
207
+ : this.createErrorResult(`Expected boolean, got ${typeof value}`, value);
208
+ case "date":
209
+ return value instanceof Date
210
+ ? this.createSuccessResult(value)
211
+ : this.createErrorResult(`Expected Date object, got ${typeof value}`, value);
212
+ case "any":
213
+ return this.createSuccessResult(value);
214
+ case "null":
215
+ return value === null
216
+ ? this.createSuccessResult(value)
217
+ : this.createErrorResult(`Expected null, got ${typeof value}`, value);
218
+ case "undefined":
219
+ return value === undefined
220
+ ? this.createSuccessResult(value)
221
+ : this.createErrorResult(`Expected undefined, got ${typeof value}`, value);
222
+ default:
223
+ // For other types, delegate to the type validation system
224
+ return this.routeTypeValidation(type, value, {}, {});
225
+ }
226
+ }
227
+ /**
228
+ * record type validation with better type safety and performance
229
+ */
230
+ static validateRecordType(type, value, validateFieldType) {
231
+ if (!type || typeof type !== "string") {
232
+ return this.createErrorResult("Invalid record type definition", value);
233
+ }
234
+ const recordMatch = type.match(/^record<([^,]+),(.+)>$/);
235
+ if (!recordMatch) {
236
+ return this.createErrorResult(`Invalid Record type format: ${type}. Expected format: record<KeyType,ValueType>`, value);
237
+ }
238
+ if (value === null || value === undefined) {
239
+ return this.createErrorResult("Record cannot be null or undefined", value);
240
+ }
241
+ if (typeof value !== "object" || Array.isArray(value)) {
242
+ return this.createErrorResult(`Expected object for Record type, got ${Array.isArray(value) ? "array" : typeof value}`, value);
243
+ }
244
+ const [, keyType, valueType] = recordMatch;
245
+ const trimmedKeyType = keyType.trim();
246
+ const trimmedValueType = valueType.trim();
247
+ const errors = [];
248
+ const validatedRecord = {};
249
+ // validation with proper key type checking
250
+ for (const [key, val] of Object.entries(value)) {
251
+ // Validate key type more comprehensively
252
+ if (!this.validateKeyType(key, trimmedKeyType)) {
253
+ errors.push(ErrorHandler.createError([key], `Record key "${key}" must be of type ${trimmedKeyType}, got ${typeof key}`, ErrorCode.TYPE_ERROR, trimmedKeyType, key));
254
+ continue;
255
+ }
256
+ // Validate value type
257
+ const valueResult = validateFieldType(trimmedValueType, val);
258
+ if (!valueResult.success) {
259
+ // Add path context to nested errors
260
+ const nestedErrors = valueResult.errors.map((error) => ({
261
+ ...error,
262
+ path: [key, ...error.path],
263
+ }));
264
+ errors.push(...nestedErrors);
265
+ }
266
+ else {
267
+ validatedRecord[key] = valueResult.data;
268
+ }
269
+ }
270
+ if (errors.length > 0) {
271
+ return {
272
+ success: false,
273
+ errors,
274
+ warnings: [],
275
+ data: value,
276
+ };
277
+ }
278
+ return this.createSuccessResult(validatedRecord);
279
+ }
280
+ /**
281
+ * key type validation for records
282
+ */
283
+ static validateKeyType(key, keyType) {
284
+ switch (keyType) {
285
+ case "string":
286
+ return typeof key === "string";
287
+ case "number":
288
+ return !isNaN(Number(key)) && isFinite(Number(key));
289
+ case "int":
290
+ case "integer":
291
+ return Number.isInteger(Number(key));
292
+ default:
293
+ return typeof key === "string"; // Default to string for unknown key types
294
+ }
295
+ }
296
+ /**
297
+ * array validation with better constraint handling and performance
298
+ */
299
+ static validateArrayWithConstraints(value, elementType, constraints, validateElementType) {
300
+ if (!Array.isArray(value)) {
301
+ return this.createErrorResult(`Expected array, got ${value === null ? "null" : typeof value}`, value);
302
+ }
303
+ // constraint validation
304
+ const constraintErrors = this.validateArrayConstraints(value, constraints);
305
+ if (constraintErrors.length > 0) {
306
+ return {
307
+ success: false,
308
+ errors: constraintErrors,
309
+ warnings: [],
310
+ data: value,
311
+ };
312
+ }
313
+ // Validate elements with better error aggregation
314
+ const validatedArray = [];
315
+ const errors = [];
316
+ const warnings = [];
317
+ for (let i = 0; i < value.length; i++) {
318
+ const elementResult = validateElementType(elementType, value[i]);
319
+ if (!elementResult.success) {
320
+ // Add index to error paths
321
+ const indexedErrors = elementResult.errors.map((error) => ({
322
+ ...error,
323
+ path: [i.toString(), ...error.path],
324
+ }));
325
+ errors.push(...indexedErrors);
326
+ }
327
+ else {
328
+ validatedArray.push(elementResult.data);
329
+ if (elementResult.warnings.length > 0) {
330
+ warnings.push(`Element at index ${i}: ${elementResult.warnings.join(", ")}`);
331
+ }
332
+ }
333
+ }
334
+ if (errors.length > 0) {
335
+ return {
336
+ success: false,
337
+ errors,
338
+ warnings,
339
+ data: value,
340
+ };
341
+ }
342
+ // uniqueness check
343
+ if (constraints.unique) {
344
+ const uniqueCheck = this.checkArrayUniqueness(validatedArray);
345
+ if (!uniqueCheck.success) {
346
+ return uniqueCheck;
347
+ }
348
+ }
349
+ return this.createSuccessResult(validatedArray, warnings);
350
+ }
351
+ /**
352
+ * array constraints validation with more constraint types
353
+ */
354
+ static validateArrayConstraints(value, constraints) {
355
+ const errors = [];
356
+ if (!constraints)
357
+ return errors;
358
+ if (constraints.minItems !== undefined &&
359
+ value.length < constraints.minItems) {
360
+ errors.push(ErrorHandler.createArrayError([], `must have at least ${constraints.minItems} items, got ${value.length}`, value, ErrorCode.ARRAY_TOO_SHORT));
361
+ }
362
+ if (constraints.maxItems !== undefined &&
363
+ value.length > constraints.maxItems) {
364
+ errors.push(ErrorHandler.createArrayError([], `must have at most ${constraints.maxItems} items, got ${value.length}`, value, ErrorCode.ARRAY_TOO_LONG));
365
+ }
366
+ if (constraints.exactItems !== undefined &&
367
+ value.length !== constraints.exactItems) {
368
+ errors.push(ErrorHandler.createArrayError([], `must have exactly ${constraints.exactItems} items, got ${value.length}`, value, ErrorCode.ARRAY_TOO_SHORT));
369
+ }
370
+ return errors;
371
+ }
372
+ /**
373
+ * array uniqueness check with better performance and type handling
374
+ */
375
+ static checkArrayUniqueness(array) {
376
+ const seen = new Set();
377
+ const duplicates = [];
378
+ for (let i = 0; i < array.length; i++) {
379
+ const item = array[i];
380
+ let key;
381
+ try {
382
+ key =
383
+ typeof item === "object" && item !== null
384
+ ? JSON.stringify(item, Object.keys(item).sort()) // Consistent object serialization
385
+ : String(item);
386
+ }
387
+ catch (error) {
388
+ // Handle circular references or non-serializable objects
389
+ key = `[object-${i}]`;
390
+ }
391
+ if (seen.has(key)) {
392
+ duplicates.push(item);
393
+ }
394
+ else {
395
+ seen.add(key);
396
+ }
397
+ }
398
+ if (duplicates.length > 0) {
399
+ return this.createErrorResult(`Array values must be unique. Duplicate values found: ${duplicates.map((d) => JSON.stringify(d)).join(", ")}`, array);
400
+ }
401
+ return this.createSuccessResult(array);
402
+ }
403
+ /**
404
+ * optional value handling with better default value support
405
+ */
406
+ static handleOptionalValue(value, isOptional, defaultValue) {
407
+ if (value === undefined) {
408
+ if (isOptional) {
409
+ return this.createSuccessResult(defaultValue !== undefined ? defaultValue : undefined);
410
+ }
411
+ else {
412
+ return this.createErrorResult("Required field is missing or undefined");
413
+ }
414
+ }
415
+ if (value === null) {
416
+ if (isOptional) {
417
+ return this.createSuccessResult(null);
418
+ }
419
+ else {
420
+ return this.createErrorResult("Required field cannot be null");
421
+ }
422
+ }
423
+ return null; // Continue with normal validation
424
+ }
425
+ /**
426
+ * Check if type is a conditional expression using secure regex pattern
427
+ */
428
+ static isConditionalExpression(type) {
429
+ // Secure regex pattern to match: when <condition> *? <thenValue> [: <elseValue>]
430
+ const conditionalPattern = /^\s*when\s+.+?\s*\*\?\s*.+/;
431
+ return conditionalPattern.test(type);
432
+ }
433
+ /**
434
+ * type validation routing with new types and better error handling
435
+ */
436
+ static routeTypeValidation(type, value, options, constraints, required = false) {
437
+ // Debug logging
438
+ // Check for conditional expressions first
439
+ if (this.isConditionalExpression(type)) {
440
+ // Conditional expressions should not be validated here
441
+ // They should be handled by the conditional validation system
442
+ // Return an error indicating this is not supported in this context
443
+ const result = {
444
+ success: false,
445
+ errors: [
446
+ ErrorHandler.createValidationError([], `Unknown or unsupported type: ${type}. Please check the type definition.`, value),
447
+ ],
448
+ warnings: [],
449
+ data: value,
450
+ };
451
+ return result;
452
+ }
453
+ if (!type || typeof type !== "string") {
454
+ return this.createErrorResult("Invalid type definition", value);
455
+ }
456
+ // Handle array types first (e.g., "string[]", "number[]", etc.)
457
+ if (type.endsWith("[]")) {
458
+ const elementType = type.slice(0, -2);
459
+ return this.validateArrayWithConstraints(value, elementType, constraints, (elementType, elementValue) => this.routeTypeValidation(elementType, elementValue, options, {}));
460
+ }
461
+ // Handle Record types first (both lowercase and TypeScript-style uppercase)
462
+ if ((type.startsWith("record<") && type.endsWith(">")) ||
463
+ (type.startsWith("Record<") && type.endsWith(">"))) {
464
+ // Normalize to lowercase for the validator
465
+ const normalizedType = type.startsWith("Record<")
466
+ ? "record<" + type.slice(7)
467
+ : type;
468
+ return this.validateRecordType(normalizedType, value, (fieldType, value) => this.routeTypeValidation(fieldType, value, options, {}));
469
+ }
470
+ const urlType = type.startsWith("url"); // Case-sensitive URL detection
471
+ if (urlType) {
472
+ // For basic "url" type, use "url.web" as default
473
+ const urlArgType = type === "url" ? UrlArgsEnum.web : type;
474
+ // Validate URL arg before proceeding
475
+ if (urlArgType !== UrlArgsEnum.web) {
476
+ // Check if it's a valid URL arg
477
+ if (!UrlArgArray.includes(urlArgType)) {
478
+ const error = this.createValidationError([], `Invalid URL argument: ${urlArgType}. Valid arguments are: ${UrlArgArray.join(", ")}`, "INVALID_URL_ARGUMENT", `url.${UrlArgArray.join("|url.")}`, value, {
479
+ allowedValues: [...UrlArgArray],
480
+ suggestion: `Use one of: ${UrlArgArray.join(", ")}`,
481
+ });
482
+ return {
483
+ success: false,
484
+ errors: [error],
485
+ warnings: [],
486
+ data: value,
487
+ };
488
+ }
489
+ }
490
+ return TypeValidators.validateUrl(value, urlArgType);
491
+ }
492
+ // switch with new types and better grouping
493
+ // switch with new types and better grouping using VALIDATOR_TYPES enum
494
+ switch (type.toLowerCase()) {
495
+ case VALIDATOR_TYPES.STRING:
496
+ return TypeValidators.validateString(value, options, constraints, required);
497
+ case VALIDATOR_TYPES.NUMBER:
498
+ case VALIDATOR_TYPES.FLOAT:
499
+ return TypeValidators.validateNumber(value, options, constraints, required);
500
+ case VALIDATOR_TYPES.INT:
501
+ case VALIDATOR_TYPES.INTEGER:
502
+ console.log("Got int value");
503
+ return TypeValidators.validateInteger(value, options, constraints, type);
504
+ case VALIDATOR_TYPES.POSITIVE:
505
+ case VALIDATOR_TYPES.NEGATIVE:
506
+ console.log("Got positive/negative value");
507
+ return TypeValidators.validateNumber(value, options, { ...constraints, type }, required);
508
+ case VALIDATOR_TYPES.DOUBLE:
509
+ return TypeValidators.validateFloat(value, options, constraints, "double");
510
+ case VALIDATOR_TYPES.BOOLEAN:
511
+ case VALIDATOR_TYPES.BOOL:
512
+ return TypeValidators.validateBoolean(value, options, constraints);
513
+ case VALIDATOR_TYPES.DATE:
514
+ case VALIDATOR_TYPES.DATETIME:
515
+ case VALIDATOR_TYPES.TIMESTAMP:
516
+ return TypeValidators.validateDate(value, options, constraints, type);
517
+ case VALIDATOR_TYPES.EMAIL:
518
+ return TypeValidators.validateEmail(value);
519
+ case VALIDATOR_TYPES.UUID:
520
+ case VALIDATOR_TYPES.GUID:
521
+ return TypeValidators.validateUuid(value, type);
522
+ case VALIDATOR_TYPES.PHONE:
523
+ return TypeValidators.validatePhone(value);
524
+ case VALIDATOR_TYPES.SLUG:
525
+ return TypeValidators.validateSlug(value);
526
+ case VALIDATOR_TYPES.USERNAME:
527
+ return TypeValidators.validateUsername(value);
528
+ case VALIDATOR_TYPES.IP:
529
+ return TypeValidators.validateIp(value);
530
+ case VALIDATOR_TYPES.PASSWORD:
531
+ return TypeValidators.validatePassword(value);
532
+ case VALIDATOR_TYPES.TEXT:
533
+ return TypeValidators.validateText(value, {});
534
+ case VALIDATOR_TYPES.JSON:
535
+ return TypeValidators.validateJson(value, { securityMode: "fast" }); // Default to fast
536
+ case "json.fast":
537
+ return TypeValidators.validateJson(value, { securityMode: "fast" });
538
+ case "json.secure":
539
+ return TypeValidators.validateJson(value, { securityMode: "secure" });
540
+ case VALIDATOR_TYPES.OBJECT:
541
+ return TypeValidators.validateObject(value);
542
+ case VALIDATOR_TYPES.UNKNOWN:
543
+ case VALIDATOR_TYPES.VOID:
544
+ case VALIDATOR_TYPES.NULL:
545
+ case VALIDATOR_TYPES.UNDEFINED:
546
+ case VALIDATOR_TYPES.ANY:
547
+ return TypeValidators.validateSpecialType(value, type);
548
+ // NEW TYPE CASES
549
+ case VALIDATOR_TYPES.HEXCOLOR:
550
+ return this.validateHexColor(value);
551
+ case VALIDATOR_TYPES.BASE64:
552
+ return this.validateBase64(value);
553
+ case VALIDATOR_TYPES.JWT:
554
+ return this.validateJWT(value);
555
+ case VALIDATOR_TYPES.SEMVER:
556
+ return this.validateSemVer(value);
557
+ default:
558
+ return this.createErrorResult(`Unknown or unsupported type: ${type}. Please check the type definition.`, value);
559
+ }
560
+ }
561
+ /**
562
+ * NEW: Validate hex color codes (#RGB, #RRGGBB, #RRGGBBAA)
563
+ */
564
+ static validateHexColor(value) {
565
+ if (typeof value !== "string") {
566
+ return this.createErrorResult("Hex color must be a string", value);
567
+ }
568
+ if (!HEX_COLOR_PATTERN.test(value)) {
569
+ return this.createErrorResult("Invalid hex color format. Expected #RGB, #RRGGBB, or #RRGGBBAA", value);
570
+ }
571
+ return this.createSuccessResult(value.toUpperCase());
572
+ }
573
+ /**
574
+ * NEW: Validate Base64 encoded strings
575
+ */
576
+ static validateBase64(value) {
577
+ if (typeof value !== "string") {
578
+ return this.createErrorResult("Base64 must be a string", value);
579
+ }
580
+ if (value.length === 0) {
581
+ return this.createErrorResult("Base64 string cannot be empty", value);
582
+ }
583
+ if (value.length % 4 !== 0) {
584
+ return this.createErrorResult("Base64 string length must be multiple of 4", value);
585
+ }
586
+ if (!BASE64_PATTERN.test(value)) {
587
+ return this.createErrorResult("Invalid Base64 format", value);
588
+ }
589
+ try {
590
+ // Validate by attempting to decode
591
+ if (typeof atob !== "undefined") {
592
+ atob(value);
593
+ }
594
+ else if (typeof Buffer !== "undefined") {
595
+ Buffer.from(value, "base64");
596
+ }
597
+ }
598
+ catch (error) {
599
+ return this.createErrorResult("Invalid Base64 encoding", value);
600
+ }
601
+ return this.createSuccessResult(value);
602
+ }
603
+ /**
604
+ * NEW: Validate JWT (JSON Web Token) format
605
+ */
606
+ static validateJWT(value) {
607
+ if (typeof value !== "string") {
608
+ return this.createErrorResult("JWT must be a string", value);
609
+ }
610
+ if (!JWT_PATTERN.test(value)) {
611
+ return this.createErrorResult("Invalid JWT format. Expected three base64url segments separated by dots", value);
612
+ }
613
+ const parts = value.split(".");
614
+ if (parts.length !== 3) {
615
+ return this.createErrorResult("JWT must have exactly 3 parts", value);
616
+ }
617
+ // Validate each part is valid base64url
618
+ for (let i = 0; i < parts.length; i++) {
619
+ const part = parts[i];
620
+ if (!/^[A-Za-z0-9_-]+$/.test(part)) {
621
+ return this.createErrorResult(`JWT part ${i + 1} contains invalid base64url characters`, value);
622
+ }
623
+ }
624
+ // Try to decode header and payload (not signature for security reasons)
625
+ try {
626
+ const header = JSON.parse(this.base64urlDecode(parts[0]));
627
+ const payload = JSON.parse(this.base64urlDecode(parts[1]));
628
+ if (!header.alg || !header.typ) {
629
+ return this.createErrorResult("JWT header missing required fields (alg, typ)", value);
630
+ }
631
+ }
632
+ catch (error) {
633
+ return this.createErrorResult("JWT header or payload is not valid JSON", value);
634
+ }
635
+ return this.createSuccessResult(value);
636
+ }
637
+ /**
638
+ * NEW: Validate Semantic Versioning (SemVer) format
639
+ */
640
+ static validateSemVer(value) {
641
+ if (typeof value !== "string") {
642
+ return this.createErrorResult("SemVer must be a string", value);
643
+ }
644
+ if (!SEMVER_PATTERN.test(value)) {
645
+ return this.createErrorResult("Invalid SemVer format. Expected MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]", value);
646
+ }
647
+ const parts = value.split(".");
648
+ if (parts.length < 3) {
649
+ return this.createErrorResult("SemVer must have at least MAJOR.MINOR.PATCH", value);
650
+ }
651
+ // Validate major, minor, patch are valid numbers
652
+ const [major, minor] = parts;
653
+ const patchPart = parts[2].split("-")[0].split("+")[0]; // Remove prerelease and build
654
+ if (!Number.isInteger(Number(major)) || Number(major) < 0) {
655
+ return this.createErrorResult("SemVer major version must be a non-negative integer", value);
656
+ }
657
+ if (!Number.isInteger(Number(minor)) || Number(minor) < 0) {
658
+ return this.createErrorResult("SemVer minor version must be a non-negative integer", value);
659
+ }
660
+ if (!Number.isInteger(Number(patchPart)) || Number(patchPart) < 0) {
661
+ return this.createErrorResult("SemVer patch version must be a non-negative integer", value);
662
+ }
663
+ return this.createSuccessResult(value);
664
+ }
665
+ /**
666
+ * Helper: Base64url decode for JWT validation
667
+ */
668
+ static base64urlDecode(str) {
669
+ // Convert base64url to base64
670
+ let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
671
+ // Pad with = if necessary
672
+ while (base64.length % 4) {
673
+ base64 += "=";
674
+ }
675
+ try {
676
+ if (typeof atob !== "undefined") {
677
+ return atob(base64);
678
+ }
679
+ else if (typeof Buffer !== "undefined") {
680
+ return Buffer.from(base64, "base64").toString();
681
+ }
682
+ else {
683
+ throw new Error("No base64 decoder available");
684
+ }
685
+ }
686
+ catch (error) {
687
+ throw new Error("Invalid base64url encoding");
688
+ }
689
+ }
690
+ /**
691
+ * result merging with better performance and warning handling
692
+ */
693
+ static mergeResults(results) {
694
+ if (results.length === 0) {
695
+ return this.createSuccessResult(undefined);
696
+ }
697
+ if (results.length === 1) {
698
+ return results[0];
699
+ }
700
+ let success = true;
701
+ const errors = [];
702
+ const warnings = [];
703
+ const mergedData = [];
704
+ for (const result of results) {
705
+ if (!result.success) {
706
+ success = false;
707
+ }
708
+ errors.push(...result.errors);
709
+ warnings.push(...result.warnings);
710
+ if (result.data !== undefined) {
711
+ mergedData.push(result.data);
712
+ }
713
+ }
714
+ // Remove duplicate errors by comparing path and message
715
+ const uniqueErrors = errors.filter((error, index, arr) => arr.findIndex((e) => e.path.join(".") === error.path.join(".") &&
716
+ e.message === error.message) === index);
717
+ return {
718
+ success,
719
+ errors: uniqueErrors,
720
+ warnings: [...new Set(warnings)], // Remove duplicates
721
+ data: mergedData.length === 1 ? mergedData[0] : mergedData,
722
+ };
723
+ }
724
+ /**
725
+ * Create rich error result with detailed information
726
+ */
727
+ static createErrorResult(error, value, context) {
728
+ const errorObj = ErrorHandler.createError(context ? [context] : [], error, ErrorCode.VALIDATION_ERROR, "unknown", value);
729
+ return {
730
+ success: false,
731
+ errors: [errorObj],
732
+ warnings: [],
733
+ data: value,
734
+ };
735
+ }
736
+ /**
737
+ * Create detailed validation error object
738
+ */
739
+ static createValidationError(path, message, code, expected, received, context) {
740
+ return {
741
+ path,
742
+ message,
743
+ code,
744
+ expected,
745
+ received,
746
+ receivedType: this.getValueType(received),
747
+ context,
748
+ };
749
+ }
750
+ /**
751
+ * Create field validation error with path
752
+ */
753
+ static createFieldError(fieldPath, message, expected, received, code = "FIELD_VALIDATION_ERROR", suggestion) {
754
+ return this.createValidationError(fieldPath.split(".").filter((p) => p.length > 0), message, code, expected, received, suggestion ? { suggestion } : undefined);
755
+ }
756
+ /**
757
+ * Get detailed type information for values
758
+ */
759
+ static getValueType(value) {
760
+ if (value === null)
761
+ return "null";
762
+ if (value === undefined)
763
+ return "undefined";
764
+ if (Array.isArray(value))
765
+ return "array";
766
+ if (value instanceof Date)
767
+ return "date";
768
+ if (value instanceof RegExp)
769
+ return "regexp";
770
+ return typeof value;
771
+ }
772
+ /**
773
+ * success result creation
774
+ */
775
+ static createSuccessResult(data, warnings = []) {
776
+ return {
777
+ success: true,
778
+ errors: [],
779
+ warnings: [...new Set(warnings)], // Remove duplicate warnings
780
+ data,
781
+ };
782
+ }
783
+ /**
784
+ * cache management with selective clearing
785
+ */
786
+ static clearCaches(cacheType) {
787
+ if (!cacheType || cacheType === "all" || cacheType === "constant") {
788
+ constantCache.clear();
789
+ }
790
+ }
791
+ /**
792
+ * cache statistics with memory usage estimation
793
+ */
794
+ static getCacheStats() {
795
+ let memoryEstimate = 0;
796
+ for (const [key, value] of constantCache.entries()) {
797
+ memoryEstimate += key.length * 2; // String characters are 2 bytes each
798
+ memoryEstimate += this.estimateObjectSize(value);
799
+ }
800
+ return {
801
+ constantCacheSize: constantCache.size,
802
+ constantCacheMemoryEstimate: memoryEstimate,
803
+ };
804
+ }
805
+ /**
806
+ * Estimate object size in bytes for cache statistics
807
+ */
808
+ static estimateObjectSize(obj) {
809
+ if (obj === null || obj === undefined)
810
+ return 8;
811
+ switch (typeof obj) {
812
+ case "boolean":
813
+ return 4;
814
+ case "number":
815
+ return 8;
816
+ case "string":
817
+ return obj.length * 2;
818
+ case "object":
819
+ if (Array.isArray(obj)) {
820
+ return obj.reduce((sum, item) => sum + this.estimateObjectSize(item), 24);
821
+ }
822
+ return Object.entries(obj).reduce((sum, [key, value]) => sum + key.length * 2 + this.estimateObjectSize(value), 24);
823
+ default:
824
+ return 8;
825
+ }
826
+ }
827
+ /**
828
+ * validation with comprehensive error context
829
+ */
830
+ static validateWithContext(type, value, options, constraints, fieldPath) {
831
+ const result = this.routeTypeValidation(type, value, options, constraints);
832
+ if (!result.success && fieldPath) {
833
+ // Update error paths with field context
834
+ const updatedErrors = result.errors.map((error) => ({
835
+ ...error,
836
+ path: fieldPath.split(".").concat(error.path),
837
+ message: error.message, // Keep original message, path provides context
838
+ }));
839
+ return {
840
+ ...result,
841
+ errors: updatedErrors,
842
+ };
843
+ }
844
+ return result;
845
+ }
846
+ }
847
+
848
+ export { ValidationHelpers };
849
+ //# sourceMappingURL=ValidationHelpers.js.map