@tsonic/frontend 0.0.1 → 0.0.4

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 (698) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/{src/dependency-graph.ts → dist/dependency-graph.d.ts} +3 -11
  3. package/dist/dependency-graph.d.ts.map +1 -0
  4. package/dist/dependency-graph.js +9 -0
  5. package/dist/dependency-graph.js.map +1 -0
  6. package/dist/dotnet-metadata.d.ts +71 -0
  7. package/dist/dotnet-metadata.d.ts.map +1 -0
  8. package/dist/dotnet-metadata.js +78 -0
  9. package/dist/dotnet-metadata.js.map +1 -0
  10. package/dist/graph/builder.d.ts +10 -0
  11. package/dist/graph/builder.d.ts.map +1 -0
  12. package/dist/graph/builder.js +54 -0
  13. package/dist/graph/builder.js.map +1 -0
  14. package/dist/graph/circular.d.ts +10 -0
  15. package/dist/graph/circular.d.ts.map +1 -0
  16. package/dist/graph/circular.js +40 -0
  17. package/dist/graph/circular.js.map +1 -0
  18. package/dist/graph/extraction/exports.d.ts +10 -0
  19. package/dist/graph/extraction/exports.d.ts.map +1 -0
  20. package/dist/graph/extraction/exports.js +46 -0
  21. package/dist/graph/extraction/exports.js.map +1 -0
  22. package/dist/graph/extraction/imports.d.ts +11 -0
  23. package/dist/graph/extraction/imports.d.ts.map +1 -0
  24. package/dist/graph/extraction/imports.js +63 -0
  25. package/dist/graph/extraction/imports.js.map +1 -0
  26. package/dist/graph/extraction/index.d.ts +7 -0
  27. package/dist/graph/extraction/index.d.ts.map +1 -0
  28. package/{src/graph/extraction/index.ts → dist/graph/extraction/index.js} +1 -1
  29. package/dist/graph/extraction/index.js.map +1 -0
  30. package/dist/graph/extraction/orchestrator.d.ts +11 -0
  31. package/dist/graph/extraction/orchestrator.d.ts.map +1 -0
  32. package/dist/graph/extraction/orchestrator.js +78 -0
  33. package/dist/graph/extraction/orchestrator.js.map +1 -0
  34. package/dist/graph/extraction.d.ts +6 -0
  35. package/dist/graph/extraction.d.ts.map +1 -0
  36. package/{src/graph/extraction.ts → dist/graph/extraction.js} +2 -6
  37. package/dist/graph/extraction.js.map +1 -0
  38. package/dist/graph/helpers.d.ts +17 -0
  39. package/dist/graph/helpers.d.ts.map +1 -0
  40. package/dist/graph/helpers.js +40 -0
  41. package/dist/graph/helpers.js.map +1 -0
  42. package/{src/graph/index.ts → dist/graph/index.d.ts} +3 -11
  43. package/dist/graph/index.d.ts.map +1 -0
  44. package/dist/graph/index.js +8 -0
  45. package/dist/graph/index.js.map +1 -0
  46. package/{src/graph/types.ts → dist/graph/types.d.ts} +4 -5
  47. package/dist/graph/types.d.ts.map +1 -0
  48. package/dist/graph/types.js +5 -0
  49. package/dist/graph/types.js.map +1 -0
  50. package/dist/index.d.ts +26 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +43 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/ir/binding-resolution.test.d.ts +5 -0
  55. package/dist/ir/binding-resolution.test.d.ts.map +1 -0
  56. package/dist/ir/binding-resolution.test.js +518 -0
  57. package/dist/ir/binding-resolution.test.js.map +1 -0
  58. package/dist/ir/builder/exports.d.ts +10 -0
  59. package/dist/ir/builder/exports.d.ts.map +1 -0
  60. package/dist/ir/builder/exports.js +75 -0
  61. package/dist/ir/builder/exports.js.map +1 -0
  62. package/dist/ir/builder/helpers.d.ts +13 -0
  63. package/dist/ir/builder/helpers.d.ts.map +1 -0
  64. package/dist/ir/builder/helpers.js +23 -0
  65. package/dist/ir/builder/helpers.js.map +1 -0
  66. package/dist/ir/builder/imports.d.ts +18 -0
  67. package/dist/ir/builder/imports.d.ts.map +1 -0
  68. package/dist/ir/builder/imports.js +123 -0
  69. package/dist/ir/builder/imports.js.map +1 -0
  70. package/{src/ir/builder/index.ts → dist/ir/builder/index.d.ts} +1 -1
  71. package/dist/ir/builder/index.d.ts.map +1 -0
  72. package/dist/ir/builder/index.js +9 -0
  73. package/dist/ir/builder/index.js.map +1 -0
  74. package/dist/ir/builder/orchestrator.d.ts +18 -0
  75. package/dist/ir/builder/orchestrator.d.ts.map +1 -0
  76. package/dist/ir/builder/orchestrator.js +121 -0
  77. package/dist/ir/builder/orchestrator.js.map +1 -0
  78. package/dist/ir/builder/statements.d.ts +14 -0
  79. package/dist/ir/builder/statements.d.ts.map +1 -0
  80. package/dist/ir/builder/statements.js +43 -0
  81. package/dist/ir/builder/statements.js.map +1 -0
  82. package/dist/ir/builder/types.d.ts +8 -0
  83. package/dist/ir/builder/types.d.ts.map +1 -0
  84. package/dist/ir/builder/types.js +5 -0
  85. package/dist/ir/builder/types.js.map +1 -0
  86. package/dist/ir/builder/validation.d.ts +10 -0
  87. package/dist/ir/builder/validation.d.ts.map +1 -0
  88. package/dist/ir/builder/validation.js +86 -0
  89. package/dist/ir/builder/validation.js.map +1 -0
  90. package/{src/ir/builder.ts → dist/ir/builder.d.ts} +2 -5
  91. package/dist/ir/builder.d.ts.map +1 -0
  92. package/dist/ir/builder.js +10 -0
  93. package/dist/ir/builder.js.map +1 -0
  94. package/dist/ir/builder.test.d.ts +5 -0
  95. package/dist/ir/builder.test.d.ts.map +1 -0
  96. package/dist/ir/builder.test.js +498 -0
  97. package/dist/ir/builder.test.js.map +1 -0
  98. package/dist/ir/converters/expressions/access.d.ts +10 -0
  99. package/dist/ir/converters/expressions/access.d.ts.map +1 -0
  100. package/dist/ir/converters/expressions/access.js +132 -0
  101. package/dist/ir/converters/expressions/access.js.map +1 -0
  102. package/dist/ir/converters/expressions/calls.d.ts +14 -0
  103. package/dist/ir/converters/expressions/calls.d.ts.map +1 -0
  104. package/dist/ir/converters/expressions/calls.js +104 -0
  105. package/dist/ir/converters/expressions/calls.js.map +1 -0
  106. package/dist/ir/converters/expressions/collections.d.ts +14 -0
  107. package/dist/ir/converters/expressions/collections.d.ts.map +1 -0
  108. package/dist/ir/converters/expressions/collections.js +70 -0
  109. package/dist/ir/converters/expressions/collections.js.map +1 -0
  110. package/dist/ir/converters/expressions/functions.d.ts +14 -0
  111. package/dist/ir/converters/expressions/functions.d.ts.map +1 -0
  112. package/dist/ir/converters/expressions/functions.js +42 -0
  113. package/dist/ir/converters/expressions/functions.js.map +1 -0
  114. package/dist/ir/converters/expressions/helpers.d.ts +43 -0
  115. package/dist/ir/converters/expressions/helpers.d.ts.map +1 -0
  116. package/dist/ir/converters/expressions/helpers.js +217 -0
  117. package/dist/ir/converters/expressions/helpers.js.map +1 -0
  118. package/dist/ir/converters/expressions/index.d.ts +12 -0
  119. package/dist/ir/converters/expressions/index.d.ts.map +1 -0
  120. package/dist/ir/converters/expressions/index.js +20 -0
  121. package/dist/ir/converters/expressions/index.js.map +1 -0
  122. package/dist/ir/converters/expressions/literals.d.ts +10 -0
  123. package/dist/ir/converters/expressions/literals.d.ts.map +1 -0
  124. package/dist/ir/converters/expressions/literals.js +17 -0
  125. package/dist/ir/converters/expressions/literals.js.map +1 -0
  126. package/dist/ir/converters/expressions/operators.d.ts +18 -0
  127. package/dist/ir/converters/expressions/operators.d.ts.map +1 -0
  128. package/dist/ir/converters/expressions/operators.js +111 -0
  129. package/dist/ir/converters/expressions/operators.js.map +1 -0
  130. package/dist/ir/converters/expressions/other.d.ts +14 -0
  131. package/dist/ir/converters/expressions/other.d.ts.map +1 -0
  132. package/dist/ir/converters/expressions/other.js +44 -0
  133. package/dist/ir/converters/expressions/other.js.map +1 -0
  134. package/dist/ir/converters/statements/control/blocks.d.ts +10 -0
  135. package/dist/ir/converters/statements/control/blocks.d.ts.map +1 -0
  136. package/dist/ir/converters/statements/control/blocks.js +16 -0
  137. package/dist/ir/converters/statements/control/blocks.js.map +1 -0
  138. package/dist/ir/converters/statements/control/conditionals.d.ts +18 -0
  139. package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -0
  140. package/dist/ir/converters/statements/control/conditionals.js +46 -0
  141. package/dist/ir/converters/statements/control/conditionals.js.map +1 -0
  142. package/dist/ir/converters/statements/control/exceptions.d.ts +14 -0
  143. package/dist/ir/converters/statements/control/exceptions.d.ts.map +1 -0
  144. package/dist/ir/converters/statements/control/exceptions.js +33 -0
  145. package/dist/ir/converters/statements/control/exceptions.js.map +1 -0
  146. package/dist/ir/converters/statements/control/index.d.ts +8 -0
  147. package/dist/ir/converters/statements/control/index.d.ts.map +1 -0
  148. package/dist/ir/converters/statements/control/index.js +8 -0
  149. package/dist/ir/converters/statements/control/index.js.map +1 -0
  150. package/dist/ir/converters/statements/control/loops.d.ts +22 -0
  151. package/dist/ir/converters/statements/control/loops.d.ts.map +1 -0
  152. package/dist/ir/converters/statements/control/loops.js +75 -0
  153. package/dist/ir/converters/statements/control/loops.js.map +1 -0
  154. package/dist/ir/converters/statements/control.d.ts +6 -0
  155. package/dist/ir/converters/statements/control.d.ts.map +1 -0
  156. package/dist/ir/converters/statements/control.js +6 -0
  157. package/dist/ir/converters/statements/control.js.map +1 -0
  158. package/dist/ir/converters/statements/declarations/classes/constructors.d.ts +14 -0
  159. package/dist/ir/converters/statements/declarations/classes/constructors.d.ts.map +1 -0
  160. package/dist/ir/converters/statements/declarations/classes/constructors.js +91 -0
  161. package/dist/ir/converters/statements/declarations/classes/constructors.js.map +1 -0
  162. package/{src/ir/converters/statements/declarations/classes/index.ts → dist/ir/converters/statements/declarations/classes/index.d.ts} +2 -5
  163. package/dist/ir/converters/statements/declarations/classes/index.d.ts.map +1 -0
  164. package/dist/ir/converters/statements/declarations/classes/index.js +9 -0
  165. package/dist/ir/converters/statements/declarations/classes/index.js.map +1 -0
  166. package/dist/ir/converters/statements/declarations/classes/methods.d.ts +10 -0
  167. package/dist/ir/converters/statements/declarations/classes/methods.d.ts.map +1 -0
  168. package/dist/ir/converters/statements/declarations/classes/methods.js +39 -0
  169. package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -0
  170. package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts +10 -0
  171. package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts.map +1 -0
  172. package/dist/ir/converters/statements/declarations/classes/orchestrator.js +123 -0
  173. package/dist/ir/converters/statements/declarations/classes/orchestrator.js.map +1 -0
  174. package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts +13 -0
  175. package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts.map +1 -0
  176. package/dist/ir/converters/statements/declarations/classes/override-detection.js +79 -0
  177. package/dist/ir/converters/statements/declarations/classes/override-detection.js.map +1 -0
  178. package/dist/ir/converters/statements/declarations/classes/properties.d.ts +10 -0
  179. package/dist/ir/converters/statements/declarations/classes/properties.d.ts.map +1 -0
  180. package/dist/ir/converters/statements/declarations/classes/properties.js +42 -0
  181. package/dist/ir/converters/statements/declarations/classes/properties.js.map +1 -0
  182. package/dist/ir/converters/statements/declarations/classes.d.ts +6 -0
  183. package/dist/ir/converters/statements/declarations/classes.d.ts.map +1 -0
  184. package/{src/ir/converters/statements/declarations/classes.ts → dist/ir/converters/statements/declarations/classes.js} +1 -1
  185. package/dist/ir/converters/statements/declarations/classes.js.map +1 -0
  186. package/dist/ir/converters/statements/declarations/enums.d.ts +10 -0
  187. package/dist/ir/converters/statements/declarations/enums.d.ts.map +1 -0
  188. package/dist/ir/converters/statements/declarations/enums.js +24 -0
  189. package/dist/ir/converters/statements/declarations/enums.js.map +1 -0
  190. package/dist/ir/converters/statements/declarations/functions.d.ts +10 -0
  191. package/dist/ir/converters/statements/declarations/functions.d.ts.map +1 -0
  192. package/dist/ir/converters/statements/declarations/functions.js +28 -0
  193. package/dist/ir/converters/statements/declarations/functions.js.map +1 -0
  194. package/dist/ir/converters/statements/declarations/index.d.ts +11 -0
  195. package/dist/ir/converters/statements/declarations/index.d.ts.map +1 -0
  196. package/{src/ir/converters/statements/declarations/index.ts → dist/ir/converters/statements/declarations/index.js} +2 -5
  197. package/dist/ir/converters/statements/declarations/index.js.map +1 -0
  198. package/dist/ir/converters/statements/declarations/interfaces.d.ts +15 -0
  199. package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -0
  200. package/dist/ir/converters/statements/declarations/interfaces.js +96 -0
  201. package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -0
  202. package/dist/ir/converters/statements/declarations/registry.d.ts +24 -0
  203. package/dist/ir/converters/statements/declarations/registry.d.ts.map +1 -0
  204. package/{src/ir/converters/statements/declarations/registry.ts → dist/ir/converters/statements/declarations/registry.js} +9 -16
  205. package/dist/ir/converters/statements/declarations/registry.js.map +1 -0
  206. package/dist/ir/converters/statements/declarations/type-aliases.d.ts +10 -0
  207. package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -0
  208. package/dist/ir/converters/statements/declarations/type-aliases.js +19 -0
  209. package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -0
  210. package/dist/ir/converters/statements/declarations/variables.d.ts +10 -0
  211. package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -0
  212. package/dist/ir/converters/statements/declarations/variables.js +45 -0
  213. package/dist/ir/converters/statements/declarations/variables.js.map +1 -0
  214. package/dist/ir/converters/statements/declarations.d.ts +6 -0
  215. package/dist/ir/converters/statements/declarations.d.ts.map +1 -0
  216. package/dist/ir/converters/statements/declarations.js +6 -0
  217. package/dist/ir/converters/statements/declarations.js.map +1 -0
  218. package/dist/ir/converters/statements/helpers.d.ts +34 -0
  219. package/dist/ir/converters/statements/helpers.d.ts.map +1 -0
  220. package/dist/ir/converters/statements/helpers.js +137 -0
  221. package/dist/ir/converters/statements/helpers.js.map +1 -0
  222. package/dist/ir/converters/statements/index.d.ts +7 -0
  223. package/dist/ir/converters/statements/index.d.ts.map +1 -0
  224. package/dist/ir/converters/statements/index.js +10 -0
  225. package/dist/ir/converters/statements/index.js.map +1 -0
  226. package/dist/ir/expression-converter.d.ts +13 -0
  227. package/dist/ir/expression-converter.d.ts.map +1 -0
  228. package/dist/ir/expression-converter.js +167 -0
  229. package/dist/ir/expression-converter.js.map +1 -0
  230. package/dist/ir/generic-validator.d.ts +38 -0
  231. package/dist/ir/generic-validator.d.ts.map +1 -0
  232. package/dist/ir/generic-validator.js +69 -0
  233. package/dist/ir/generic-validator.js.map +1 -0
  234. package/dist/ir/hierarchical-bindings-e2e.test.d.ts +6 -0
  235. package/dist/ir/hierarchical-bindings-e2e.test.d.ts.map +1 -0
  236. package/dist/ir/hierarchical-bindings-e2e.test.js +129 -0
  237. package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -0
  238. package/{src/ir/index.ts → dist/ir/index.d.ts} +1 -1
  239. package/dist/ir/index.d.ts.map +1 -0
  240. package/dist/ir/index.js +6 -0
  241. package/dist/ir/index.js.map +1 -0
  242. package/dist/ir/statement-converter.d.ts +14 -0
  243. package/dist/ir/statement-converter.d.ts.map +1 -0
  244. package/dist/ir/statement-converter.js +100 -0
  245. package/dist/ir/statement-converter.js.map +1 -0
  246. package/dist/ir/type-converter/arrays.d.ts +10 -0
  247. package/dist/ir/type-converter/arrays.d.ts.map +1 -0
  248. package/dist/ir/type-converter/arrays.js +13 -0
  249. package/dist/ir/type-converter/arrays.js.map +1 -0
  250. package/dist/ir/type-converter/converter.d.ts +6 -0
  251. package/dist/ir/type-converter/converter.d.ts.map +1 -0
  252. package/dist/ir/type-converter/converter.js +6 -0
  253. package/dist/ir/type-converter/converter.js.map +1 -0
  254. package/dist/ir/type-converter/functions.d.ts +10 -0
  255. package/dist/ir/type-converter/functions.d.ts.map +1 -0
  256. package/dist/ir/type-converter/functions.js +15 -0
  257. package/dist/ir/type-converter/functions.js.map +1 -0
  258. package/dist/ir/type-converter/index.d.ts +7 -0
  259. package/dist/ir/type-converter/index.d.ts.map +1 -0
  260. package/{src/ir/type-converter/index.ts → dist/ir/type-converter/index.js} +2 -6
  261. package/dist/ir/type-converter/index.js.map +1 -0
  262. package/dist/ir/type-converter/inference.d.ts +20 -0
  263. package/dist/ir/type-converter/inference.d.ts.map +1 -0
  264. package/dist/ir/type-converter/inference.js +105 -0
  265. package/dist/ir/type-converter/inference.js.map +1 -0
  266. package/dist/ir/type-converter/literals.d.ts +10 -0
  267. package/dist/ir/type-converter/literals.d.ts.map +1 -0
  268. package/dist/ir/type-converter/literals.js +31 -0
  269. package/dist/ir/type-converter/literals.js.map +1 -0
  270. package/dist/ir/type-converter/objects.d.ts +16 -0
  271. package/dist/ir/type-converter/objects.d.ts.map +1 -0
  272. package/dist/ir/type-converter/objects.js +82 -0
  273. package/dist/ir/type-converter/objects.js.map +1 -0
  274. package/dist/ir/type-converter/orchestrator.d.ts +13 -0
  275. package/dist/ir/type-converter/orchestrator.d.ts.map +1 -0
  276. package/dist/ir/type-converter/orchestrator.js +59 -0
  277. package/dist/ir/type-converter/orchestrator.js.map +1 -0
  278. package/dist/ir/type-converter/patterns.d.ts +10 -0
  279. package/dist/ir/type-converter/patterns.d.ts.map +1 -0
  280. package/dist/ir/type-converter/patterns.js +66 -0
  281. package/dist/ir/type-converter/patterns.js.map +1 -0
  282. package/dist/ir/type-converter/primitives.d.ts +18 -0
  283. package/dist/ir/type-converter/primitives.d.ts.map +1 -0
  284. package/dist/ir/type-converter/primitives.js +47 -0
  285. package/dist/ir/type-converter/primitives.js.map +1 -0
  286. package/dist/ir/type-converter/references.d.ts +11 -0
  287. package/dist/ir/type-converter/references.d.ts.map +1 -0
  288. package/dist/ir/type-converter/references.js +62 -0
  289. package/dist/ir/type-converter/references.js.map +1 -0
  290. package/dist/ir/type-converter/unions-intersections.d.ts +14 -0
  291. package/dist/ir/type-converter/unions-intersections.d.ts.map +1 -0
  292. package/dist/ir/type-converter/unions-intersections.js +22 -0
  293. package/dist/ir/type-converter/unions-intersections.js.map +1 -0
  294. package/dist/ir/type-converter.d.ts +6 -0
  295. package/dist/ir/type-converter.d.ts.map +1 -0
  296. package/dist/ir/type-converter.js +6 -0
  297. package/dist/ir/type-converter.js.map +1 -0
  298. package/dist/ir/types/expressions.d.ts +164 -0
  299. package/dist/ir/types/expressions.d.ts.map +1 -0
  300. package/dist/ir/types/expressions.js +5 -0
  301. package/dist/ir/types/expressions.js.map +1 -0
  302. package/dist/ir/types/guards.d.ts +8 -0
  303. package/dist/ir/types/guards.d.ts.map +1 -0
  304. package/dist/ir/types/guards.js +31 -0
  305. package/dist/ir/types/guards.js.map +1 -0
  306. package/dist/ir/types/helpers.d.ts +65 -0
  307. package/dist/ir/types/helpers.d.ts.map +1 -0
  308. package/dist/ir/types/helpers.js +5 -0
  309. package/dist/ir/types/helpers.js.map +1 -0
  310. package/dist/ir/types/index.d.ts +11 -0
  311. package/dist/ir/types/index.d.ts.map +1 -0
  312. package/dist/ir/types/index.js +7 -0
  313. package/dist/ir/types/index.js.map +1 -0
  314. package/dist/ir/types/ir-types.d.ts +79 -0
  315. package/dist/ir/types/ir-types.d.ts.map +1 -0
  316. package/dist/ir/types/ir-types.js +5 -0
  317. package/dist/ir/types/ir-types.js.map +1 -0
  318. package/dist/ir/types/module.d.ts +56 -0
  319. package/dist/ir/types/module.d.ts.map +1 -0
  320. package/dist/ir/types/module.js +5 -0
  321. package/dist/ir/types/module.js.map +1 -0
  322. package/dist/ir/types/statements.d.ts +182 -0
  323. package/dist/ir/types/statements.d.ts.map +1 -0
  324. package/dist/ir/types/statements.js +5 -0
  325. package/dist/ir/types/statements.js.map +1 -0
  326. package/dist/ir/types.d.ts +7 -0
  327. package/dist/ir/types.d.ts.map +1 -0
  328. package/dist/ir/types.js +7 -0
  329. package/dist/ir/types.js.map +1 -0
  330. package/dist/metadata/bindings-loader.d.ts +41 -0
  331. package/dist/metadata/bindings-loader.d.ts.map +1 -0
  332. package/dist/metadata/bindings-loader.js +308 -0
  333. package/dist/metadata/bindings-loader.js.map +1 -0
  334. package/dist/metadata/bindings-loader.test.d.ts +5 -0
  335. package/dist/metadata/bindings-loader.test.d.ts.map +1 -0
  336. package/dist/metadata/bindings-loader.test.js +117 -0
  337. package/dist/metadata/bindings-loader.test.js.map +1 -0
  338. package/{src/metadata/index.ts → dist/metadata/index.d.ts} +2 -9
  339. package/dist/metadata/index.d.ts.map +1 -0
  340. package/dist/metadata/index.js +7 -0
  341. package/dist/metadata/index.js.map +1 -0
  342. package/dist/metadata/library-loader.d.ts +42 -0
  343. package/dist/metadata/library-loader.d.ts.map +1 -0
  344. package/dist/metadata/library-loader.js +126 -0
  345. package/dist/metadata/library-loader.js.map +1 -0
  346. package/dist/metadata/loader.d.ts +26 -0
  347. package/dist/metadata/loader.d.ts.map +1 -0
  348. package/dist/metadata/loader.js +333 -0
  349. package/dist/metadata/loader.js.map +1 -0
  350. package/dist/metadata/loader.test.d.ts +5 -0
  351. package/dist/metadata/loader.test.d.ts.map +1 -0
  352. package/dist/metadata/loader.test.js +119 -0
  353. package/dist/metadata/loader.test.js.map +1 -0
  354. package/dist/program/bindings.d.ts +159 -0
  355. package/dist/program/bindings.d.ts.map +1 -0
  356. package/dist/program/bindings.js +329 -0
  357. package/dist/program/bindings.js.map +1 -0
  358. package/dist/program/bindings.test.d.ts +5 -0
  359. package/dist/program/bindings.test.d.ts.map +1 -0
  360. package/dist/program/bindings.test.js +435 -0
  361. package/dist/program/bindings.test.js.map +1 -0
  362. package/dist/program/config.d.ts +9 -0
  363. package/dist/program/config.d.ts.map +1 -0
  364. package/dist/program/config.js +29 -0
  365. package/dist/program/config.js.map +1 -0
  366. package/dist/program/creation.d.ts +17 -0
  367. package/dist/program/creation.d.ts.map +1 -0
  368. package/dist/program/creation.js +182 -0
  369. package/dist/program/creation.js.map +1 -0
  370. package/dist/program/dependency-graph.d.ts +19 -0
  371. package/dist/program/dependency-graph.d.ts.map +1 -0
  372. package/dist/program/dependency-graph.js +230 -0
  373. package/dist/program/dependency-graph.js.map +1 -0
  374. package/dist/program/diagnostics.d.ts +23 -0
  375. package/dist/program/diagnostics.d.ts.map +1 -0
  376. package/dist/program/diagnostics.js +65 -0
  377. package/dist/program/diagnostics.js.map +1 -0
  378. package/{src/program/index.ts → dist/program/index.d.ts} +3 -10
  379. package/dist/program/index.d.ts.map +1 -0
  380. package/dist/program/index.js +11 -0
  381. package/dist/program/index.js.map +1 -0
  382. package/dist/program/metadata.d.ts +10 -0
  383. package/dist/program/metadata.d.ts.map +1 -0
  384. package/dist/program/metadata.js +56 -0
  385. package/dist/program/metadata.js.map +1 -0
  386. package/dist/program/queries.d.ts +10 -0
  387. package/dist/program/queries.d.ts.map +1 -0
  388. package/dist/program/queries.js +12 -0
  389. package/dist/program/queries.js.map +1 -0
  390. package/dist/program/types.d.ts +36 -0
  391. package/dist/program/types.d.ts.map +1 -0
  392. package/dist/program/types.js +5 -0
  393. package/dist/program/types.js.map +1 -0
  394. package/{src/program.ts → dist/program.d.ts} +2 -7
  395. package/dist/program.d.ts.map +1 -0
  396. package/dist/program.js +6 -0
  397. package/dist/program.js.map +1 -0
  398. package/dist/resolver/clr-bindings-resolver.d.ts +84 -0
  399. package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -0
  400. package/dist/resolver/clr-bindings-resolver.js +224 -0
  401. package/dist/resolver/clr-bindings-resolver.js.map +1 -0
  402. package/dist/resolver/import-resolution.d.ts +20 -0
  403. package/dist/resolver/import-resolution.d.ts.map +1 -0
  404. package/dist/resolver/import-resolution.js +102 -0
  405. package/dist/resolver/import-resolution.js.map +1 -0
  406. package/{src/resolver/index.ts → dist/resolver/index.d.ts} +3 -11
  407. package/dist/resolver/index.d.ts.map +1 -0
  408. package/dist/resolver/index.js +9 -0
  409. package/dist/resolver/index.js.map +1 -0
  410. package/dist/resolver/namespace.d.ts +20 -0
  411. package/dist/resolver/namespace.d.ts.map +1 -0
  412. package/dist/resolver/namespace.js +35 -0
  413. package/dist/resolver/namespace.js.map +1 -0
  414. package/dist/resolver/namespace.test.d.ts +2 -0
  415. package/dist/resolver/namespace.test.d.ts.map +1 -0
  416. package/dist/resolver/namespace.test.js +42 -0
  417. package/dist/resolver/namespace.test.js.map +1 -0
  418. package/dist/resolver/naming.d.ts +12 -0
  419. package/dist/resolver/naming.d.ts.map +1 -0
  420. package/dist/resolver/naming.js +30 -0
  421. package/dist/resolver/naming.js.map +1 -0
  422. package/dist/resolver/path-resolution.d.ts +8 -0
  423. package/dist/resolver/path-resolution.d.ts.map +1 -0
  424. package/dist/resolver/path-resolution.js +16 -0
  425. package/dist/resolver/path-resolution.js.map +1 -0
  426. package/dist/resolver/types.d.ts +13 -0
  427. package/dist/resolver/types.d.ts.map +1 -0
  428. package/dist/resolver/types.js +5 -0
  429. package/dist/resolver/types.js.map +1 -0
  430. package/dist/resolver.d.ts +7 -0
  431. package/dist/resolver.d.ts.map +1 -0
  432. package/dist/resolver.js +6 -0
  433. package/dist/resolver.js.map +1 -0
  434. package/dist/resolver.test.d.ts +5 -0
  435. package/dist/resolver.test.d.ts.map +1 -0
  436. package/dist/resolver.test.js +93 -0
  437. package/dist/resolver.test.js.map +1 -0
  438. package/dist/symbol-table/builder.d.ts +10 -0
  439. package/dist/symbol-table/builder.d.ts.map +1 -0
  440. package/dist/symbol-table/builder.js +105 -0
  441. package/dist/symbol-table/builder.js.map +1 -0
  442. package/dist/symbol-table/creation.d.ts +13 -0
  443. package/dist/symbol-table/creation.d.ts.map +1 -0
  444. package/dist/symbol-table/creation.js +36 -0
  445. package/dist/symbol-table/creation.js.map +1 -0
  446. package/dist/symbol-table/helpers.d.ts +9 -0
  447. package/dist/symbol-table/helpers.d.ts.map +1 -0
  448. package/dist/symbol-table/helpers.js +15 -0
  449. package/dist/symbol-table/helpers.js.map +1 -0
  450. package/{src/symbol-table/index.ts → dist/symbol-table/index.d.ts} +2 -6
  451. package/dist/symbol-table/index.d.ts.map +1 -0
  452. package/dist/symbol-table/index.js +8 -0
  453. package/dist/symbol-table/index.js.map +1 -0
  454. package/dist/symbol-table/queries.d.ts +17 -0
  455. package/dist/symbol-table/queries.d.ts.map +1 -0
  456. package/dist/symbol-table/queries.js +27 -0
  457. package/dist/symbol-table/queries.js.map +1 -0
  458. package/dist/symbol-table/types.d.ts +18 -0
  459. package/dist/symbol-table/types.d.ts.map +1 -0
  460. package/dist/symbol-table/types.js +5 -0
  461. package/dist/symbol-table/types.js.map +1 -0
  462. package/{src/symbol-table.ts → dist/symbol-table.d.ts} +2 -9
  463. package/dist/symbol-table.d.ts.map +1 -0
  464. package/dist/symbol-table.js +6 -0
  465. package/dist/symbol-table.js.map +1 -0
  466. package/dist/types/bindings.d.ts +153 -0
  467. package/dist/types/bindings.d.ts.map +1 -0
  468. package/dist/types/bindings.js +14 -0
  469. package/dist/types/bindings.js.map +1 -0
  470. package/dist/types/diagnostic.d.ts +30 -0
  471. package/dist/types/diagnostic.d.ts.map +1 -0
  472. package/dist/types/diagnostic.js +37 -0
  473. package/dist/types/diagnostic.js.map +1 -0
  474. package/dist/types/diagnostic.test.d.ts +5 -0
  475. package/dist/types/diagnostic.test.d.ts.map +1 -0
  476. package/dist/types/diagnostic.test.js +94 -0
  477. package/dist/types/diagnostic.test.js.map +1 -0
  478. package/dist/types/explicit-views.d.ts +97 -0
  479. package/dist/types/explicit-views.d.ts.map +1 -0
  480. package/dist/types/explicit-views.js +163 -0
  481. package/dist/types/explicit-views.js.map +1 -0
  482. package/dist/types/explicit-views.test.d.ts +5 -0
  483. package/dist/types/explicit-views.test.d.ts.map +1 -0
  484. package/dist/types/explicit-views.test.js +67 -0
  485. package/dist/types/explicit-views.test.js.map +1 -0
  486. package/dist/types/metadata.d.ts +196 -0
  487. package/dist/types/metadata.d.ts.map +1 -0
  488. package/dist/types/metadata.js +10 -0
  489. package/dist/types/metadata.js.map +1 -0
  490. package/dist/types/module.d.ts +51 -0
  491. package/dist/types/module.d.ts.map +1 -0
  492. package/dist/types/module.js +28 -0
  493. package/dist/types/module.js.map +1 -0
  494. package/dist/types/nested-types.d.ts +111 -0
  495. package/dist/types/nested-types.d.ts.map +1 -0
  496. package/dist/types/nested-types.js +176 -0
  497. package/dist/types/nested-types.js.map +1 -0
  498. package/dist/types/nested-types.test.d.ts +5 -0
  499. package/dist/types/nested-types.test.d.ts.map +1 -0
  500. package/dist/types/nested-types.test.js +135 -0
  501. package/dist/types/nested-types.test.js.map +1 -0
  502. package/dist/types/parameter-modifiers.d.ts +55 -0
  503. package/dist/types/parameter-modifiers.d.ts.map +1 -0
  504. package/dist/types/parameter-modifiers.js +148 -0
  505. package/dist/types/parameter-modifiers.js.map +1 -0
  506. package/dist/types/ref-parameters.d.ts +123 -0
  507. package/dist/types/ref-parameters.d.ts.map +1 -0
  508. package/dist/types/ref-parameters.js +203 -0
  509. package/dist/types/ref-parameters.js.map +1 -0
  510. package/dist/types/ref-parameters.test.d.ts +5 -0
  511. package/dist/types/ref-parameters.test.d.ts.map +1 -0
  512. package/dist/types/ref-parameters.test.js +147 -0
  513. package/dist/types/ref-parameters.test.js.map +1 -0
  514. package/dist/types/result.d.ts +26 -0
  515. package/dist/types/result.d.ts.map +1 -0
  516. package/dist/types/result.js +19 -0
  517. package/dist/types/result.js.map +1 -0
  518. package/dist/types/result.test.d.ts +5 -0
  519. package/dist/types/result.test.d.ts.map +1 -0
  520. package/dist/types/result.test.js +121 -0
  521. package/dist/types/result.test.js.map +1 -0
  522. package/dist/types/support-types.d.ts +103 -0
  523. package/dist/types/support-types.d.ts.map +1 -0
  524. package/dist/types/support-types.js +220 -0
  525. package/dist/types/support-types.js.map +1 -0
  526. package/dist/types/support-types.test.d.ts +5 -0
  527. package/dist/types/support-types.test.d.ts.map +1 -0
  528. package/dist/types/support-types.test.js +53 -0
  529. package/dist/types/support-types.test.js.map +1 -0
  530. package/dist/types/test-harness.d.ts +34 -0
  531. package/dist/types/test-harness.d.ts.map +1 -0
  532. package/dist/types/test-harness.js +127 -0
  533. package/dist/types/test-harness.js.map +1 -0
  534. package/dist/validation/exports.d.ts +11 -0
  535. package/dist/validation/exports.d.ts.map +1 -0
  536. package/dist/validation/exports.js +56 -0
  537. package/dist/validation/exports.js.map +1 -0
  538. package/dist/validation/features.d.ts +11 -0
  539. package/dist/validation/features.d.ts.map +1 -0
  540. package/dist/validation/features.js +36 -0
  541. package/dist/validation/features.js.map +1 -0
  542. package/dist/validation/generics.d.ts +11 -0
  543. package/dist/validation/generics.d.ts.map +1 -0
  544. package/dist/validation/generics.js +31 -0
  545. package/dist/validation/generics.js.map +1 -0
  546. package/dist/validation/helpers.d.ts +15 -0
  547. package/dist/validation/helpers.d.ts.map +1 -0
  548. package/dist/validation/helpers.js +18 -0
  549. package/dist/validation/helpers.js.map +1 -0
  550. package/dist/validation/imports.d.ts +15 -0
  551. package/dist/validation/imports.d.ts.map +1 -0
  552. package/dist/validation/imports.js +42 -0
  553. package/dist/validation/imports.js.map +1 -0
  554. package/dist/validation/index.d.ts +11 -0
  555. package/dist/validation/index.d.ts.map +1 -0
  556. package/{src/validation/index.ts → dist/validation/index.js} +1 -1
  557. package/dist/validation/index.js.map +1 -0
  558. package/dist/validation/orchestrator.d.ts +15 -0
  559. package/dist/validation/orchestrator.d.ts.map +1 -0
  560. package/dist/validation/orchestrator.js +30 -0
  561. package/dist/validation/orchestrator.js.map +1 -0
  562. package/dist/validation/static-safety.d.ts +23 -0
  563. package/dist/validation/static-safety.d.ts.map +1 -0
  564. package/dist/validation/static-safety.js +165 -0
  565. package/dist/validation/static-safety.js.map +1 -0
  566. package/dist/validator.d.ts +6 -0
  567. package/dist/validator.d.ts.map +1 -0
  568. package/dist/validator.js +6 -0
  569. package/dist/validator.js.map +1 -0
  570. package/dist/validator.test.d.ts +11 -0
  571. package/dist/validator.test.d.ts.map +1 -0
  572. package/dist/validator.test.js +341 -0
  573. package/dist/validator.test.js.map +1 -0
  574. package/package.json +4 -1
  575. package/src/dotnet-metadata.ts +0 -121
  576. package/src/graph/builder.ts +0 -81
  577. package/src/graph/circular.ts +0 -58
  578. package/src/graph/extraction/exports.ts +0 -55
  579. package/src/graph/extraction/imports.ts +0 -81
  580. package/src/graph/extraction/orchestrator.ts +0 -99
  581. package/src/graph/helpers.ts +0 -51
  582. package/src/index.ts +0 -80
  583. package/src/ir/binding-resolution.test.ts +0 -585
  584. package/src/ir/builder/exports.ts +0 -78
  585. package/src/ir/builder/helpers.ts +0 -27
  586. package/src/ir/builder/imports.ts +0 -153
  587. package/src/ir/builder/orchestrator.ts +0 -178
  588. package/src/ir/builder/statements.ts +0 -55
  589. package/src/ir/builder/types.ts +0 -8
  590. package/src/ir/builder/validation.ts +0 -129
  591. package/src/ir/builder.test.ts +0 -581
  592. package/src/ir/converters/expressions/access.ts +0 -99
  593. package/src/ir/converters/expressions/calls.ts +0 -137
  594. package/src/ir/converters/expressions/collections.ts +0 -84
  595. package/src/ir/converters/expressions/functions.ts +0 -62
  596. package/src/ir/converters/expressions/helpers.ts +0 -264
  597. package/src/ir/converters/expressions/index.ts +0 -43
  598. package/src/ir/converters/expressions/literals.ts +0 -22
  599. package/src/ir/converters/expressions/operators.ts +0 -147
  600. package/src/ir/converters/expressions/other.ts +0 -60
  601. package/src/ir/converters/statements/control/blocks.ts +0 -22
  602. package/src/ir/converters/statements/control/conditionals.ts +0 -67
  603. package/src/ir/converters/statements/control/exceptions.ts +0 -43
  604. package/src/ir/converters/statements/control/index.ts +0 -17
  605. package/src/ir/converters/statements/control/loops.ts +0 -99
  606. package/src/ir/converters/statements/control.ts +0 -17
  607. package/src/ir/converters/statements/declarations/classes/constructors.ts +0 -120
  608. package/src/ir/converters/statements/declarations/classes/methods.ts +0 -61
  609. package/src/ir/converters/statements/declarations/classes/orchestrator.ts +0 -166
  610. package/src/ir/converters/statements/declarations/classes/override-detection.ts +0 -116
  611. package/src/ir/converters/statements/declarations/classes/properties.ts +0 -63
  612. package/src/ir/converters/statements/declarations/enums.ts +0 -29
  613. package/src/ir/converters/statements/declarations/functions.ts +0 -39
  614. package/src/ir/converters/statements/declarations/interfaces.ts +0 -131
  615. package/src/ir/converters/statements/declarations/type-aliases.ts +0 -25
  616. package/src/ir/converters/statements/declarations/variables.ts +0 -60
  617. package/src/ir/converters/statements/declarations.ts +0 -16
  618. package/src/ir/converters/statements/helpers.ts +0 -174
  619. package/src/ir/converters/statements/index.ts +0 -40
  620. package/src/ir/expression-converter.ts +0 -207
  621. package/src/ir/generic-validator.ts +0 -100
  622. package/src/ir/hierarchical-bindings-e2e.test.ts +0 -163
  623. package/src/ir/statement-converter.ts +0 -128
  624. package/src/ir/type-converter/arrays.ts +0 -20
  625. package/src/ir/type-converter/converter.ts +0 -10
  626. package/src/ir/type-converter/functions.ts +0 -22
  627. package/src/ir/type-converter/inference.ts +0 -122
  628. package/src/ir/type-converter/literals.ts +0 -40
  629. package/src/ir/type-converter/objects.ts +0 -107
  630. package/src/ir/type-converter/orchestrator.ts +0 -85
  631. package/src/ir/type-converter/patterns.ts +0 -73
  632. package/src/ir/type-converter/primitives.ts +0 -57
  633. package/src/ir/type-converter/references.ts +0 -64
  634. package/src/ir/type-converter/unions-intersections.ts +0 -34
  635. package/src/ir/type-converter.ts +0 -13
  636. package/src/ir/types/expressions.ts +0 -215
  637. package/src/ir/types/guards.ts +0 -39
  638. package/src/ir/types/helpers.ts +0 -135
  639. package/src/ir/types/index.ts +0 -108
  640. package/src/ir/types/ir-types.ts +0 -96
  641. package/src/ir/types/module.ts +0 -57
  642. package/src/ir/types/statements.ts +0 -238
  643. package/src/ir/types.ts +0 -97
  644. package/src/metadata/bindings-loader.test.ts +0 -144
  645. package/src/metadata/bindings-loader.ts +0 -357
  646. package/src/metadata/library-loader.ts +0 -153
  647. package/src/metadata/loader.test.ts +0 -156
  648. package/src/metadata/loader.ts +0 -382
  649. package/src/program/bindings.test.ts +0 -512
  650. package/src/program/bindings.ts +0 -253
  651. package/src/program/config.ts +0 -30
  652. package/src/program/creation.ts +0 -249
  653. package/src/program/dependency-graph.ts +0 -245
  654. package/src/program/diagnostics.ts +0 -103
  655. package/src/program/metadata.ts +0 -68
  656. package/src/program/queries.ts +0 -18
  657. package/src/program/types.ts +0 -38
  658. package/src/resolver/dotnet-import-resolver.ts +0 -226
  659. package/src/resolver/import-resolution.ts +0 -177
  660. package/src/resolver/namespace.test.ts +0 -86
  661. package/src/resolver/namespace.ts +0 -42
  662. package/src/resolver/naming.ts +0 -38
  663. package/src/resolver/path-resolution.ts +0 -22
  664. package/src/resolver/types.ts +0 -15
  665. package/src/resolver.test.ts +0 -155
  666. package/src/resolver.ts +0 -14
  667. package/src/symbol-table/builder.ts +0 -114
  668. package/src/symbol-table/creation.ts +0 -42
  669. package/src/symbol-table/helpers.ts +0 -18
  670. package/src/symbol-table/queries.ts +0 -42
  671. package/src/symbol-table/types.ts +0 -28
  672. package/src/types/bindings.ts +0 -172
  673. package/src/types/diagnostic.test.ts +0 -164
  674. package/src/types/diagnostic.ts +0 -153
  675. package/src/types/explicit-views.test.ts +0 -113
  676. package/src/types/explicit-views.ts +0 -218
  677. package/src/types/metadata.ts +0 -229
  678. package/src/types/module.ts +0 -99
  679. package/src/types/nested-types.test.ts +0 -194
  680. package/src/types/nested-types.ts +0 -215
  681. package/src/types/parameter-modifiers.ts +0 -173
  682. package/src/types/ref-parameters.test.ts +0 -192
  683. package/src/types/ref-parameters.ts +0 -268
  684. package/src/types/result.test.ts +0 -157
  685. package/src/types/result.ts +0 -48
  686. package/src/types/support-types.test.ts +0 -81
  687. package/src/types/support-types.ts +0 -288
  688. package/src/types/test-harness.ts +0 -180
  689. package/src/validation/exports.ts +0 -98
  690. package/src/validation/features.ts +0 -89
  691. package/src/validation/generics.ts +0 -40
  692. package/src/validation/helpers.ts +0 -31
  693. package/src/validation/imports.ts +0 -97
  694. package/src/validation/orchestrator.ts +0 -51
  695. package/src/validation/static-safety.ts +0 -267
  696. package/src/validator.test.ts +0 -468
  697. package/src/validator.ts +0 -15
  698. package/tsconfig.json +0 -13
