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,395 @@
1
+ # FortifyJS Schema System
2
+
3
+ A schema validation system with **TypeScript interface-like syntax** that's incredibly easy to use and completely separate from validators.
4
+
5
+ ## 🎯 The Problem with Current Schema Libraries
6
+
7
+ **Zod, Joi, Yup** - they all suffer from the same issues:
8
+
9
+ - **Complex syntax** that doesn't feel natural
10
+ - **Verbose definitions** that are hard to read
11
+ - **Steep learning curves** for simple validation
12
+ - **Heavy bundle sizes** with unnecessary features
13
+
14
+ ## 💡 Our Solution: Interface-Based Schemas
15
+
16
+ We created a schema system that **looks and feels exactly like TypeScript interfaces** but provides runtime validation:
17
+
18
+ ```typescript
19
+ // ❌ Zod (complex and verbose)
20
+ const UserSchema = z.object({
21
+ id: z.number().int().positive(),
22
+ email: z.string().email(),
23
+ name: z.string().min(2).max(50),
24
+ age: z.number().int().min(0).max(120).optional(),
25
+ isActive: z.boolean().default(true),
26
+ tags: z.array(z.string()).max(10).optional(),
27
+ });
28
+
29
+ // ✅ FortifyJS Interface (clean and intuitive)
30
+ const UserSchema = Interface({
31
+ id: "number",
32
+ email: "email",
33
+ name: "string",
34
+ age: "number?", // Optional with ?
35
+ isActive: "boolean?", // Optional with smart defaults
36
+ tags: "string[]?", // Optional array
37
+ role: "=admin", // Constant values
38
+ });
39
+ ```
40
+
41
+ **It's literally that simple!** 🎉
42
+
43
+ ## 🚀 Two Powerful Approaches
44
+
45
+ ### 1. Interface-Based (Recommended)
46
+
47
+ **TypeScript interface syntax with runtime validation**
48
+
49
+ ```typescript
50
+ import { Interface } from "reliant-type";
51
+
52
+ const UserSchema = Interface({
53
+ id: "number",
54
+ email: "email",
55
+ name: "string",
56
+ age: "number?", // Optional
57
+ isActive: "boolean?", // Optional
58
+ tags: "string[]?", // Optional array
59
+ role: "=admin", // Constant value
60
+ profile: {
61
+ // Nested object
62
+ bio: "string?",
63
+ avatar: "url?",
64
+ },
65
+ });
66
+ ```
67
+
68
+ ### 2. Fluent API (Traditional)
69
+
70
+ **Chainable method syntax for complex validation**
71
+
72
+ ```typescript
73
+ import { Schema } from "reliant-type";
74
+
75
+ const UserSchema = Schema.object({
76
+ id: Schema.number().int().positive(),
77
+ email: Schema.string().email(),
78
+ name: Schema.string().min(2).max(50),
79
+ age: Schema.number().int().min(0).max(120).optional(),
80
+ isActive: Schema.boolean().default(true),
81
+ });
82
+ ```
83
+
84
+ ## 🎯 Why Interface-Based is Better
85
+
86
+ ### ✅ Pros of Interface Syntax:
87
+
88
+ - **Instantly familiar** to TypeScript developers
89
+ - **Extremely readable** - looks like documentation
90
+ - **Minimal learning curve** - no new API to learn
91
+ - **Faster to write** - less typing, more intuitive
92
+ - **Self-documenting** - schema IS the documentation
93
+
94
+ ### ❌ Cons of Traditional Fluent APIs:
95
+
96
+ - **Verbose and complex** - lots of chaining
97
+ - **Hard to read** - especially with nested objects
98
+ - **Learning curve** - need to memorize API methods
99
+ - **More typing** - repetitive method calls
100
+
101
+ ## 📚 Interface Field Types
102
+
103
+ ### Basic Types
104
+
105
+ ```typescript
106
+ {
107
+ name: "string", // String
108
+ age: "number", // Number
109
+ active: "boolean", // Boolean
110
+ created: "date", // Date
111
+ data: "any" // Any type
112
+ }
113
+ ```
114
+
115
+ ### Optional Fields (with `?`)
116
+
117
+ ```typescript
118
+ {
119
+ name: "string", // Required
120
+ age: "number?", // Optional
121
+ bio: "string?", // Optional
122
+ tags: "string[]?" // Optional array
123
+ }
124
+ ```
125
+
126
+ ### Format Validation
127
+
128
+ ```typescript
129
+ {
130
+ email: "email", // Email format
131
+ website: "url", // URL format
132
+ id: "uuid", // UUID format
133
+ phone: "phone", // Phone format
134
+ slug: "slug", // URL slug
135
+ username: "username" // Username format
136
+ }
137
+ ```
138
+
139
+ ### Number Types
140
+
141
+ ```typescript
142
+ {
143
+ id: "int", // Integer
144
+ count: "positive", // Positive number
145
+ price: "float", // Float number
146
+ rating: "number" // Any number
147
+ }
148
+ ```
149
+
150
+ ### Array Types
151
+
152
+ ```typescript
153
+ {
154
+ tags: "string[]", // Array of strings
155
+ scores: "number[]", // Array of numbers
156
+ flags: "boolean[]", // Array of booleans
157
+ ids: "int[]", // Array of integers
158
+ emails: "email[]", // Array of emails
159
+ urls: "url[]" // Array of URLs
160
+ }
161
+ ```
162
+
163
+ ### Constant Values (Safe Syntax)
164
+
165
+ ```typescript
166
+ import { Make } from "reliant-type";
167
+
168
+ {
169
+ version: Make.const("1.0"), // Safe constant string
170
+ status: Make.const(200), // Safe constant number
171
+ type: Make.const("user"), // Safe constant value
172
+ enabled: Make.const(true) // Safe constant boolean
173
+ }
174
+ ```
175
+
176
+ ### Union Types (Multiple Allowed Values)
177
+
178
+ ```typescript
179
+ {
180
+ status: Make.union("pending", "accepted", "rejected"),
181
+ priority: Make.union("low", "medium", "high"),
182
+ role: Make.unionOptional("user", "admin", "moderator") // Optional union
183
+ }
184
+ ```
185
+
186
+ ### Nested Objects
187
+
188
+ ```typescript
189
+ {
190
+ user: { // Nested object
191
+ name: "string",
192
+ email: "email"
193
+ },
194
+ address: { // Deeply nested
195
+ street: "string",
196
+ city: "string",
197
+ coordinates: {
198
+ lat: "number",
199
+ lng: "number"
200
+ }
201
+ }
202
+ }
203
+ ```
204
+
205
+ ## 🔥 Real-World Examples
206
+
207
+ ### User Registration
208
+
209
+ ```typescript
210
+ const UserRegistrationSchema = Interface({
211
+ // Required fields
212
+ email: "email",
213
+ password: "string",
214
+ firstName: "string",
215
+ lastName: "string",
216
+
217
+ // Optional fields
218
+ age: "number?",
219
+ phone: "phone?",
220
+ website: "url?",
221
+
222
+ // Arrays
223
+ interests: "string[]?",
224
+
225
+ // Nested object
226
+ address: {
227
+ street: "string",
228
+ city: "string",
229
+ zipCode: "string",
230
+ country: "string",
231
+ },
232
+
233
+ // Safe constants
234
+ type: Make.const("user"),
235
+ version: Make.const("1.0"),
236
+ });
237
+ ```
238
+
239
+ ### API Response
240
+
241
+ ```typescript
242
+ const APIResponseSchema = Interface({
243
+ success: "boolean",
244
+ status: Make.const(200), // Safe constant status
245
+ data: {
246
+ users: [
247
+ {
248
+ // Array of objects
249
+ id: "int",
250
+ email: "email",
251
+ profile: {
252
+ name: "string",
253
+ avatar: "url?",
254
+ },
255
+ },
256
+ ],
257
+ pagination: {
258
+ page: "int",
259
+ total: "int",
260
+ hasNext: "boolean",
261
+ },
262
+ },
263
+ errors: "string[]?",
264
+ timestamp: "date",
265
+ });
266
+ ```
267
+
268
+ ### Configuration
269
+
270
+ ```typescript
271
+ const ConfigSchema = Interface({
272
+ database: {
273
+ host: "string",
274
+ port: "int",
275
+ name: "string",
276
+ ssl: "boolean?",
277
+ },
278
+ server: {
279
+ port: "int",
280
+ cors: "boolean?",
281
+ },
282
+ features: {
283
+ auth: "boolean?",
284
+ logging: "boolean?",
285
+ },
286
+ environment: Make.const("production"), // Safe constant
287
+ });
288
+ ```
289
+
290
+ ## 🛠️ Validation Methods
291
+
292
+ ### Parse (Throws on Error)
293
+
294
+ ```typescript
295
+ try {
296
+ const user = UserSchema.parse(userData);
297
+ // user is fully typed and validated
298
+ } catch (error) {
299
+ console.error("Validation failed:", error.message);
300
+ }
301
+ ```
302
+
303
+ ### Safe Parse (Returns Result)
304
+
305
+ ```typescript
306
+ const result = UserSchema.safeParse(userData);
307
+
308
+ if (result.success) {
309
+ console.log("Valid data:", result.data);
310
+ } else {
311
+ console.log("Errors:", result.errors);
312
+ console.log("Warnings:", result.warnings);
313
+ }
314
+ ```
315
+
316
+ ### Strict Mode
317
+
318
+ ```typescript
319
+ const StrictSchema = Interface({
320
+ id: "number",
321
+ name: "string",
322
+ }).strict(); // No extra properties allowed
323
+ ```
324
+
325
+ ## 🛡️ Safer Syntax for Constants and Unions
326
+
327
+ ### The Problem with Raw Values
328
+
329
+ ```typescript
330
+ // ❌ DANGEROUS - Looks like a string type but it's actually a constant!
331
+ const BadSchema = Interface({
332
+ status: "pending", // Is this a string type or constant "pending"?
333
+ role: "=admin", // Very confusing and error-prone!
334
+ });
335
+ ```
336
+
337
+ ### The Solution - Make
338
+
339
+ ```typescript
340
+ // ✅ SAFE - Crystal clear what's a type vs constant
341
+ import { Interface, Make } from "reliant-type";
342
+
343
+ const GoodSchema = Interface({
344
+ // Clear type definitions
345
+ name: "string",
346
+ email: "email",
347
+
348
+ // Clear constant values
349
+ status: Make.const("pending"),
350
+ role: Make.const("admin"),
351
+
352
+ // Clear union types (multiple allowed values)
353
+ priority: Make.union("low", "medium", "high"),
354
+ category: Make.unionOptional("tech", "business", "design"),
355
+ });
356
+ ```
357
+
358
+ ### Benefits of Make
359
+
360
+ - **🔒 Type Safety**: No confusion between types and constants
361
+ - **📖 Readability**: Crystal clear intent in your schemas
362
+ - **🐛 Bug Prevention**: Eliminates dangerous ambiguity
363
+ - **🔧 IntelliSense**: Better IDE support and autocomplete
364
+
365
+ ## 📊 Comparison
366
+
367
+ | Feature | FortifyJS Interface | Zod | Joi |
368
+ | ------------------ | ------------------- | ----------- | ---------- |
369
+ | **Syntax** | TypeScript-like | Complex API | Verbose |
370
+ | **Learning Curve** | None | Steep | Moderate |
371
+ | **Readability** | Excellent | Poor | Fair |
372
+ | **Bundle Size** | Small | Large | Very Large |
373
+ | **Type Safety** | Full | Full | Limited |
374
+ | **Performance** | Fast | Slow | Slower |
375
+
376
+ ## 🎉 Get Started
377
+
378
+ ```bash
379
+ npm install reliant-type
380
+ ```
381
+
382
+ ```typescript
383
+ import { Interface } from "reliant-type";
384
+
385
+ const MySchema = Interface({
386
+ id: "number",
387
+ name: "string",
388
+ email: "email",
389
+ active: "boolean?",
390
+ });
391
+
392
+ const result = MySchema.safeParse(data);
393
+ ```
394
+
395
+ **That's it!** No complex APIs to learn, no verbose syntax - just clean, readable schemas that work exactly like TypeScript interfaces! 🚀
@@ -0,0 +1,279 @@
1
+ /**
2
+ * TypeScript Transformer for Schema Generation
3
+ *
4
+ * This transformer replaces Make.fromType<T>() calls with actual schema strings
5
+ * at compile time, providing true TypeScript-to-schema conversion.
6
+ */
7
+
8
+ import * as ts from 'typescript';
9
+ import { TypeAnalyzer } from './TypeAnalyzer';
10
+
11
+ /**
12
+ * Configuration for the schema transformer
13
+ */
14
+ export interface TransformerConfig {
15
+ sourceFiles: string[];
16
+ compilerOptions?: ts.CompilerOptions;
17
+ debug?: boolean;
18
+ }
19
+
20
+ /**
21
+ * Create a TypeScript transformer that converts Make.fromType<T>() calls
22
+ * to actual schema strings at compile time
23
+ */
24
+ export function createSchemaTransformer(config: TransformerConfig): ts.TransformerFactory<ts.SourceFile> {
25
+ const analyzer = new TypeAnalyzer(config.sourceFiles, config.compilerOptions);
26
+
27
+ return (context: ts.TransformationContext) => {
28
+ return (sourceFile: ts.SourceFile) => {
29
+ function visitor(node: ts.Node): ts.Node {
30
+ // Look for Make.fromType<T>() calls
31
+ if (ts.isCallExpression(node)) {
32
+ const result = transformMakeFromTypeCall(node, analyzer, config.debug);
33
+ if (result) {
34
+ if (config.debug) {
35
+ console.log(`🔄 Transformed: ${node.getText()} → ${result.getText()}`);
36
+ }
37
+ return result;
38
+ }
39
+ }
40
+
41
+ // Look for Make.fromInterface<T>() calls
42
+ if (ts.isCallExpression(node)) {
43
+ const result = transformMakeFromInterfaceCall(node, analyzer, config.debug);
44
+ if (result) {
45
+ if (config.debug) {
46
+ console.log(`🔄 Transformed: ${node.getText()} → ${result.getText()}`);
47
+ }
48
+ return result;
49
+ }
50
+ }
51
+
52
+ return ts.visitEachChild(node, visitor, context);
53
+ }
54
+
55
+ return ts.visitNode(sourceFile, visitor) as ts.SourceFile;
56
+ };
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Transform Make.fromType<T>() calls to schema strings
62
+ */
63
+ function transformMakeFromTypeCall(
64
+ node: ts.CallExpression,
65
+ analyzer: TypeAnalyzer,
66
+ debug?: boolean
67
+ ): ts.StringLiteral | null {
68
+ // Check if this is a Make.fromType call
69
+ if (!isMakeFromTypeCall(node)) {
70
+ return null;
71
+ }
72
+
73
+ // Extract the type argument
74
+ const typeArgument = node.typeArguments?.[0];
75
+ if (!typeArgument) {
76
+ if (debug) {
77
+ console.warn('⚠️ Make.fromType call without type argument');
78
+ }
79
+ return null;
80
+ }
81
+
82
+ // Check if there are runtime arguments (sample data)
83
+ if (node.arguments.length > 0) {
84
+ // Has sample data - let runtime handle it
85
+ if (debug) {
86
+ console.log('ℹ️ Make.fromType has sample data - skipping transformation');
87
+ }
88
+ return null;
89
+ }
90
+
91
+ try {
92
+ // Analyze the type and generate schema
93
+ const typeInfo = analyzer.analyzeTypeFromNode(typeArgument);
94
+ const schemaString = analyzer.typeInfoToSchemaString(typeInfo);
95
+
96
+ if (debug) {
97
+ console.log(`✅ Generated schema: ${schemaString} for type: ${typeArgument.getText()}`);
98
+ }
99
+
100
+ // Return the schema string literal
101
+ return ts.factory.createStringLiteral(schemaString);
102
+ } catch (error) {
103
+ if (debug) {
104
+ console.error(`❌ Failed to transform Make.fromType:`, error);
105
+ }
106
+ return null;
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Transform Make.fromInterface<T>() calls to schema objects
112
+ */
113
+ function transformMakeFromInterfaceCall(
114
+ node: ts.CallExpression,
115
+ analyzer: TypeAnalyzer,
116
+ debug?: boolean
117
+ ): ts.ObjectLiteralExpression | null {
118
+ // Check if this is a Make.fromInterface call
119
+ if (!isMakeFromInterfaceCall(node)) {
120
+ return null;
121
+ }
122
+
123
+ // Extract the type argument
124
+ const typeArgument = node.typeArguments?.[0];
125
+ if (!typeArgument) {
126
+ if (debug) {
127
+ console.warn('⚠️ Make.fromInterface call without type argument');
128
+ }
129
+ return null;
130
+ }
131
+
132
+ // Check if there are runtime arguments (sample data)
133
+ if (node.arguments.length > 0) {
134
+ // Has sample data - let runtime handle it
135
+ if (debug) {
136
+ console.log('ℹ️ Make.fromInterface has sample data - skipping transformation');
137
+ }
138
+ return null;
139
+ }
140
+
141
+ try {
142
+ // Analyze the type and generate schema object
143
+ const typeInfo = analyzer.analyzeTypeFromNode(typeArgument);
144
+
145
+ if (typeInfo.kind === 'object' && typeInfo.properties) {
146
+ // Generate object literal with schema properties
147
+ const properties: ts.PropertyAssignment[] = [];
148
+
149
+ for (const [propName, propInfo] of Object.entries(typeInfo.properties)) {
150
+ const schemaString = analyzer.typeInfoToSchemaString(propInfo);
151
+ properties.push(
152
+ ts.factory.createPropertyAssignment(
153
+ ts.factory.createStringLiteral(propName),
154
+ ts.factory.createStringLiteral(schemaString)
155
+ )
156
+ );
157
+ }
158
+
159
+ if (debug) {
160
+ console.log(`✅ Generated interface schema for: ${typeArgument.getText()}`);
161
+ }
162
+
163
+ return ts.factory.createObjectLiteralExpression(properties, true);
164
+ } else {
165
+ if (debug) {
166
+ console.warn(`⚠️ Type is not an object interface: ${typeArgument.getText()}`);
167
+ }
168
+ return null;
169
+ }
170
+ } catch (error) {
171
+ if (debug) {
172
+ console.error(`❌ Failed to transform Make.fromInterface:`, error);
173
+ }
174
+ return null;
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Check if a call expression is Make.fromType<T>()
180
+ */
181
+ function isMakeFromTypeCall(node: ts.CallExpression): boolean {
182
+ // Check for Make.fromType pattern
183
+ if (ts.isPropertyAccessExpression(node.expression)) {
184
+ const { expression, name } = node.expression;
185
+ return ts.isIdentifier(expression) &&
186
+ expression.text === 'Make' &&
187
+ name.text === 'fromType';
188
+ }
189
+ return false;
190
+ }
191
+
192
+ /**
193
+ * Check if a call expression is Make.fromInterface<T>()
194
+ */
195
+ function isMakeFromInterfaceCall(node: ts.CallExpression): boolean {
196
+ // Check for Make.fromInterface pattern
197
+ if (ts.isPropertyAccessExpression(node.expression)) {
198
+ const { expression, name } = node.expression;
199
+ return ts.isIdentifier(expression) &&
200
+ expression.text === 'Make' &&
201
+ name.text === 'fromInterface';
202
+ }
203
+ return false;
204
+ }
205
+
206
+ /**
207
+ * Utility function to transform TypeScript files with the schema transformer
208
+ */
209
+ export function transformSourceFile(
210
+ sourceFile: ts.SourceFile,
211
+ config: TransformerConfig
212
+ ): ts.SourceFile {
213
+ const transformer = createSchemaTransformer(config);
214
+ const transformationContext: ts.TransformationContext = {
215
+ getCompilerOptions: () => config.compilerOptions || {},
216
+ startLexicalEnvironment: () => {},
217
+ suspendLexicalEnvironment: () => {},
218
+ resumeLexicalEnvironment: () => {},
219
+ endLexicalEnvironment: () => [],
220
+ hoistFunctionDeclaration: () => {},
221
+ hoistVariableDeclaration: () => {},
222
+ requestEmitHelper: () => {},
223
+ readEmitHelpers: () => [],
224
+ enableSubstitution: () => {},
225
+ isSubstitutionEnabled: () => false,
226
+ onSubstituteNode: (hint, node) => node,
227
+ enableEmitNotification: () => {},
228
+ isEmitNotificationEnabled: () => false,
229
+ onEmitNode: () => {},
230
+ factory: ts.factory
231
+ };
232
+
233
+ const result = transformer(transformationContext)(sourceFile);
234
+ return result;
235
+ }
236
+
237
+ /**
238
+ * Transform multiple source files
239
+ */
240
+ export function transformFiles(filePaths: string[], config: Partial<TransformerConfig> = {}): void {
241
+ const fullConfig: TransformerConfig = {
242
+ sourceFiles: filePaths,
243
+ debug: true,
244
+ ...config
245
+ };
246
+
247
+ const program = ts.createProgram(filePaths, fullConfig.compilerOptions || {});
248
+
249
+ for (const sourceFile of program.getSourceFiles()) {
250
+ if (filePaths.includes(sourceFile.fileName)) {
251
+ console.log(`🔄 Transforming: ${sourceFile.fileName}`);
252
+
253
+ const transformed = transformSourceFile(sourceFile, fullConfig);
254
+
255
+ // Print the transformed result (in a real implementation, you'd write to file)
256
+ const printer = ts.createPrinter();
257
+ const result = printer.printFile(transformed);
258
+
259
+ console.log(`✅ Transformed result:\n${result}`);
260
+ }
261
+ }
262
+ }
263
+
264
+ /**
265
+ * CLI utility for testing the transformer
266
+ */
267
+ export function runTransformerCLI(): void {
268
+ const args = process.argv.slice(2);
269
+
270
+ if (args.length === 0) {
271
+ console.log('Usage: node transformer.js <file1.ts> [file2.ts] ...');
272
+ process.exit(1);
273
+ }
274
+
275
+ console.log('🚀 Running Schema Transformer');
276
+ console.log('============================');
277
+
278
+ transformFiles(args, { debug: true });
279
+ }