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,887 @@
1
+ 'use strict';
2
+
3
+ var SECURITY_CONSTANTS = require('../../../../../../constants/SECURITY_CONSTANTS.js');
4
+ var VALIDATION_CONSTANTS = require('../../../../../../constants/VALIDATION_CONSTANTS.js');
5
+ var securityHelpers = require('../../../../../utils/securityHelpers.js');
6
+ var Ajv = require('ajv');
7
+ var addFormats = require('ajv-formats');
8
+ var securityValidatorHelpers = require('../../../../../utils/securityValidatorHelpers.js');
9
+ var ErrorHandler = require('../../errors/ErrorHandler.js');
10
+ var errors_type = require('../../errors/types/errors.type.js');
11
+
12
+ class SecurityValidators {
13
+ /**
14
+ * Initialize AJV instance with enhanced security configurations
15
+ */
16
+ static getAjv() {
17
+ if (!this.ajv) {
18
+ this.ajv = new Ajv(this.ajvOptions);
19
+ addFormats(this.ajv);
20
+ // security schema with more comprehensive protections
21
+ this.ajv.addSchema({
22
+ $id: "https://nehonix.space/lib/v/reliant-type",
23
+ type: ["object", "array", "string", "number", "boolean", "null"],
24
+ definitions: {
25
+ secureObject: {
26
+ type: "object",
27
+ not: {
28
+ anyOf: [
29
+ ...Array.from(SECURITY_CONSTANTS.SECURITY_CONSTANTS.DANGEROUS_PROPERTIES).map((prop) => ({
30
+ properties: { [prop]: {} },
31
+ required: [prop],
32
+ })),
33
+ { additionalProperties: { type: "function" } },
34
+ ],
35
+ },
36
+ patternProperties: {
37
+ "^(?!__|constructor|prototype).*": { $ref: "#" },
38
+ },
39
+ },
40
+ },
41
+ if: { type: "object" },
42
+ then: { $ref: "#/definitions/secureObject" },
43
+ else: {
44
+ if: { type: "array" },
45
+ then: { items: { $ref: "#" } },
46
+ },
47
+ }, "secure-json-v2");
48
+ }
49
+ return this.ajv;
50
+ }
51
+ /**
52
+ * Check for dangerous properties that could lead to prototype pollution
53
+ */
54
+ static hasDangerousProperties(obj, visited = new WeakSet()) {
55
+ if (!obj || typeof obj !== "object" || visited.has(obj)) {
56
+ return false;
57
+ }
58
+ visited.add(obj);
59
+ // Check current level
60
+ for (const key of Object.keys(obj)) {
61
+ if (SECURITY_CONSTANTS.SECURITY_CONSTANTS.DANGEROUS_PROPERTIES.has(key)) {
62
+ return true;
63
+ }
64
+ }
65
+ // Recursively check nested objects
66
+ for (const value of Object.values(obj)) {
67
+ if (this.hasDangerousProperties(value, visited)) {
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ }
73
+ /**
74
+ * Execute validation with timeout protection
75
+ */
76
+ static async withTimeout(operation, timeoutMs = SECURITY_CONSTANTS.SECURITY_CONSTANTS.MAX_VALIDATION_TIME) {
77
+ return new Promise((resolve, reject) => {
78
+ const timer = setTimeout(() => {
79
+ reject(new Error(`Validation timeout after ${timeoutMs}ms`));
80
+ }, timeoutMs);
81
+ Promise.resolve(operation()).then((result) => {
82
+ clearTimeout(timer);
83
+ resolve(result);
84
+ }, (error) => {
85
+ clearTimeout(timer);
86
+ reject(error);
87
+ });
88
+ });
89
+ }
90
+ /**
91
+ * text validation with comprehensive security checks
92
+ */
93
+ static async validateText(value, options = {}) {
94
+ const startTime = Date.now();
95
+ const operationName = "validateText";
96
+ try {
97
+ const result = await this.withTimeout(async () => {
98
+ return this.validateTextSync(value, options);
99
+ }, options.timeout);
100
+ if (options.enableMetrics) {
101
+ securityValidatorHelpers.ValidationMetrics.record(operationName, Date.now() - startTime, !result.success);
102
+ }
103
+ return result;
104
+ }
105
+ catch (error) {
106
+ if (options.enableMetrics) {
107
+ securityValidatorHelpers.ValidationMetrics.record(operationName, Date.now() - startTime, true);
108
+ }
109
+ const msg = `${error instanceof Error ? error.message : "Unknown error"}`;
110
+ return {
111
+ success: false,
112
+ errors: [
113
+ ErrorHandler.ErrorHandler.createValidationError([], msg, errors_type.ErrorCode.UNKNOWN_ERROR),
114
+ ],
115
+ warnings: [],
116
+ data: value,
117
+ };
118
+ }
119
+ }
120
+ static validateTextSync(value, options) {
121
+ const result = {
122
+ success: true,
123
+ errors: [],
124
+ warnings: [],
125
+ data: value,
126
+ };
127
+ const { minLength = 0, maxLength = SECURITY_CONSTANTS.SECURITY_CONSTANTS.MAX_TEXT_LENGTH, allowEmpty = true, trimWhitespace = false, allowedCharacters, forbiddenPatterns = [], encoding = "utf8", preventXSS = true, preventSQLInjection = true, preventLDAPInjection = false, preventCommandInjection = false, normalizeUnicode = false, maxLines = Infinity, requireAlphanumeric = false, allowHTML = false, stripHTML = false, } = options;
128
+ if (typeof value !== "string") {
129
+ result.success = false;
130
+ result.errors.push(ErrorHandler.ErrorHandler.createTypeError([], "string", value));
131
+ return result;
132
+ }
133
+ let text = value;
134
+ // Early size check to prevent DoS
135
+ if (text.length > maxLength) {
136
+ result.success = false;
137
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], `Text exceeds maximum length of ${maxLength} characters`, value, errors_type.ErrorCode.STRING_TOO_LONG));
138
+ return result;
139
+ }
140
+ // Trim whitespace if requested
141
+ if (trimWhitespace) {
142
+ const trimmed = text.trim();
143
+ if (trimmed !== text) {
144
+ text = trimmed;
145
+ result.data = text;
146
+ result.warnings.push("Whitespace trimmed from text");
147
+ }
148
+ }
149
+ // Unicode normalization
150
+ if (normalizeUnicode) {
151
+ try {
152
+ const normalized = text.normalize("NFC");
153
+ if (normalized !== text) {
154
+ text = normalized;
155
+ result.data = text;
156
+ result.warnings.push("Unicode characters normalized");
157
+ }
158
+ }
159
+ catch (error) {
160
+ result.warnings.push("Unicode normalization failed");
161
+ }
162
+ }
163
+ // Empty string validation
164
+ if (!allowEmpty && text.length === 0) {
165
+ result.success = false;
166
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text cannot be empty", value, errors_type.ErrorCode.STRING_TOO_SHORT));
167
+ return result;
168
+ }
169
+ // Length validation
170
+ if (text.length < minLength) {
171
+ result.success = false;
172
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], `Text must be at least ${minLength} characters long`, value, errors_type.ErrorCode.STRING_TOO_SHORT));
173
+ }
174
+ // Line count validation
175
+ if (maxLines !== Infinity) {
176
+ const lineCount = text.split("\n").length;
177
+ if (lineCount > maxLines) {
178
+ result.success = false;
179
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], `Text cannot exceed ${maxLines} lines`, value, errors_type.ErrorCode.STRING_TOO_LONG));
180
+ }
181
+ }
182
+ // Character encoding validation
183
+ if (encoding === "ascii" && !/^[\x00-\x7F]*$/.test(text)) {
184
+ result.success = false;
185
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains non-ASCII characters", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
186
+ }
187
+ // Alphanumeric requirement
188
+ if (requireAlphanumeric && !/^[a-zA-Z0-9\s]*$/.test(text)) {
189
+ result.success = false;
190
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text must contain only alphanumeric characters and spaces", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
191
+ }
192
+ // Allowed characters validation
193
+ if (allowedCharacters && !allowedCharacters.test(text)) {
194
+ result.success = false;
195
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains disallowed characters", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
196
+ }
197
+ // Forbidden patterns check
198
+ for (const pattern of forbiddenPatterns) {
199
+ if (pattern.test(text)) {
200
+ result.success = false;
201
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains forbidden pattern", value, errors_type.ErrorCode.PATTERN_MISMATCH));
202
+ break;
203
+ }
204
+ }
205
+ // XSS prevention
206
+ if (preventXSS && !allowHTML) {
207
+ for (const pattern of SECURITY_CONSTANTS.SECURITY_CONSTANTS.XSS_PATTERNS) {
208
+ if (pattern.test(text)) {
209
+ result.success = false;
210
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains potentially malicious content (XSS)", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
211
+ break;
212
+ }
213
+ }
214
+ // Additional XSS checks
215
+ if (text.includes("javascript:") || text.includes("data:text/html")) {
216
+ result.success = false;
217
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains dangerous URI schemes", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
218
+ }
219
+ }
220
+ // SQL injection prevention
221
+ if (preventSQLInjection) {
222
+ for (const pattern of SECURITY_CONSTANTS.SECURITY_CONSTANTS.SQL_PATTERNS) {
223
+ if (pattern.test(text)) {
224
+ result.warnings.push("Text contains SQL-like patterns");
225
+ break;
226
+ }
227
+ }
228
+ }
229
+ // LDAP injection prevention
230
+ if (preventLDAPInjection) {
231
+ for (const pattern of SECURITY_CONSTANTS.SECURITY_CONSTANTS.LDAP_PATTERNS) {
232
+ if (pattern.test(text)) {
233
+ result.success = false;
234
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains LDAP injection patterns", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
235
+ break;
236
+ }
237
+ }
238
+ }
239
+ // Command injection prevention
240
+ if (preventCommandInjection) {
241
+ for (const pattern of SECURITY_CONSTANTS.SECURITY_CONSTANTS.COMMAND_INJECTION_PATTERNS) {
242
+ if (pattern.test(text)) {
243
+ result.success = false;
244
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains command injection patterns", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
245
+ break;
246
+ }
247
+ }
248
+ }
249
+ // Control character detection
250
+ if (/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/.test(text)) {
251
+ result.warnings.push("Text contains control characters");
252
+ }
253
+ // Null byte detection
254
+ if (text.includes("\0")) {
255
+ result.success = false;
256
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], "Text contains null bytes", value, errors_type.ErrorCode.INVALID_STRING_FORMAT));
257
+ }
258
+ return result;
259
+ }
260
+ /**
261
+ * JSON validation with improved security and performance
262
+ */
263
+ static async validateJson(value, options = {}) {
264
+ const startTime = Date.now();
265
+ const operationName = "validateJson";
266
+ // Generate cache key if caching is enabled
267
+ const cacheKey = options.useCache
268
+ ? `json_${JSON.stringify(value).substring(0, 100)}_${JSON.stringify(options)}`
269
+ : null;
270
+ if (cacheKey) {
271
+ const cached = securityValidatorHelpers.ValidationCache.get(cacheKey);
272
+ if (cached) {
273
+ return cached;
274
+ }
275
+ }
276
+ try {
277
+ const result = await this.withTimeout(async () => {
278
+ return this.validateJsonSync(value, options);
279
+ }, options.timeout);
280
+ if (options.enableMetrics) {
281
+ securityValidatorHelpers.ValidationMetrics.record(operationName, Date.now() - startTime, !result.success);
282
+ }
283
+ if (cacheKey && result.success) {
284
+ securityValidatorHelpers.ValidationCache.set(cacheKey, result);
285
+ }
286
+ return result;
287
+ }
288
+ catch (error) {
289
+ if (options.enableMetrics) {
290
+ securityValidatorHelpers.ValidationMetrics.record(operationName, Date.now() - startTime, true);
291
+ }
292
+ const msg = `${error instanceof Error ? error.message : "Unknown error"}`;
293
+ const code = error instanceof Error ? error.name : errors_type.ErrorCode.UNKNOWN_ERROR;
294
+ return {
295
+ success: false,
296
+ errors: [ErrorHandler.ErrorHandler.createValidationError([], msg, code)],
297
+ warnings: [],
298
+ data: value,
299
+ };
300
+ }
301
+ }
302
+ static validateJsonSync(value, options) {
303
+ const result = {
304
+ success: true,
305
+ errors: [],
306
+ warnings: [],
307
+ data: value,
308
+ };
309
+ const { maxDepth = VALIDATION_CONSTANTS.MAX_OBJECT_DEPTH, maxKeys = 1000, maxStringLength = 10000, maxArrayLength = 1000, allowedTypes = ["object", "array", "string", "number", "boolean", "null"], forbiddenKeys = [], schema, preventCircular = true, maxSize = SECURITY_CONSTANTS.SECURITY_CONSTANTS.MAX_JSON_SIZE, securityMode = "secure", } = options;
310
+ let parsedData;
311
+ if (typeof value === "string") {
312
+ // Size check for string
313
+ if (value.length > maxSize) {
314
+ result.success = false;
315
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], `JSON string exceeds maximum size of ${maxSize} characters`, value, errors_type.ErrorCode.STRING_TOO_LONG));
316
+ return result;
317
+ }
318
+ try {
319
+ parsedData = JSON.parse(value);
320
+ }
321
+ catch (error) {
322
+ result.success = false;
323
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Invalid JSON string: ${error instanceof Error ? error.message : "Parse error"}`, errors_type.ErrorCode.INVALID_JSON));
324
+ return result;
325
+ }
326
+ }
327
+ else if (typeof value === "object" && value !== null) {
328
+ parsedData = value;
329
+ }
330
+ else {
331
+ result.success = false;
332
+ result.errors.push(ErrorHandler.ErrorHandler.createTypeError([], "string or object", value));
333
+ return result;
334
+ }
335
+ // Security validations based on mode
336
+ if (securityMode === "secure" || securityMode === "strict") {
337
+ if (this.hasDangerousProperties(parsedData)) {
338
+ result.success = false;
339
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "JSON contains dangerous properties (prototype pollution risk)", errors_type.ErrorCode.INVALID_JSON));
340
+ return result;
341
+ }
342
+ if (securityMode === "strict") {
343
+ const ajv = this.getAjv();
344
+ const validate = ajv.getSchema("secure-json-v2");
345
+ if (validate && !validate(parsedData)) {
346
+ result.success = false;
347
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "JSON failed strict security validation", errors_type.ErrorCode.INVALID_JSON));
348
+ if (validate.errors) {
349
+ result.warnings.push(`AJV errors: ${JSON.stringify(validate.errors)}`);
350
+ }
351
+ return result;
352
+ }
353
+ }
354
+ }
355
+ // Circular reference detection
356
+ if (preventCircular) {
357
+ try {
358
+ JSON.stringify(parsedData);
359
+ }
360
+ catch (error) {
361
+ result.success = false;
362
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "JSON contains circular references", errors_type.ErrorCode.INVALID_JSON));
363
+ return result;
364
+ }
365
+ }
366
+ // Deep validation
367
+ const validationResult = securityHelpers.validateJsonDeep(parsedData, {
368
+ maxDepth,
369
+ maxKeys,
370
+ maxStringLength,
371
+ maxArrayLength,
372
+ allowedTypes,
373
+ forbiddenKeys,
374
+ currentDepth: 0,
375
+ keyCount: 0,
376
+ });
377
+ result.success = result.success && validationResult.success;
378
+ result.errors.push(...validationResult.errors);
379
+ result.warnings.push(...validationResult.warnings);
380
+ result.data = parsedData;
381
+ // Schema validation if provided
382
+ if (schema && result.success) {
383
+ const schemaResult = securityHelpers.validateJsonSchema(parsedData, schema);
384
+ result.success = result.success && schemaResult.success;
385
+ result.errors.push(...schemaResult.errors);
386
+ result.warnings.push(...schemaResult.warnings);
387
+ }
388
+ return result;
389
+ }
390
+ /**
391
+ * IP validation with geographic and security checks
392
+ */
393
+ static validateIp(value, options = {}) {
394
+ const result = {
395
+ success: true,
396
+ errors: [],
397
+ warnings: [],
398
+ data: value,
399
+ };
400
+ const { version = "both", allowPrivate = true, allowLoopback = true, allowMulticast = false, allowReserved = true, allowCIDR = false, strict = true, blockBogons = false, allowDocumentation = true, } = options;
401
+ if (typeof value !== "string") {
402
+ result.success = false;
403
+ result.errors.push(ErrorHandler.ErrorHandler.createSimpleError("Expected string for IP address", [], "string"));
404
+ return result;
405
+ }
406
+ const ip = value.trim();
407
+ // Basic format validation
408
+ if (!/^[\d\.:a-fA-F\/]+$/.test(ip)) {
409
+ result.success = false;
410
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "IP address contains invalid characters", errors_type.ErrorCode.SECURITY_VIOLATION));
411
+ return result;
412
+ }
413
+ let ipAddress = ip;
414
+ let cidrPrefix = null;
415
+ let isIPv4 = false;
416
+ let isIPv6 = false;
417
+ // Handle CIDR notation
418
+ if (ip.includes("/")) {
419
+ if (!allowCIDR) {
420
+ result.success = false;
421
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "CIDR notation is not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
422
+ return result;
423
+ }
424
+ const parts = ip.split("/");
425
+ if (parts.length !== 2) {
426
+ result.success = false;
427
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid CIDR notation format", errors_type.ErrorCode.SECURITY_VIOLATION));
428
+ return result;
429
+ }
430
+ ipAddress = parts[0];
431
+ const prefixStr = parts[1];
432
+ if (!/^\d+$/.test(prefixStr)) {
433
+ result.success = false;
434
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "CIDR prefix must be numeric", errors_type.ErrorCode.SECURITY_VIOLATION));
435
+ return result;
436
+ }
437
+ cidrPrefix = parseInt(prefixStr, 10);
438
+ }
439
+ // Validate IP format
440
+ const ipv4Result = securityHelpers.validateIPv4(ipAddress, strict);
441
+ const ipv6Result = securityHelpers.validateIPv6(ipAddress);
442
+ isIPv4 = ipv4Result.valid;
443
+ isIPv6 = ipv6Result.valid;
444
+ // Version validation
445
+ if (version === "v4" && !isIPv4) {
446
+ result.success = false;
447
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid IPv4 address format", errors_type.ErrorCode.SECURITY_VIOLATION));
448
+ return result;
449
+ }
450
+ if (version === "v6" && !isIPv6) {
451
+ result.success = false;
452
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid IPv6 address format", errors_type.ErrorCode.SECURITY_VIOLATION));
453
+ return result;
454
+ }
455
+ if (version === "both" && !isIPv4 && !isIPv6) {
456
+ result.success = false;
457
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid IP address format (must be valid IPv4 or IPv6)", errors_type.ErrorCode.SECURITY_VIOLATION));
458
+ return result;
459
+ }
460
+ // CIDR prefix validation
461
+ if (cidrPrefix !== null) {
462
+ if (isIPv4 && (cidrPrefix < 0 || cidrPrefix > 32)) {
463
+ result.success = false;
464
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid IPv4 CIDR prefix (must be 0-32)", errors_type.ErrorCode.SECURITY_VIOLATION));
465
+ }
466
+ if (isIPv6 && (cidrPrefix < 0 || cidrPrefix > 128)) {
467
+ result.success = false;
468
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid IPv6 CIDR prefix (must be 0-128)", errors_type.ErrorCode.SECURITY_VIOLATION));
469
+ }
470
+ }
471
+ // IPv4 specific validations
472
+ if (isIPv4) {
473
+ const octets = ipAddress.split(".").map(Number);
474
+ // private IP detection
475
+ if (!allowPrivate) {
476
+ if (octets[0] === 10 ||
477
+ (octets[0] === 172 && octets[1] >= 16 && octets[1] <= 31) ||
478
+ (octets[0] === 192 && octets[1] === 168) ||
479
+ (octets[0] === 169 && octets[1] === 254) // Link-local
480
+ ) {
481
+ result.success = false;
482
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Private IPv4 addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
483
+ }
484
+ }
485
+ // Loopback validation
486
+ if (!allowLoopback && octets[0] === 127) {
487
+ result.success = false;
488
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Loopback addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
489
+ }
490
+ // Multicast validation
491
+ if (!allowMulticast && octets[0] >= 224 && octets[0] <= 239) {
492
+ result.success = false;
493
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Multicast addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
494
+ }
495
+ // Documentation addresses (RFC 5737)
496
+ if (!allowDocumentation) {
497
+ if ((octets[0] === 192 && octets[1] === 0 && octets[2] === 2) ||
498
+ (octets[0] === 198 && octets[1] === 51 && octets[2] === 100) ||
499
+ (octets[0] === 203 && octets[1] === 0 && octets[2] === 113)) {
500
+ result.success = false;
501
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Documentation addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
502
+ }
503
+ }
504
+ // Bogon detection
505
+ if (blockBogons) {
506
+ if (octets[0] === 0 ||
507
+ octets[0] === 255 ||
508
+ (octets[0] >= 240 && octets[0] <= 255)) {
509
+ result.success = false;
510
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Bogon IP address detected", errors_type.ErrorCode.SECURITY_VIOLATION));
511
+ }
512
+ }
513
+ // Reserved ranges
514
+ if (!allowReserved) {
515
+ if (octets[0] === 0 || octets[0] === 255) {
516
+ result.success = false;
517
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Reserved IPv4 addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
518
+ }
519
+ }
520
+ }
521
+ // IPv6 specific validations
522
+ if (isIPv6) {
523
+ const normalized = securityHelpers.normalizeIPv6(ipAddress);
524
+ if (!allowLoopback &&
525
+ normalized === "0000:0000:0000:0000:0000:0000:0000:0001") {
526
+ result.success = false;
527
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "IPv6 loopback address not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
528
+ }
529
+ // Unique local addresses (RFC 4193)
530
+ if (!allowPrivate &&
531
+ (normalized.startsWith("fc00:") || normalized.startsWith("fd00:"))) {
532
+ result.success = false;
533
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Private IPv6 addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
534
+ }
535
+ // Link-local addresses
536
+ if (!allowPrivate && normalized.startsWith("fe80:")) {
537
+ result.success = false;
538
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Link-local IPv6 addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
539
+ }
540
+ if (!allowMulticast && normalized.startsWith("ff00:")) {
541
+ result.success = false;
542
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "IPv6 multicast addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
543
+ }
544
+ // Documentation prefix (RFC 3849)
545
+ if (!allowDocumentation && normalized.startsWith("2001:0db8:")) {
546
+ result.success = false;
547
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Documentation IPv6 addresses not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
548
+ }
549
+ }
550
+ return result;
551
+ }
552
+ /**
553
+ * object validation with better security and performance
554
+ */
555
+ static validateObject(value, options = {}) {
556
+ const result = {
557
+ success: true,
558
+ errors: [],
559
+ warnings: [],
560
+ data: value,
561
+ };
562
+ const { allowNull = false, allowArray = false, maxDepth = VALIDATION_CONSTANTS.MAX_OBJECT_DEPTH, maxKeys = 1000, requiredKeys = [], allowedKeys = [], forbiddenKeys = [], keyPattern, schema, strict = false, preventPrototypePollution = true, maxPropertyNameLength = 100, } = options;
563
+ // Null check
564
+ if (value === null) {
565
+ if (!allowNull) {
566
+ result.success = false;
567
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Null values not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
568
+ }
569
+ return result;
570
+ }
571
+ // Array check
572
+ if (Array.isArray(value)) {
573
+ if (!allowArray) {
574
+ result.success = false;
575
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Arrays not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
576
+ }
577
+ return result;
578
+ }
579
+ // Type check
580
+ if (typeof value !== "object") {
581
+ result.success = false;
582
+ result.errors.push(ErrorHandler.ErrorHandler.createTypeError([], "object", value));
583
+ return result;
584
+ }
585
+ // Prototype pollution check
586
+ if (preventPrototypePollution && this.hasDangerousProperties(value)) {
587
+ result.success = false;
588
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Object contains dangerous properties that could lead to prototype pollution", errors_type.ErrorCode.SECURITY_VIOLATION));
589
+ return result;
590
+ }
591
+ const keys = Object.keys(value);
592
+ // Key count validation
593
+ if (keys.length > maxKeys) {
594
+ result.success = false;
595
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Object has too many keys (${keys.length}), maximum allowed: ${maxKeys}`, errors_type.ErrorCode.SECURITY_VIOLATION));
596
+ }
597
+ // Required keys validation
598
+ for (const requiredKey of requiredKeys) {
599
+ if (!(requiredKey in value)) {
600
+ result.success = false;
601
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Missing required key: ${requiredKey}`, errors_type.ErrorCode.SECURITY_VIOLATION));
602
+ }
603
+ }
604
+ // key validation
605
+ for (const key of keys) {
606
+ // Property name length check
607
+ if (key.length > maxPropertyNameLength) {
608
+ result.success = false;
609
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Property name '${key.substring(0, 20)}...' exceeds maximum length of ${maxPropertyNameLength}`, errors_type.ErrorCode.SECURITY_VIOLATION));
610
+ continue;
611
+ }
612
+ // Dangerous key detection
613
+ if (SECURITY_CONSTANTS.SECURITY_CONSTANTS.DANGEROUS_PROPERTIES.has(key)) {
614
+ result.success = false;
615
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Dangerous property name detected: '${key}'`, errors_type.ErrorCode.SECURITY_VIOLATION));
616
+ continue;
617
+ }
618
+ // Allowed keys check
619
+ if (allowedKeys.length > 0 && !allowedKeys.includes(key)) {
620
+ if (strict) {
621
+ result.success = false;
622
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Key '${key}' is not in allowed keys list`, errors_type.ErrorCode.SECURITY_VIOLATION));
623
+ }
624
+ else {
625
+ result.warnings.push(`Key '${key}' is not in allowed keys list`);
626
+ }
627
+ }
628
+ // Forbidden keys check
629
+ if (forbiddenKeys.includes(key)) {
630
+ result.success = false;
631
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Key '${key}' is forbidden`, errors_type.ErrorCode.SECURITY_VIOLATION));
632
+ }
633
+ // Key pattern validation
634
+ if (keyPattern && !keyPattern.test(key)) {
635
+ result.success = false;
636
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Key '${key}' does not match required pattern`, errors_type.ErrorCode.SECURITY_VIOLATION));
637
+ }
638
+ // Check for suspicious patterns in key names
639
+ if (/^__|.*prototype.*|.*constructor.*$/i.test(key)) {
640
+ result.warnings.push(`Suspicious property name detected: '${key}'`);
641
+ }
642
+ }
643
+ // Deep structure validation
644
+ const deepResult = securityHelpers.validateObjectDeep(value, maxDepth, 0);
645
+ result.success = result.success && deepResult.success;
646
+ result.errors.push(...deepResult.errors);
647
+ result.warnings.push(...deepResult.warnings);
648
+ // Schema validation if provided
649
+ if (schema && result.success) {
650
+ const schemaResult = securityHelpers.validateObjectSchema(value, schema);
651
+ result.success = result.success && schemaResult.success;
652
+ result.errors.push(...schemaResult.errors);
653
+ result.warnings.push(...schemaResult.warnings);
654
+ }
655
+ return result;
656
+ }
657
+ /**
658
+ * Validate email address with comprehensive checks
659
+ */
660
+ static validateEmail(value, options = {}) {
661
+ const result = {
662
+ success: true,
663
+ errors: [],
664
+ warnings: [],
665
+ data: value,
666
+ };
667
+ const { allowInternational = true, maxLength = 254, allowedDomains = [], blockedDomains = [], strict = true, } = options;
668
+ if (typeof value !== "string") {
669
+ result.success = false;
670
+ result.errors.push(ErrorHandler.ErrorHandler.createTypeError([], "string", value));
671
+ return result;
672
+ }
673
+ const email = value.trim().toLowerCase();
674
+ // Length check
675
+ if (email.length > maxLength) {
676
+ result.success = false;
677
+ result.errors.push(ErrorHandler.ErrorHandler.createStringError([], `Email exceeds maximum length of ${maxLength} characters`, value, errors_type.ErrorCode.STRING_TOO_LONG));
678
+ return result;
679
+ }
680
+ // Basic format check - must contain exactly one @
681
+ const atSymbolCount = (email.match(/@/g) || []).length;
682
+ if (atSymbolCount !== 1) {
683
+ result.success = false;
684
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email must contain exactly one @ symbol", errors_type.ErrorCode.SECURITY_VIOLATION));
685
+ return result;
686
+ }
687
+ const [localPart, domain] = email.split("@");
688
+ // Check for empty parts
689
+ if (!localPart || !domain) {
690
+ result.success = false;
691
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part and domain cannot be empty", errors_type.ErrorCode.SECURITY_VIOLATION));
692
+ return result;
693
+ }
694
+ // Local part length validation
695
+ if (localPart.length > 64) {
696
+ result.success = false;
697
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part exceeds 64 characters", errors_type.ErrorCode.SECURITY_VIOLATION));
698
+ }
699
+ // Plus addressing check - FIXED LOGIC
700
+ if (localPart.includes("+")) {
701
+ result.success = false;
702
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Plus addressing (+ symbols) is not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
703
+ }
704
+ // Local part character validation - FIXED TO PROPERLY HANDLE INVALID CHARACTERS
705
+ if (strict) {
706
+ // Practical validation - common characters only (excludes # and other problematic chars)
707
+ const validLocalPartRegex = /^[a-zA-Z0-9._+-]+$/;
708
+ if (!validLocalPartRegex.test(localPart)) {
709
+ result.success = false;
710
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part contains invalid characters", errors_type.ErrorCode.SECURITY_VIOLATION));
711
+ }
712
+ }
713
+ else {
714
+ // RFC 5322 compliant - more permissive but excludes problematic chars like #
715
+ const validLocalPartRegex = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*$/;
716
+ if (!validLocalPartRegex.test(localPart)) {
717
+ result.success = false;
718
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part contains invalid characters", errors_type.ErrorCode.SECURITY_VIOLATION));
719
+ }
720
+ }
721
+ // Check for consecutive dots
722
+ if (localPart.includes("..")) {
723
+ result.success = false;
724
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part cannot contain consecutive dots", errors_type.ErrorCode.SECURITY_VIOLATION));
725
+ }
726
+ // Check for dots at start or end
727
+ if (localPart.startsWith(".") || localPart.endsWith(".")) {
728
+ result.success = false;
729
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part cannot start or end with a dot", errors_type.ErrorCode.SECURITY_VIOLATION));
730
+ }
731
+ // Domain validation
732
+ if (domain.length > 255) {
733
+ result.success = false;
734
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email domain exceeds 255 characters", errors_type.ErrorCode.SECURITY_VIOLATION));
735
+ }
736
+ // Domain format validation
737
+ if (strict) {
738
+ // Basic domain validation - must have at least one dot and valid TLD
739
+ const validDomainRegex = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
740
+ if (!validDomainRegex.test(domain)) {
741
+ result.success = false;
742
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid domain format - must contain at least one dot and valid TLD", errors_type.ErrorCode.SECURITY_VIOLATION));
743
+ }
744
+ }
745
+ else {
746
+ // More strict domain validation
747
+ const validDomainRegex = /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
748
+ if (!validDomainRegex.test(domain)) {
749
+ result.success = false;
750
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Invalid domain format", errors_type.ErrorCode.SECURITY_VIOLATION));
751
+ }
752
+ }
753
+ // Check for consecutive dots in domain
754
+ if (domain.includes("..")) {
755
+ result.success = false;
756
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Domain cannot contain consecutive dots", errors_type.ErrorCode.SECURITY_VIOLATION));
757
+ }
758
+ // Check for dots at start or end of domain
759
+ if (domain.startsWith(".") || domain.endsWith(".")) {
760
+ result.success = false;
761
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Domain cannot start or end with a dot", errors_type.ErrorCode.SECURITY_VIOLATION));
762
+ }
763
+ // International domain validation
764
+ if (!allowInternational && /[^\x00-\x7F]/.test(domain)) {
765
+ result.success = false;
766
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "International domain names are not allowed", errors_type.ErrorCode.SECURITY_VIOLATION));
767
+ }
768
+ // Domain whitelist/blacklist
769
+ if (allowedDomains.length > 0 && !allowedDomains.includes(domain)) {
770
+ result.success = false;
771
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Email domain '${domain}' is not allowed`, errors_type.ErrorCode.SECURITY_VIOLATION));
772
+ }
773
+ if (blockedDomains.includes(domain)) {
774
+ result.success = false;
775
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], `Email domain '${domain}' is blocked`, errors_type.ErrorCode.SECURITY_VIOLATION));
776
+ }
777
+ // Additional validation for common invalid patterns
778
+ const invalidCharsRegex = /[<>()[\]\\,;:\s@"]/;
779
+ if (invalidCharsRegex.test(localPart)) {
780
+ result.success = false;
781
+ result.errors.push(ErrorHandler.ErrorHandler.createValidationError([], "Email local part contains prohibited characters (spaces, quotes, brackets, etc.)", errors_type.ErrorCode.SECURITY_VIOLATION));
782
+ }
783
+ // Suspicious patterns
784
+ if (/test|temp|fake|spam|noreply/i.test(email)) {
785
+ result.warnings.push("Email appears to be temporary or test address");
786
+ }
787
+ // Set the cleaned data
788
+ result.data = email;
789
+ return result;
790
+ }
791
+ /**
792
+ * Get validation performance metrics
793
+ */
794
+ static getMetrics() {
795
+ return securityValidatorHelpers.ValidationMetrics.getMetrics();
796
+ }
797
+ /**
798
+ * Reset validation metrics
799
+ */
800
+ static resetMetrics() {
801
+ securityValidatorHelpers.ValidationMetrics.reset();
802
+ }
803
+ /**
804
+ * Clear validation cache
805
+ */
806
+ static clearCache() {
807
+ securityValidatorHelpers.ValidationCache.clear();
808
+ }
809
+ /**
810
+ * Validate multiple values with batch processing
811
+ */
812
+ static async validateBatch(values, validator, options = {}) {
813
+ const { continueOnError = true, maxConcurrency = 10, timeout = 30000, } = options;
814
+ const results = [];
815
+ const batches = [];
816
+ // Create batches
817
+ for (let i = 0; i < values.length; i += maxConcurrency) {
818
+ batches.push(values.slice(i, i + maxConcurrency));
819
+ }
820
+ try {
821
+ await this.withTimeout(async () => {
822
+ for (const batch of batches) {
823
+ const batchPromises = batch.map(async (value) => {
824
+ try {
825
+ return await Promise.resolve(validator(value));
826
+ }
827
+ catch (error) {
828
+ return {
829
+ success: false,
830
+ errors: [
831
+ ErrorHandler.ErrorHandler.createValidationError([], `Batch validation error: ${error instanceof Error ? error.message : "Unknown error"}`, errors_type.ErrorCode.UNKNOWN_ERROR),
832
+ ],
833
+ warnings: [],
834
+ data: value,
835
+ };
836
+ }
837
+ });
838
+ const batchResults = await Promise.all(batchPromises);
839
+ results.push(...batchResults);
840
+ // Stop on first error if continueOnError is false
841
+ if (!continueOnError && batchResults.some((r) => !r.success)) {
842
+ break;
843
+ }
844
+ }
845
+ }, timeout);
846
+ }
847
+ catch (error) {
848
+ // Add timeout error for remaining values
849
+ const remaining = values.length - results.length;
850
+ for (let i = 0; i < remaining; i++) {
851
+ results.push({
852
+ success: false,
853
+ errors: [
854
+ ErrorHandler.ErrorHandler.createValidationError([], `Batch validation timeout: ${error instanceof Error ? error.message : "Unknown error"}`, errors_type.ErrorCode.UNKNOWN_ERROR),
855
+ ],
856
+ warnings: [],
857
+ data: values[results.length + i],
858
+ });
859
+ }
860
+ }
861
+ const summary = {
862
+ total: results.length,
863
+ passed: results.filter((r) => r.success).length,
864
+ failed: results.filter((r) => !r.success).length,
865
+ };
866
+ return { results, summary };
867
+ }
868
+ }
869
+ SecurityValidators.ajv = null;
870
+ SecurityValidators.ajvOptions = {
871
+ strict: false,
872
+ allErrors: true,
873
+ removeAdditional: false,
874
+ useDefaults: false,
875
+ coerceTypes: false,
876
+ validateFormats: true,
877
+ addUsedSchema: false,
878
+ verbose: false,
879
+ loadSchema: false, // Disable remote schema loading for security
880
+ };
881
+
882
+ exports.SECURITY_CONSTANTS = SECURITY_CONSTANTS.SECURITY_CONSTANTS;
883
+ exports.ValidationCache = securityValidatorHelpers.ValidationCache;
884
+ exports.ValidationMetrics = securityValidatorHelpers.ValidationMetrics;
885
+ exports.Security = SecurityValidators;
886
+ exports.SecurityValidators = SecurityValidators;
887
+ //# sourceMappingURL=securityValidator.js.map