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,378 @@
1
+ /**
2
+ * TypeScript Compiler API Integration
3
+ *
4
+ * This module uses TypeScript's compiler API to extract real type information
5
+ * and generate proper validation schemas at compile-time.
6
+ */
7
+
8
+ // Import TypeScript compiler API
9
+ // Note: This requires 'typescript' package to be installed
10
+ import * as ts from 'typescript';
11
+
12
+ /**
13
+ * Detailed TypeScript type information extracted via compiler API
14
+ */
15
+ export interface TypeScriptTypeInfo {
16
+ kind: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'union' | 'literal' | 'record' | 'unknown';
17
+ name?: string;
18
+ isOptional: boolean;
19
+ isArray: boolean;
20
+ elementType?: TypeScriptTypeInfo;
21
+ properties?: Record<string, TypeScriptTypeInfo>;
22
+ unionTypes?: TypeScriptTypeInfo[];
23
+ literalValue?: string | number | boolean;
24
+ keyType?: string;
25
+ valueType?: string;
26
+ }
27
+
28
+ /**
29
+ * TypeScript Type Analyzer
30
+ *
31
+ * Uses TypeScript's compiler API to analyze types and generate schemas
32
+ */
33
+ export class TypeAnalyzer {
34
+ private program: ts.Program;
35
+ private checker: ts.TypeChecker;
36
+
37
+ constructor(sourceFiles: string[], compilerOptions?: ts.CompilerOptions) {
38
+ const defaultOptions: ts.CompilerOptions = {
39
+ target: ts.ScriptTarget.ES2020,
40
+ module: ts.ModuleKind.CommonJS,
41
+ strict: true,
42
+ esModuleInterop: true,
43
+ skipLibCheck: true,
44
+ forceConsistentCasingInFileNames: true,
45
+ ...compilerOptions
46
+ };
47
+
48
+ this.program = ts.createProgram(sourceFiles, defaultOptions);
49
+ this.checker = this.program.getTypeChecker();
50
+ }
51
+
52
+ /**
53
+ * Analyze a TypeScript type and return detailed type information
54
+ */
55
+ analyzeType(typeName: string, sourceFile?: string): TypeScriptTypeInfo {
56
+ try {
57
+ const type = this.findTypeByName(typeName, sourceFile);
58
+ if (type) {
59
+ return this.convertTypeToInfo(type);
60
+ }
61
+ } catch (error) {
62
+ console.warn(`Failed to analyze type "${typeName}":`, error);
63
+ }
64
+
65
+ return {
66
+ kind: 'unknown',
67
+ isOptional: false,
68
+ isArray: false
69
+ };
70
+ }
71
+
72
+ /**
73
+ * Analyze a type from a specific node in the AST
74
+ */
75
+ analyzeTypeFromNode(node: ts.TypeNode): TypeScriptTypeInfo {
76
+ try {
77
+ const type = this.checker.getTypeAtLocation(node);
78
+ return this.convertTypeToInfo(type);
79
+ } catch (error) {
80
+ console.warn('Failed to analyze type from node:', error);
81
+ return {
82
+ kind: 'unknown',
83
+ isOptional: false,
84
+ isArray: false
85
+ };
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Convert TypeScript type to our internal type information
91
+ */
92
+ private convertTypeToInfo(type: ts.Type): TypeScriptTypeInfo {
93
+ // Handle optional types (union with undefined)
94
+ const isOptional = this.isOptionalType(type);
95
+ const nonOptionalType = isOptional ? this.getNonUndefinedType(type) : type;
96
+
97
+ // Handle primitive types
98
+ if (nonOptionalType.flags & ts.TypeFlags.String) {
99
+ return { kind: 'string', isOptional, isArray: false };
100
+ }
101
+
102
+ if (nonOptionalType.flags & ts.TypeFlags.Number) {
103
+ return { kind: 'number', isOptional, isArray: false };
104
+ }
105
+
106
+ if (nonOptionalType.flags & ts.TypeFlags.Boolean) {
107
+ return { kind: 'boolean', isOptional, isArray: false };
108
+ }
109
+
110
+ // Handle string literals
111
+ if (nonOptionalType.flags & ts.TypeFlags.StringLiteral) {
112
+ const literalType = nonOptionalType as ts.StringLiteralType;
113
+ return {
114
+ kind: 'literal',
115
+ isOptional,
116
+ isArray: false,
117
+ literalValue: literalType.value
118
+ };
119
+ }
120
+
121
+ // Handle number literals
122
+ if (nonOptionalType.flags & ts.TypeFlags.NumberLiteral) {
123
+ const literalType = nonOptionalType as ts.NumberLiteralType;
124
+ return {
125
+ kind: 'literal',
126
+ isOptional,
127
+ isArray: false,
128
+ literalValue: literalType.value
129
+ };
130
+ }
131
+
132
+ // Handle arrays
133
+ if (this.checker.isArrayType(nonOptionalType)) {
134
+ const elementType = this.checker.getElementTypeOfArrayType(nonOptionalType);
135
+ return {
136
+ kind: 'array',
137
+ isOptional,
138
+ isArray: true,
139
+ elementType: this.convertTypeToInfo(elementType)
140
+ };
141
+ }
142
+
143
+ // Handle union types
144
+ if (nonOptionalType.flags & ts.TypeFlags.Union) {
145
+ const unionType = nonOptionalType as ts.UnionType;
146
+ return {
147
+ kind: 'union',
148
+ isOptional,
149
+ isArray: false,
150
+ unionTypes: unionType.types.map(t => this.convertTypeToInfo(t))
151
+ };
152
+ }
153
+
154
+ // Handle Record<K, V> types
155
+ if (this.isRecordType(nonOptionalType)) {
156
+ const recordInfo = this.getRecordTypeInfo(nonOptionalType);
157
+ return {
158
+ kind: 'record',
159
+ isOptional,
160
+ isArray: false,
161
+ keyType: recordInfo.keyType,
162
+ valueType: recordInfo.valueType
163
+ };
164
+ }
165
+
166
+ // Handle object types
167
+ if (nonOptionalType.flags & ts.TypeFlags.Object) {
168
+ const properties = this.getObjectProperties(nonOptionalType);
169
+ return {
170
+ kind: 'object',
171
+ isOptional,
172
+ isArray: false,
173
+ properties,
174
+ name: this.getTypeName(nonOptionalType)
175
+ };
176
+ }
177
+
178
+ return {
179
+ kind: 'unknown',
180
+ isOptional,
181
+ isArray: false
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Check if type is optional (union with undefined)
187
+ */
188
+ private isOptionalType(type: ts.Type): boolean {
189
+ if (type.flags & ts.TypeFlags.Union) {
190
+ const unionType = type as ts.UnionType;
191
+ return unionType.types.some(t => t.flags & ts.TypeFlags.Undefined);
192
+ }
193
+ return false;
194
+ }
195
+
196
+ /**
197
+ * Get non-undefined type from optional union
198
+ */
199
+ private getNonUndefinedType(type: ts.Type): ts.Type {
200
+ if (type.flags & ts.TypeFlags.Union) {
201
+ const unionType = type as ts.UnionType;
202
+ const nonUndefinedTypes = unionType.types.filter(t => !(t.flags & ts.TypeFlags.Undefined));
203
+ if (nonUndefinedTypes.length === 1) {
204
+ return nonUndefinedTypes[0];
205
+ }
206
+ // If multiple non-undefined types, return the union of them
207
+ return this.checker.getUnionType(nonUndefinedTypes);
208
+ }
209
+ return type;
210
+ }
211
+
212
+ /**
213
+ * Check if type is Record<K, V>
214
+ */
215
+ private isRecordType(type: ts.Type): boolean {
216
+ const symbol = type.getSymbol();
217
+ return symbol?.getName() === 'Record' ||
218
+ (type.flags & ts.TypeFlags.Object && this.hasStringIndexSignature(type));
219
+ }
220
+
221
+ /**
222
+ * Check if type has string index signature
223
+ */
224
+ private hasStringIndexSignature(type: ts.Type): boolean {
225
+ const stringIndexType = this.checker.getIndexTypeOfType(type, ts.IndexKind.String);
226
+ return stringIndexType !== undefined;
227
+ }
228
+
229
+ /**
230
+ * Get Record<K, V> type information
231
+ */
232
+ private getRecordTypeInfo(type: ts.Type): { keyType: string; valueType: string } {
233
+ if (type.symbol?.getName() === 'Record') {
234
+ // Handle Record<K, V> generic type
235
+ const typeArgs = this.checker.getTypeArguments(type as ts.TypeReference);
236
+ if (typeArgs && typeArgs.length >= 2) {
237
+ const keyTypeInfo = this.convertTypeToInfo(typeArgs[0]);
238
+ const valueTypeInfo = this.convertTypeToInfo(typeArgs[1]);
239
+ return {
240
+ keyType: this.typeInfoToSchemaString(keyTypeInfo),
241
+ valueType: this.typeInfoToSchemaString(valueTypeInfo)
242
+ };
243
+ }
244
+ }
245
+
246
+ // Handle object with string index signature
247
+ const stringIndexType = this.checker.getIndexTypeOfType(type, ts.IndexKind.String);
248
+ if (stringIndexType) {
249
+ const valueTypeInfo = this.convertTypeToInfo(stringIndexType);
250
+ return {
251
+ keyType: 'string',
252
+ valueType: this.typeInfoToSchemaString(valueTypeInfo)
253
+ };
254
+ }
255
+
256
+ return { keyType: 'string', valueType: 'any' };
257
+ }
258
+
259
+ /**
260
+ * Get object properties
261
+ */
262
+ private getObjectProperties(type: ts.Type): Record<string, TypeScriptTypeInfo> {
263
+ const properties: Record<string, TypeScriptTypeInfo> = {};
264
+ const symbol = type.getSymbol();
265
+
266
+ if (symbol) {
267
+ for (const prop of this.checker.getPropertiesOfType(type)) {
268
+ const propType = this.checker.getTypeOfSymbolAtLocation(prop, prop.valueDeclaration!);
269
+ properties[prop.getName()] = this.convertTypeToInfo(propType);
270
+ }
271
+ }
272
+
273
+ return properties;
274
+ }
275
+
276
+ /**
277
+ * Get type name
278
+ */
279
+ private getTypeName(type: ts.Type): string | undefined {
280
+ const symbol = type.getSymbol();
281
+ return symbol?.getName();
282
+ }
283
+
284
+ /**
285
+ * Find type by name in source files
286
+ */
287
+ private findTypeByName(typeName: string, sourceFile?: string): ts.Type | undefined {
288
+ const sourceFiles = sourceFile ?
289
+ [this.program.getSourceFile(sourceFile)].filter(Boolean) :
290
+ this.program.getSourceFiles();
291
+
292
+ for (const file of sourceFiles) {
293
+ if (!file) continue;
294
+
295
+ const result = this.findTypeInSourceFile(file, typeName);
296
+ if (result) return result;
297
+ }
298
+
299
+ return undefined;
300
+ }
301
+
302
+ /**
303
+ * Find type in specific source file
304
+ */
305
+ private findTypeInSourceFile(sourceFile: ts.SourceFile, typeName: string): ts.Type | undefined {
306
+ let foundType: ts.Type | undefined;
307
+
308
+ const visit = (node: ts.Node) => {
309
+ if (ts.isTypeAliasDeclaration(node) && node.name.text === typeName) {
310
+ foundType = this.checker.getTypeAtLocation(node.type);
311
+ return;
312
+ }
313
+ if (ts.isInterfaceDeclaration(node) && node.name.text === typeName) {
314
+ foundType = this.checker.getTypeAtLocation(node);
315
+ return;
316
+ }
317
+ ts.forEachChild(node, visit);
318
+ };
319
+
320
+ visit(sourceFile);
321
+ return foundType;
322
+ }
323
+
324
+ /**
325
+ * Convert type info to schema string
326
+ */
327
+ typeInfoToSchemaString(typeInfo: TypeScriptTypeInfo): string {
328
+ let schema = '';
329
+
330
+ switch (typeInfo.kind) {
331
+ case 'string':
332
+ schema = 'string';
333
+ break;
334
+ case 'number':
335
+ schema = 'number';
336
+ break;
337
+ case 'boolean':
338
+ schema = 'boolean';
339
+ break;
340
+ case 'array':
341
+ if (typeInfo.elementType) {
342
+ const elementSchema = this.typeInfoToSchemaString(typeInfo.elementType);
343
+ schema = `${elementSchema}[]`;
344
+ } else {
345
+ schema = 'any[]';
346
+ }
347
+ break;
348
+ case 'record':
349
+ schema = `record<${typeInfo.keyType || 'string'},${typeInfo.valueType || 'any'}>`;
350
+ break;
351
+ case 'union':
352
+ if (typeInfo.unionTypes) {
353
+ const unionSchemas = typeInfo.unionTypes
354
+ .filter(t => t.kind === 'literal')
355
+ .map(t => String(t.literalValue));
356
+ schema = unionSchemas.length > 0 ? unionSchemas.join('|') : 'any';
357
+ } else {
358
+ schema = 'any';
359
+ }
360
+ break;
361
+ case 'literal':
362
+ schema = String(typeInfo.literalValue);
363
+ break;
364
+ case 'object':
365
+ // For complex objects, return the type name or 'object'
366
+ schema = typeInfo.name || 'object';
367
+ break;
368
+ default:
369
+ schema = 'any';
370
+ }
371
+
372
+ if (typeInfo.isOptional) {
373
+ schema += '?';
374
+ }
375
+
376
+ return schema;
377
+ }
378
+ }
@@ -0,0 +1,220 @@
1
+ /**
2
+ * TypeScript Compiler API Integration
3
+ *
4
+ * This module uses TypeScript's compiler API to extract real type information
5
+ * and generate proper validation schemas at compile-time.
6
+ */
7
+
8
+ // Note: This would require TypeScript as a dependency
9
+ // import * as ts from 'typescript';
10
+
11
+ /**
12
+ * TypeScript type information extracted via compiler API
13
+ */
14
+ export interface TypeScriptTypeInfo {
15
+ kind: string;
16
+ name?: string;
17
+ isOptional: boolean;
18
+ isArray: boolean;
19
+ elementType?: TypeScriptTypeInfo;
20
+ properties?: Record<string, TypeScriptTypeInfo>;
21
+ unionTypes?: TypeScriptTypeInfo[];
22
+ literalValue?: string | number | boolean;
23
+ }
24
+
25
+ /**
26
+ * TypeScript Compiler API Integration Class
27
+ *
28
+ * This would use the actual TypeScript compiler to introspect types
29
+ */
30
+ export class TypeScriptCompilerIntegration {
31
+
32
+ /**
33
+ * Extract type information from TypeScript type
34
+ * This would use ts.TypeChecker to get real type info
35
+ */
36
+ static extractTypeInfo(typeName: string, sourceFile?: string): TypeScriptTypeInfo {
37
+ // TODO: Implement with actual TypeScript compiler API
38
+ //
39
+ // const program = ts.createProgram([sourceFile], {});
40
+ // const checker = program.getTypeChecker();
41
+ // const sourceFileNode = program.getSourceFile(sourceFile);
42
+ //
43
+ // // Find the type declaration
44
+ // const typeNode = findTypeDeclaration(sourceFileNode, typeName);
45
+ // const type = checker.getTypeAtLocation(typeNode);
46
+ //
47
+ // return this.convertTypeToInfo(type, checker);
48
+
49
+ // Placeholder implementation
50
+ return {
51
+ kind: 'unknown',
52
+ isOptional: false,
53
+ isArray: false
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Convert TypeScript type to schema string
59
+ */
60
+ static typeInfoToSchema(typeInfo: TypeScriptTypeInfo): string {
61
+ switch (typeInfo.kind) {
62
+ case 'string':
63
+ return typeInfo.isOptional ? 'string?' : 'string';
64
+ case 'number':
65
+ return typeInfo.isOptional ? 'number?' : 'number';
66
+ case 'boolean':
67
+ return typeInfo.isOptional ? 'boolean?' : 'boolean';
68
+ case 'array':
69
+ if (typeInfo.elementType) {
70
+ const elementSchema = this.typeInfoToSchema(typeInfo.elementType);
71
+ return typeInfo.isOptional ? `${elementSchema}[]?` : `${elementSchema}[]`;
72
+ }
73
+ return typeInfo.isOptional ? 'any[]?' : 'any[]';
74
+ case 'object':
75
+ // For Record<string, T> types
76
+ if (typeInfo.name?.startsWith('Record')) {
77
+ // Extract Record<K, V> information
78
+ return typeInfo.isOptional ? 'record<string,any>?' : 'record<string,any>';
79
+ }
80
+ // For complex objects, we'd need to generate nested schemas
81
+ return typeInfo.isOptional ? 'any?' : 'any';
82
+ case 'union':
83
+ if (typeInfo.unionTypes) {
84
+ const unionValues = typeInfo.unionTypes
85
+ .filter(t => t.kind === 'literal')
86
+ .map(t => t.literalValue)
87
+ .join('|');
88
+ return typeInfo.isOptional ? `${unionValues}?` : unionValues;
89
+ }
90
+ return typeInfo.isOptional ? 'any?' : 'any';
91
+ case 'literal':
92
+ return String(typeInfo.literalValue);
93
+ default:
94
+ return typeInfo.isOptional ? 'any?' : 'any';
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Generate schema interface from TypeScript interface
100
+ */
101
+ static generateSchemaFromInterface(interfaceName: string, sourceFile?: string): Record<string, string> {
102
+ const typeInfo = this.extractTypeInfo(interfaceName, sourceFile);
103
+
104
+ if (typeInfo.properties) {
105
+ const schema: Record<string, string> = {};
106
+
107
+ for (const [propName, propInfo] of Object.entries(typeInfo.properties)) {
108
+ schema[propName] = this.typeInfoToSchema(propInfo);
109
+ }
110
+
111
+ return schema;
112
+ }
113
+
114
+ return {};
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Enhanced Make utilities with TypeScript Compiler API integration
120
+ */
121
+ export class CompilerBasedMake {
122
+
123
+ /**
124
+ * Generate schema from TypeScript type using compiler API
125
+ * This would provide REAL compile-time type-to-schema conversion
126
+ */
127
+ static fromTypeCompiled<T>(typeName?: string): string {
128
+ if (typeName) {
129
+ // Use TypeScript compiler API to extract real type information
130
+ const typeInfo = TypeScriptCompilerIntegration.extractTypeInfo(typeName);
131
+ return TypeScriptCompilerIntegration.typeInfoToSchema(typeInfo);
132
+ }
133
+
134
+ // Fallback to runtime detection if no type name provided
135
+ return 'any';
136
+ }
137
+
138
+ /**
139
+ * Generate schema from TypeScript interface using compiler API
140
+ */
141
+ static fromInterfaceCompiled<T>(interfaceName: string): Record<string, string> {
142
+ return TypeScriptCompilerIntegration.generateSchemaFromInterface(interfaceName);
143
+ }
144
+ }
145
+
146
+ /**
147
+ * IMPLEMENTATION PLAN FOR REAL TYPESCRIPT COMPILER API INTEGRATION:
148
+ *
149
+ * 1. Add TypeScript as dependency:
150
+ * npm install typescript
151
+ *
152
+ * 2. Create build-time code generation:
153
+ * - Use TypeScript compiler API to analyze source files
154
+ * - Extract type information from interfaces/types
155
+ * - Generate schema definitions at build time
156
+ *
157
+ * 3. Integration approaches:
158
+ * a) Build-time plugin: Generate schema files during compilation
159
+ * b) Transformer plugin: Transform Make.fromType calls during compilation
160
+ * c) CLI tool: Generate schemas from TypeScript files
161
+ *
162
+ * 4. Example implementation with real TypeScript API:
163
+ *
164
+ * ```typescript
165
+ * import * as ts from 'typescript';
166
+ *
167
+ * function extractTypeInfo(typeNode: ts.TypeNode, checker: ts.TypeChecker): TypeScriptTypeInfo {
168
+ * const type = checker.getTypeAtLocation(typeNode);
169
+ *
170
+ * if (type.flags & ts.TypeFlags.String) {
171
+ * return { kind: 'string', isOptional: false, isArray: false };
172
+ * }
173
+ *
174
+ * if (type.flags & ts.TypeFlags.Number) {
175
+ * return { kind: 'number', isOptional: false, isArray: false };
176
+ * }
177
+ *
178
+ * if (checker.isArrayType(type)) {
179
+ * const elementType = checker.getElementTypeOfArrayType(type);
180
+ * return {
181
+ * kind: 'array',
182
+ * isArray: true,
183
+ * isOptional: false,
184
+ * elementType: extractTypeInfo(elementType.symbol?.valueDeclaration, checker)
185
+ * };
186
+ * }
187
+ *
188
+ * // Handle Record<K, V> types
189
+ * if (type.symbol?.name === 'Record') {
190
+ * const typeArgs = checker.getTypeArguments(type as ts.TypeReference);
191
+ * return {
192
+ * kind: 'object',
193
+ * name: 'Record',
194
+ * isOptional: false,
195
+ * isArray: false
196
+ * };
197
+ * }
198
+ *
199
+ * // Handle union types
200
+ * if (type.flags & ts.TypeFlags.Union) {
201
+ * const unionType = type as ts.UnionType;
202
+ * return {
203
+ * kind: 'union',
204
+ * isOptional: false,
205
+ * isArray: false,
206
+ * unionTypes: unionType.types.map(t => extractTypeInfo(t.symbol?.valueDeclaration, checker))
207
+ * };
208
+ * }
209
+ *
210
+ * return { kind: 'unknown', isOptional: false, isArray: false };
211
+ * }
212
+ * ```
213
+ *
214
+ * 5. Build integration:
215
+ * - Create a TypeScript transformer
216
+ * - Hook into the compilation process
217
+ * - Replace Make.fromType<T>() calls with actual schema strings
218
+ *
219
+ * This would provide REAL compile-time type-to-schema conversion!
220
+ */