@@ -1,357 +0,0 @@
1
- /**
2
- * Bindings JSON loader - Reads and validates .bindings.json files from tsbindgen.
3
- *
4
- * This module provides pure functions to load runtime binding files and validate
5
- * their structure against the expected schema.
6
- *
7
- * @see spec/bindings.md for complete schema documentation
8
- */
9
-
10
- import * as fs from "fs";
11
- import * as path from "path";
12
- import type { Result } from "../types/result.ts";
13
- import type { Diagnostic } from "../types/diagnostic.ts";
14
- import type { BindingsFile, TypeBinding } from "../types/bindings.ts";
15
-
16
- /**
17
- * Load and parse a bindings.json file.
18
- *
19
- * @param filePath - Absolute path to the .bindings.json file
20
- * @returns Result containing parsed bindings or diagnostics
21
- */
22
- export const loadBindingsFile = (
23
- filePath: string
24
- ): Result<BindingsFile, Diagnostic[]> => {
25
- // Check file exists
26
- if (!fs.existsSync(filePath)) {
27
- return {
28
- ok: false,
29
- error: [
30
- {
31
- code: "TSN9101",
32
- message: `Bindings file not found: ${filePath}`,
33
- severity: "error",
34
- location: undefined,
35
- },
36
- ],
37
- };
38
- }
39
-
40
- // Read file contents
41
- let content: string;
42
- try {
43
- content = fs.readFileSync(filePath, "utf-8");
44
- } catch (error) {
45
- return {
46
- ok: false,
47
- error: [
48
- {
49
- code: "TSN9102",
50
- message: `Failed to read bindings file: ${error}`,
51
- severity: "error",
52
- location: undefined,
53
- },
54
- ],
55
- };
56
- }
57
-
58
- // Parse JSON
59
- let parsed: unknown;
60
- try {
61
- parsed = JSON.parse(content);
62
- } catch (error) {
63
- return {
64
- ok: false,
65
- error: [
66
- {
67
- code: "TSN9103",
68
- message: `Invalid JSON in bindings file: ${error}`,
69
- severity: "error",
70
- location: undefined,
71
- },
72
- ],
73
- };
74
- }
75
-
76
- // Validate structure
77
- const validation = validateBindingsFile(parsed, filePath);
78
- if (!validation.ok) {
79
- return validation;
80
- }
81
-
82
- return { ok: true, value: validation.value };
83
- };
84
-
85
- /**
86
- * Validate that parsed JSON matches BindingsFile schema.
87
- *
88
- * @param data - Parsed JSON data
89
- * @param filePath - File path for error messages
90
- * @returns Result containing validated bindings or diagnostics
91
- */
92
- const validateBindingsFile = (
93
- data: unknown,
94
- filePath: string
95
- ): Result<BindingsFile, Diagnostic[]> => {
96
- const diagnostics: Diagnostic[] = [];
97
-
98
- if (typeof data !== "object" || data === null) {
99
- return {
100
- ok: false,
101
- error: [
102
- {
103
- code: "TSN9104",
104
- message: `Bindings file must be an object, got ${typeof data}`,
105
- severity: "error",
106
- location: undefined,
107
- },
108
- ],
109
- };
110
- }
111
-
112
- const obj = data as Record<string, unknown>;
113
-
114
- // Validate namespace
115
- if (typeof obj.namespace !== "string") {
116
- diagnostics.push({
117
- code: "TSN9105",
118
- message: `Missing or invalid 'namespace' field in ${path.basename(filePath)}`,
119
- severity: "error",
120
- location: undefined,
121
- });
122
- }
123
-
124
- // Validate types array
125
- if (!Array.isArray(obj.types)) {
126
- diagnostics.push({
127
- code: "TSN9106",
128
- message: `Missing or invalid 'types' field in ${path.basename(filePath)}`,
129
- severity: "error",
130
- location: undefined,
131
- });
132
- } else {
133
- // Validate each type binding
134
- for (let i = 0; i < obj.types.length; i++) {
135
- const typeValidation = validateTypeBinding(obj.types[i], filePath, i);
136
- if (!typeValidation.ok) {
137
- diagnostics.push(...typeValidation.error);
138
- }
139
- }
140
- }
141
-
142
- if (diagnostics.length > 0) {
143
- return { ok: false, error: diagnostics };
144
- }
145
-
146
- return { ok: true, value: obj as BindingsFile };
147
- };
148
-
149
- /**
150
- * Validate a single TypeBinding object.
151
- *
152
- * @param data - Type binding to validate
153
- * @param filePath - File path for error messages
154
- * @param index - Type index in array
155
- * @returns Result indicating validation success or errors
156
- */
157
- const validateTypeBinding = (
158
- data: unknown,
159
- filePath: string,
160
- index: number
161
- ): Result<TypeBinding, Diagnostic[]> => {
162
- const diagnostics: Diagnostic[] = [];
163
- const context = `type binding ${index} in ${path.basename(filePath)}`;
164
-
165
- if (typeof data !== "object" || data === null) {
166
- return {
167
- ok: false,
168
- error: [
169
- {
170
- code: "TSN9107",
171
- message: `Invalid ${context}: must be an object`,
172
- severity: "error",
173
- location: undefined,
174
- },
175
- ],
176
- };
177
- }
178
-
179
- const type = data as Record<string, unknown>;
180
-
181
- // Validate required string fields
182
- const requiredStringFields = ["clrName", "tsEmitName", "assemblyName"];
183
- for (const field of requiredStringFields) {
184
- if (typeof type[field] !== "string") {
185
- diagnostics.push({
186
- code: "TSN9108",
187
- message: `Invalid ${context}: missing or invalid '${field}'`,
188
- severity: "error",
189
- location: undefined,
190
- });
191
- }
192
- }
193
-
194
- // Validate metadataToken
195
- if (typeof type.metadataToken !== "number") {
196
- diagnostics.push({
197
- code: "TSN9109",
198
- message: `Invalid ${context}: 'metadataToken' must be a number`,
199
- severity: "error",
200
- location: undefined,
201
- });
202
- }
203
-
204
- // Validate optional array fields (V1 Definitions)
205
- const v1ArrayFields = ["methods", "properties", "fields", "events"];
206
- for (const field of v1ArrayFields) {
207
- if (type[field] !== undefined && !Array.isArray(type[field])) {
208
- diagnostics.push({
209
- code: "TSN9110",
210
- message: `Invalid ${context}: '${field}' must be an array if present`,
211
- severity: "error",
212
- location: undefined,
213
- });
214
- }
215
- }
216
-
217
- // Validate optional array fields (V2 Exposures)
218
- const v2ArrayFields = [
219
- "exposedMethods",
220
- "exposedProperties",
221
- "exposedFields",
222
- "exposedEvents",
223
- ];
224
- for (const field of v2ArrayFields) {
225
- if (type[field] !== undefined && !Array.isArray(type[field])) {
226
- diagnostics.push({
227
- code: "TSN9111",
228
- message: `Invalid ${context}: '${field}' must be an array if present`,
229
- severity: "error",
230
- location: undefined,
231
- });
232
- }
233
- }
234
-
235
- // Note: We're doing basic structural validation here
236
- // More detailed validation of nested objects (method bindings, etc.)
237
- // can be added in future iterations if needed
238
-
239
- if (diagnostics.length > 0) {
240
- return { ok: false, error: diagnostics };
241
- }
242
-
243
- return { ok: true, value: type as TypeBinding };
244
- };
245
-
246
- /**
247
- * Load bindings from a directory containing .bindings.json files.
248
- *
249
- * @param directoryPath - Path to directory containing bindings files
250
- * @returns Result containing array of loaded bindings files or diagnostics
251
- */
252
- export const loadBindingsDirectory = (
253
- directoryPath: string
254
- ): Result<BindingsFile[], Diagnostic[]> => {
255
- if (!fs.existsSync(directoryPath)) {
256
- return {
257
- ok: false,
258
- error: [
259
- {
260
- code: "TSN9112",
261
- message: `Bindings directory not found: ${directoryPath}`,
262
- severity: "error",
263
- location: undefined,
264
- },
265
- ],
266
- };
267
- }
268
-
269
- const stats = fs.statSync(directoryPath);
270
- if (!stats.isDirectory()) {
271
- return {
272
- ok: false,
273
- error: [
274
- {
275
- code: "TSN9113",
276
- message: `Not a directory: ${directoryPath}`,
277
- severity: "error",
278
- location: undefined,
279
- },
280
- ],
281
- };
282
- }
283
-
284
- // Find all .bindings.json files
285
- const files = fs
286
- .readdirSync(directoryPath)
287
- .filter((file) => file.endsWith(".bindings.json"))
288
- .map((file) => path.join(directoryPath, file));
289
-
290
- if (files.length === 0) {
291
- return {
292
- ok: false,
293
- error: [
294
- {
295
- code: "TSN9114",
296
- message: `No .bindings.json files found in ${directoryPath}`,
297
- severity: "warning",
298
- location: undefined,
299
- },
300
- ],
301
- };
302
- }
303
-
304
- // Load each file
305
- const bindingsFiles: BindingsFile[] = [];
306
- const diagnostics: Diagnostic[] = [];
307
-
308
- for (const file of files) {
309
- const result = loadBindingsFile(file);
310
- if (result.ok) {
311
- bindingsFiles.push(result.value);
312
- } else {
313
- diagnostics.push(...result.error);
314
- }
315
- }
316
-
317
- if (diagnostics.length > 0) {
318
- return { ok: false, error: diagnostics };
319
- }
320
-
321
- return { ok: true, value: bindingsFiles };
322
- };
323
-
324
- /**
325
- * Build a registry of type bindings for fast lookup by TypeScript emit name.
326
- *
327
- * @param bindingsFiles - Array of loaded bindings files
328
- * @returns Map from tsEmitName to TypeBinding
329
- */
330
- export const buildBindingsRegistry = (
331
- bindingsFiles: readonly BindingsFile[]
332
- ): ReadonlyMap<string, TypeBinding> => {
333
- const registry = new Map<string, TypeBinding>();
334
-
335
- for (const file of bindingsFiles) {
336
- for (const typeBinding of file.types) {
337
- const key = `${file.namespace}.${typeBinding.tsEmitName}`;
338
- registry.set(key, typeBinding);
339
- }
340
- }
341
-
342
- return registry;
343
- };
344
-
345
- /**
346
- * Look up a type binding by fully-qualified TypeScript emit name.
347
- *
348
- * @param registry - Bindings registry
349
- * @param qualifiedTsName - Fully qualified TS name (e.g., "System.Collections.Generic.List_1")
350
- * @returns TypeBinding if found, undefined otherwise
351
- */
352
- export const lookupTypeBinding = (
353
- registry: ReadonlyMap<string, TypeBinding>,
354
- qualifiedTsName: string
355
- ): TypeBinding | undefined => {
356
- return registry.get(qualifiedTsName);
357
- };
@@ -1,153 +0,0 @@
1
- /**
2
- * Library Loader - Load metadata and bindings from external library directories.
3
- *
4
- * External libraries (specified via --lib flag) contain both metadata and bindings:
5
- * lib-path/
6
- * .metadata/
7
- * Namespace.metadata.json
8
- * .bindings/
9
- * Namespace.bindings.json
10
- *
11
- * This module provides helpers to load both from a single library root path.
12
- */
13
-
14
- import { join } from "path";
15
- import { existsSync, statSync } from "fs";
16
- import type { Result } from "../types/result.js";
17
- import type { Diagnostic } from "../types/diagnostic.js";
18
- import { loadMetadataDirectory } from "./loader.js";
19
- import { loadBindingsDirectory } from "./bindings-loader.js";
20
- import type { MetadataFile } from "../types/metadata.js";
21
- import type { BindingsFile } from "../types/bindings.js";
22
-
23
- /**
24
- * Loaded library data (metadata + bindings).
25
- */
26
- export type LibraryData = {
27
- readonly metadata: ReadonlyArray<MetadataFile>;
28
- readonly bindings: ReadonlyArray<BindingsFile>;
29
- };
30
-
31
- /**
32
- * Load metadata and bindings from a library directory.
33
- *
34
- * Looks for:
35
- * - ${libraryPath}/.metadata/ directory
36
- * - ${libraryPath}/.bindings/ directory
37
- *
38
- * @param libraryPath - Path to external library root
39
- * @returns Result with library data or diagnostics
40
- */
41
- export const loadLibrary = (
42
- libraryPath: string
43
- ): Result<LibraryData, Diagnostic[]> => {
44
- const diagnostics: Diagnostic[] = [];
45
-
46
- // Validate library path exists
47
- if (!existsSync(libraryPath)) {
48
- return {
49
- ok: false,
50
- error: [
51
- {
52
- code: "TSN9016",
53
- severity: "error",
54
- message: `Library directory not found: ${libraryPath}`,
55
- },
56
- ],
57
- };
58
- }
59
-
60
- // Validate it's a directory
61
- if (!statSync(libraryPath).isDirectory()) {
62
- return {
63
- ok: false,
64
- error: [
65
- {
66
- code: "TSN9017",
67
- severity: "error",
68
- message: `Library path is not a directory: ${libraryPath}`,
69
- },
70
- ],
71
- };
72
- }
73
-
74
- // Load metadata from .metadata/ subdirectory
75
- const metadataPath = join(libraryPath, ".metadata");
76
- let metadata: ReadonlyArray<MetadataFile> = [];
77
-
78
- if (existsSync(metadataPath)) {
79
- const metadataResult = loadMetadataDirectory(metadataPath);
80
- if (metadataResult.ok) {
81
- metadata = metadataResult.value;
82
- } else {
83
- diagnostics.push(...metadataResult.error);
84
- }
85
- }
86
-
87
- // Load bindings from .bindings/ subdirectory
88
- const bindingsPath = join(libraryPath, ".bindings");
89
- let bindings: ReadonlyArray<BindingsFile> = [];
90
-
91
- if (existsSync(bindingsPath)) {
92
- const bindingsResult = loadBindingsDirectory(bindingsPath);
93
- if (bindingsResult.ok) {
94
- bindings = bindingsResult.value;
95
- } else {
96
- diagnostics.push(...bindingsResult.error);
97
- }
98
- }
99
-
100
- // Return success even if one or both are missing (library might be incomplete)
101
- return {
102
- ok: true,
103
- value: {
104
- metadata,
105
- bindings,
106
- },
107
- };
108
- };
109
-
110
- /**
111
- * Load metadata and bindings from multiple library directories.
112
- *
113
- * @param libraryPaths - Array of library root paths
114
- * @returns Result with merged library data or diagnostics
115
- */
116
- export const loadLibraries = (
117
- libraryPaths: readonly string[]
118
- ): Result<LibraryData, Diagnostic[]> => {
119
- const allMetadata: MetadataFile[] = [];
120
- const allBindings: BindingsFile[] = [];
121
- const allDiagnostics: Diagnostic[] = [];
122
-
123
- for (const libPath of libraryPaths) {
124
- const result = loadLibrary(libPath);
125
- if (result.ok) {
126
- allMetadata.push(...result.value.metadata);
127
- allBindings.push(...result.value.bindings);
128
- } else {
129
- allDiagnostics.push(...result.error);
130
- }
131
- }
132
-
133
- // If we have any diagnostics but also loaded some data, still succeed
134
- // (allows partial library loading)
135
- if (
136
- allDiagnostics.length > 0 &&
137
- allMetadata.length === 0 &&
138
- allBindings.length === 0
139
- ) {
140
- return {
141
- ok: false,
142
- error: allDiagnostics,
143
- };
144
- }
145
-
146
- return {
147
- ok: true,
148
- value: {
149
- metadata: allMetadata,
150
- bindings: allBindings,
151
- },
152
- };
153
- };
@@ -1,156 +0,0 @@
1
- /**
2
- * Tests for metadata JSON loader
3
- */
4
-
5
- import { describe, it } from "mocha";
6
- import { strict as assert } from "assert";
7
- import * as fs from "fs";
8
- import * as path from "path";
9
- import * as os from "os";
10
- import { loadMetadataFile, loadMetadataDirectory } from "./loader.js";
11
- import type { MetadataFile } from "../types/metadata.js";
12
-
13
- describe("Metadata Loader", () => {
14
- describe("loadMetadataFile", () => {
15
- it("should load valid metadata file", () => {
16
- // Create temporary metadata file
17
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-test-"));
18
- const metadataPath = path.join(tmpDir, "test.metadata.json");
19
-
20
- const metadata: MetadataFile = {
21
- namespace: "System",
22
- contributingAssemblies: ["System.Runtime"],
23
- types: [
24
- {
25
- clrName: "System.String",
26
- tsEmitName: "String",
27
- kind: "Class",
28
- accessibility: "Public",
29
- isAbstract: false,
30
- isSealed: true,
31
- isStatic: false,
32
- arity: 0,
33
- methods: [],
34
- properties: [],
35
- fields: [],
36
- events: [],
37
- constructors: [],
38
- },
39
- ],
40
- };
41
-
42
- fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));
43
-
44
- const result = loadMetadataFile(metadataPath);
45
-
46
- // Cleanup
47
- fs.unlinkSync(metadataPath);
48
- fs.rmdirSync(tmpDir);
49
-
50
- assert.ok(result.ok);
51
- if (result.ok) {
52
- assert.equal(result.value.namespace, "System");
53
- assert.equal(result.value.types.length, 1);
54
- assert.equal(result.value.types[0]?.tsEmitName, "String");
55
- }
56
- });
57
-
58
- it("should return error for non-existent file", () => {
59
- const result = loadMetadataFile("/nonexistent/file.metadata.json");
60
-
61
- assert.ok(!result.ok);
62
- if (!result.ok) {
63
- assert.equal(result.error[0]?.code, "TSN9001");
64
- }
65
- });
66
-
67
- it("should return error for invalid JSON", () => {
68
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-test-"));
69
- const metadataPath = path.join(tmpDir, "invalid.metadata.json");
70
-
71
- fs.writeFileSync(metadataPath, "{ invalid json }");
72
-
73
- const result = loadMetadataFile(metadataPath);
74
-
75
- // Cleanup
76
- fs.unlinkSync(metadataPath);
77
- fs.rmdirSync(tmpDir);
78
-
79
- assert.ok(!result.ok);
80
- if (!result.ok) {
81
- assert.equal(result.error[0]?.code, "TSN9003");
82
- }
83
- });
84
-
85
- it("should return error for missing required fields", () => {
86
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-test-"));
87
- const metadataPath = path.join(tmpDir, "incomplete.metadata.json");
88
-
89
- // Missing namespace field
90
- fs.writeFileSync(
91
- metadataPath,
92
- JSON.stringify({ contributingAssemblies: [], types: [] })
93
- );
94
-
95
- const result = loadMetadataFile(metadataPath);
96
-
97
- // Cleanup
98
- fs.unlinkSync(metadataPath);
99
- fs.rmdirSync(tmpDir);
100
-
101
- assert.ok(!result.ok);
102
- if (!result.ok) {
103
- assert.equal(result.error[0]?.code, "TSN9005");
104
- }
105
- });
106
- });
107
-
108
- describe("loadMetadataDirectory", () => {
109
- it("should load all metadata files from directory", () => {
110
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-test-"));
111
-
112
- // Create two metadata files
113
- const metadata1: MetadataFile = {
114
- namespace: "System",
115
- contributingAssemblies: ["System.Runtime"],
116
- types: [],
117
- };
118
-
119
- const metadata2: MetadataFile = {
120
- namespace: "System.Collections",
121
- contributingAssemblies: ["System.Collections"],
122
- types: [],
123
- };
124
-
125
- fs.writeFileSync(
126
- path.join(tmpDir, "System.metadata.json"),
127
- JSON.stringify(metadata1)
128
- );
129
- fs.writeFileSync(
130
- path.join(tmpDir, "System.Collections.metadata.json"),
131
- JSON.stringify(metadata2)
132
- );
133
-
134
- const result = loadMetadataDirectory(tmpDir);
135
-
136
- // Cleanup
137
- fs.unlinkSync(path.join(tmpDir, "System.metadata.json"));
138
- fs.unlinkSync(path.join(tmpDir, "System.Collections.metadata.json"));
139
- fs.rmdirSync(tmpDir);
140
-
141
- assert.ok(result.ok);
142
- if (result.ok) {
143
- assert.equal(result.value.length, 2);
144
- }
145
- });
146
-
147
- it("should return error for non-existent directory", () => {
148
- const result = loadMetadataDirectory("/nonexistent/directory");
149
-
150
- assert.ok(!result.ok);
151
- if (!result.ok) {
152
- assert.equal(result.error[0]?.code, "TSN9016");
153
- }
154
- });
155
- });
156
- });