@tsonic/emitter 0.0.1 → 0.0.3

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 (652) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/adapter-generator.d.ts +28 -0
  3. package/dist/adapter-generator.d.ts.map +1 -0
  4. package/dist/adapter-generator.js +83 -0
  5. package/dist/adapter-generator.js.map +1 -0
  6. package/dist/array.test.d.ts +6 -0
  7. package/dist/array.test.d.ts.map +1 -0
  8. package/dist/array.test.js +274 -0
  9. package/dist/array.test.js.map +1 -0
  10. package/dist/constants.d.ts +15 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +22 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/core/exports.d.ts +10 -0
  15. package/dist/core/exports.d.ts.map +1 -0
  16. package/dist/core/exports.js +28 -0
  17. package/dist/core/exports.js.map +1 -0
  18. package/dist/core/imports.d.ts +26 -0
  19. package/dist/core/imports.d.ts.map +1 -0
  20. package/dist/core/imports.js +245 -0
  21. package/dist/core/imports.js.map +1 -0
  22. package/dist/core/imports.test.d.ts +6 -0
  23. package/dist/core/imports.test.d.ts.map +1 -0
  24. package/dist/core/imports.test.js +76 -0
  25. package/dist/core/imports.test.js.map +1 -0
  26. package/dist/core/index.d.ts +9 -0
  27. package/dist/core/index.d.ts.map +1 -0
  28. package/{src/core/index.ts → dist/core/index.js} +1 -1
  29. package/dist/core/index.js.map +1 -0
  30. package/dist/core/module-emitter/assembly.d.ts +21 -0
  31. package/dist/core/module-emitter/assembly.d.ts.map +1 -0
  32. package/dist/core/module-emitter/assembly.js +58 -0
  33. package/dist/core/module-emitter/assembly.js.map +1 -0
  34. package/dist/core/module-emitter/header.d.ts +10 -0
  35. package/dist/core/module-emitter/header.d.ts.map +1 -0
  36. package/dist/core/module-emitter/header.js +13 -0
  37. package/dist/core/module-emitter/header.js.map +1 -0
  38. package/{src/core/module-emitter/index.ts → dist/core/module-emitter/index.d.ts} +3 -10
  39. package/dist/core/module-emitter/index.d.ts.map +1 -0
  40. package/dist/core/module-emitter/index.js +10 -0
  41. package/dist/core/module-emitter/index.js.map +1 -0
  42. package/dist/core/module-emitter/namespace.d.ts +14 -0
  43. package/dist/core/module-emitter/namespace.d.ts.map +1 -0
  44. package/dist/core/module-emitter/namespace.js +26 -0
  45. package/dist/core/module-emitter/namespace.js.map +1 -0
  46. package/dist/core/module-emitter/orchestrator.d.ts +10 -0
  47. package/dist/core/module-emitter/orchestrator.d.ts.map +1 -0
  48. package/dist/core/module-emitter/orchestrator.js +58 -0
  49. package/dist/core/module-emitter/orchestrator.js.map +1 -0
  50. package/dist/core/module-emitter/separation.d.ts +14 -0
  51. package/dist/core/module-emitter/separation.d.ts.map +1 -0
  52. package/dist/core/module-emitter/separation.js +27 -0
  53. package/dist/core/module-emitter/separation.js.map +1 -0
  54. package/dist/core/module-emitter/static-container.d.ts +18 -0
  55. package/dist/core/module-emitter/static-container.d.ts.map +1 -0
  56. package/dist/core/module-emitter/static-container.js +49 -0
  57. package/dist/core/module-emitter/static-container.js.map +1 -0
  58. package/dist/core/module-emitter.d.ts +6 -0
  59. package/dist/core/module-emitter.d.ts.map +1 -0
  60. package/{src/core/module-emitter.ts → dist/core/module-emitter.js} +1 -1
  61. package/dist/core/module-emitter.js.map +1 -0
  62. package/dist/core/module-emitter.test.d.ts +6 -0
  63. package/dist/core/module-emitter.test.d.ts.map +1 -0
  64. package/dist/core/module-emitter.test.js +147 -0
  65. package/dist/core/module-emitter.test.js.map +1 -0
  66. package/dist/core/module-map.d.ts +35 -0
  67. package/dist/core/module-map.d.ts.map +1 -0
  68. package/dist/core/module-map.js +170 -0
  69. package/dist/core/module-map.js.map +1 -0
  70. package/dist/core/options.d.ts +9 -0
  71. package/dist/core/options.d.ts.map +1 -0
  72. package/dist/core/options.js +14 -0
  73. package/dist/core/options.js.map +1 -0
  74. package/dist/core/type-params.d.ts +9 -0
  75. package/dist/core/type-params.d.ts.map +1 -0
  76. package/dist/core/type-params.js +31 -0
  77. package/dist/core/type-params.js.map +1 -0
  78. package/dist/emitter-types/context.d.ts +29 -0
  79. package/dist/emitter-types/context.d.ts.map +1 -0
  80. package/dist/emitter-types/context.js +68 -0
  81. package/dist/emitter-types/context.js.map +1 -0
  82. package/dist/emitter-types/core.d.ts +142 -0
  83. package/dist/emitter-types/core.d.ts.map +1 -0
  84. package/dist/emitter-types/core.js +5 -0
  85. package/dist/emitter-types/core.js.map +1 -0
  86. package/dist/emitter-types/csharp-types.d.ts +27 -0
  87. package/dist/emitter-types/csharp-types.d.ts.map +1 -0
  88. package/dist/emitter-types/csharp-types.js +5 -0
  89. package/dist/emitter-types/csharp-types.js.map +1 -0
  90. package/dist/emitter-types/formatting.d.ts +9 -0
  91. package/dist/emitter-types/formatting.d.ts.map +1 -0
  92. package/dist/emitter-types/formatting.js +11 -0
  93. package/dist/emitter-types/formatting.js.map +1 -0
  94. package/dist/emitter-types/fqn.d.ts +53 -0
  95. package/dist/emitter-types/fqn.d.ts.map +1 -0
  96. package/dist/emitter-types/fqn.js +65 -0
  97. package/dist/emitter-types/fqn.js.map +1 -0
  98. package/dist/emitter-types/index.d.ts +9 -0
  99. package/dist/emitter-types/index.d.ts.map +1 -0
  100. package/dist/emitter-types/index.js +7 -0
  101. package/dist/emitter-types/index.js.map +1 -0
  102. package/dist/emitter.d.ts +27 -0
  103. package/dist/emitter.d.ts.map +1 -0
  104. package/dist/emitter.js +127 -0
  105. package/dist/emitter.js.map +1 -0
  106. package/dist/expression-emitter.d.ts +15 -0
  107. package/dist/expression-emitter.d.ts.map +1 -0
  108. package/dist/expression-emitter.js +69 -0
  109. package/dist/expression-emitter.js.map +1 -0
  110. package/dist/expressions/access.d.ts +12 -0
  111. package/dist/expressions/access.d.ts.map +1 -0
  112. package/dist/expressions/access.js +116 -0
  113. package/dist/expressions/access.js.map +1 -0
  114. package/dist/expressions/calls.d.ts +18 -0
  115. package/dist/expressions/calls.d.ts.map +1 -0
  116. package/dist/expressions/calls.js +324 -0
  117. package/dist/expressions/calls.js.map +1 -0
  118. package/dist/expressions/collections.d.ts +24 -0
  119. package/dist/expressions/collections.d.ts.map +1 -0
  120. package/dist/expressions/collections.js +254 -0
  121. package/dist/expressions/collections.js.map +1 -0
  122. package/dist/expressions/functions.d.ts +18 -0
  123. package/dist/expressions/functions.d.ts.map +1 -0
  124. package/dist/expressions/functions.js +60 -0
  125. package/dist/expressions/functions.js.map +1 -0
  126. package/dist/expressions/identifiers.d.ts +22 -0
  127. package/dist/expressions/identifiers.d.ts.map +1 -0
  128. package/dist/expressions/identifiers.js +99 -0
  129. package/dist/expressions/identifiers.js.map +1 -0
  130. package/dist/expressions/index.d.ts +12 -0
  131. package/dist/expressions/index.d.ts.map +1 -0
  132. package/{src/expressions/index.ts → dist/expressions/index.js} +3 -21
  133. package/dist/expressions/index.js.map +1 -0
  134. package/dist/expressions/index.test.d.ts +6 -0
  135. package/dist/expressions/index.test.d.ts.map +1 -0
  136. package/dist/expressions/index.test.js +480 -0
  137. package/dist/expressions/index.test.js.map +1 -0
  138. package/dist/expressions/literals.d.ts +31 -0
  139. package/dist/expressions/literals.d.ts.map +1 -0
  140. package/dist/expressions/literals.js +116 -0
  141. package/dist/expressions/literals.js.map +1 -0
  142. package/dist/expressions/operators.d.ts +72 -0
  143. package/dist/expressions/operators.d.ts.map +1 -0
  144. package/dist/expressions/operators.js +247 -0
  145. package/dist/expressions/operators.js.map +1 -0
  146. package/dist/expressions/other.d.ts +28 -0
  147. package/dist/expressions/other.d.ts.map +1 -0
  148. package/dist/expressions/other.js +48 -0
  149. package/dist/expressions/other.js.map +1 -0
  150. package/dist/generator-exchange.d.ts +11 -0
  151. package/dist/generator-exchange.d.ts.map +1 -0
  152. package/dist/generator-exchange.js +92 -0
  153. package/dist/generator-exchange.js.map +1 -0
  154. package/dist/generator.test.d.ts +6 -0
  155. package/dist/generator.test.d.ts.map +1 -0
  156. package/dist/generator.test.js +177 -0
  157. package/dist/generator.test.js.map +1 -0
  158. package/dist/golden-tests/config-parser.d.ts +9 -0
  159. package/dist/golden-tests/config-parser.d.ts.map +1 -0
  160. package/dist/golden-tests/config-parser.js +57 -0
  161. package/dist/golden-tests/config-parser.js.map +1 -0
  162. package/dist/golden-tests/discovery.d.ts +9 -0
  163. package/dist/golden-tests/discovery.d.ts.map +1 -0
  164. package/dist/golden-tests/discovery.js +51 -0
  165. package/dist/golden-tests/discovery.js.map +1 -0
  166. package/{src/golden-tests/index.ts → dist/golden-tests/index.d.ts} +1 -1
  167. package/dist/golden-tests/index.d.ts.map +1 -0
  168. package/dist/golden-tests/index.js +9 -0
  169. package/dist/golden-tests/index.js.map +1 -0
  170. package/dist/golden-tests/registration.d.ts +9 -0
  171. package/dist/golden-tests/registration.d.ts.map +1 -0
  172. package/dist/golden-tests/registration.js +23 -0
  173. package/dist/golden-tests/registration.js.map +1 -0
  174. package/dist/golden-tests/runner.d.ts +13 -0
  175. package/dist/golden-tests/runner.d.ts.map +1 -0
  176. package/dist/golden-tests/runner.js +100 -0
  177. package/dist/golden-tests/runner.js.map +1 -0
  178. package/dist/golden-tests/tree-builder.d.ts +9 -0
  179. package/dist/golden-tests/tree-builder.d.ts.map +1 -0
  180. package/dist/golden-tests/tree-builder.js +35 -0
  181. package/dist/golden-tests/tree-builder.js.map +1 -0
  182. package/dist/golden-tests/types.d.ts +19 -0
  183. package/dist/golden-tests/types.d.ts.map +1 -0
  184. package/dist/golden-tests/types.js +5 -0
  185. package/dist/golden-tests/types.js.map +1 -0
  186. package/dist/golden.test.d.ts +11 -0
  187. package/dist/golden.test.d.ts.map +1 -0
  188. package/{src/golden.test.ts → dist/golden.test.js} +15 -20
  189. package/dist/golden.test.js.map +1 -0
  190. package/dist/hierarchical-bindings.test.d.ts +6 -0
  191. package/dist/hierarchical-bindings.test.d.ts.map +1 -0
  192. package/dist/hierarchical-bindings.test.js +204 -0
  193. package/dist/hierarchical-bindings.test.js.map +1 -0
  194. package/dist/index.d.ts +9 -0
  195. package/dist/index.d.ts.map +1 -0
  196. package/{src/index.ts → dist/index.js} +2 -7
  197. package/dist/index.js.map +1 -0
  198. package/dist/integration.test.d.ts +6 -0
  199. package/dist/integration.test.d.ts.map +1 -0
  200. package/dist/integration.test.js +235 -0
  201. package/dist/integration.test.js.map +1 -0
  202. package/dist/specialization/call-site-rewriting.test.d.ts +6 -0
  203. package/dist/specialization/call-site-rewriting.test.d.ts.map +1 -0
  204. package/dist/specialization/call-site-rewriting.test.js +92 -0
  205. package/dist/specialization/call-site-rewriting.test.js.map +1 -0
  206. package/dist/specialization/collection/expressions.d.ts +10 -0
  207. package/dist/specialization/collection/expressions.d.ts.map +1 -0
  208. package/dist/specialization/collection/expressions.js +142 -0
  209. package/dist/specialization/collection/expressions.js.map +1 -0
  210. package/dist/specialization/collection/index.d.ts +7 -0
  211. package/dist/specialization/collection/index.d.ts.map +1 -0
  212. package/{src/specialization/collection/index.ts → dist/specialization/collection/index.js} +1 -1
  213. package/dist/specialization/collection/index.js.map +1 -0
  214. package/dist/specialization/collection/orchestrator.d.ts +11 -0
  215. package/dist/specialization/collection/orchestrator.d.ts.map +1 -0
  216. package/dist/specialization/collection/orchestrator.js +18 -0
  217. package/dist/specialization/collection/orchestrator.js.map +1 -0
  218. package/dist/specialization/collection/statements.d.ts +10 -0
  219. package/dist/specialization/collection/statements.d.ts.map +1 -0
  220. package/dist/specialization/collection/statements.js +75 -0
  221. package/dist/specialization/collection/statements.js.map +1 -0
  222. package/dist/specialization/collection.d.ts +6 -0
  223. package/dist/specialization/collection.d.ts.map +1 -0
  224. package/dist/specialization/collection.js +6 -0
  225. package/dist/specialization/collection.js.map +1 -0
  226. package/dist/specialization/generation.d.ts +11 -0
  227. package/dist/specialization/generation.d.ts.map +1 -0
  228. package/dist/specialization/generation.js +137 -0
  229. package/dist/specialization/generation.js.map +1 -0
  230. package/dist/specialization/generic-classes.test.d.ts +6 -0
  231. package/dist/specialization/generic-classes.test.d.ts.map +1 -0
  232. package/dist/specialization/generic-classes.test.js +55 -0
  233. package/dist/specialization/generic-classes.test.js.map +1 -0
  234. package/dist/specialization/generic-functions.test.d.ts +6 -0
  235. package/dist/specialization/generic-functions.test.d.ts.map +1 -0
  236. package/dist/specialization/generic-functions.test.js +275 -0
  237. package/dist/specialization/generic-functions.test.js.map +1 -0
  238. package/dist/specialization/helpers.d.ts +13 -0
  239. package/dist/specialization/helpers.d.ts.map +1 -0
  240. package/dist/specialization/helpers.js +33 -0
  241. package/dist/specialization/helpers.js.map +1 -0
  242. package/dist/specialization/index.d.ts +10 -0
  243. package/dist/specialization/index.d.ts.map +1 -0
  244. package/{src/specialization/index.ts → dist/specialization/index.js} +3 -17
  245. package/dist/specialization/index.js.map +1 -0
  246. package/dist/specialization/interfaces.test.d.ts +6 -0
  247. package/dist/specialization/interfaces.test.d.ts.map +1 -0
  248. package/dist/specialization/interfaces.test.js +139 -0
  249. package/dist/specialization/interfaces.test.js.map +1 -0
  250. package/dist/specialization/naming.d.ts +13 -0
  251. package/dist/specialization/naming.d.ts.map +1 -0
  252. package/dist/specialization/naming.js +25 -0
  253. package/dist/specialization/naming.js.map +1 -0
  254. package/dist/specialization/substitution.d.ts +17 -0
  255. package/dist/specialization/substitution.d.ts.map +1 -0
  256. package/dist/specialization/substitution.js +150 -0
  257. package/dist/specialization/substitution.js.map +1 -0
  258. package/dist/specialization/type-aliases.test.d.ts +6 -0
  259. package/dist/specialization/type-aliases.test.d.ts.map +1 -0
  260. package/dist/specialization/type-aliases.test.js +124 -0
  261. package/dist/specialization/type-aliases.test.js.map +1 -0
  262. package/dist/specialization/types.d.ts +14 -0
  263. package/dist/specialization/types.d.ts.map +1 -0
  264. package/dist/specialization/types.js +5 -0
  265. package/dist/specialization/types.js.map +1 -0
  266. package/{src/specialization-generator.ts → dist/specialization-generator.d.ts} +4 -15
  267. package/dist/specialization-generator.d.ts.map +1 -0
  268. package/dist/specialization-generator.js +11 -0
  269. package/dist/specialization-generator.js.map +1 -0
  270. package/dist/statement-emitter.d.ts +13 -0
  271. package/dist/statement-emitter.d.ts.map +1 -0
  272. package/dist/statement-emitter.js +67 -0
  273. package/dist/statement-emitter.js.map +1 -0
  274. package/dist/statements/blocks.d.ts +40 -0
  275. package/dist/statements/blocks.d.ts.map +1 -0
  276. package/dist/statements/blocks.js +86 -0
  277. package/dist/statements/blocks.js.map +1 -0
  278. package/{src/statements/classes/helpers.ts → dist/statements/classes/helpers.d.ts} +2 -3
  279. package/dist/statements/classes/helpers.d.ts.map +1 -0
  280. package/dist/statements/classes/helpers.js +8 -0
  281. package/dist/statements/classes/helpers.js.map +1 -0
  282. package/dist/statements/classes/index.d.ts +9 -0
  283. package/dist/statements/classes/index.d.ts.map +1 -0
  284. package/{src/statements/classes/index.ts → dist/statements/classes/index.js} +2 -6
  285. package/dist/statements/classes/index.js.map +1 -0
  286. package/dist/statements/classes/inline-types.d.ts +21 -0
  287. package/dist/statements/classes/inline-types.d.ts.map +1 -0
  288. package/dist/statements/classes/inline-types.js +50 -0
  289. package/dist/statements/classes/inline-types.js.map +1 -0
  290. package/dist/statements/classes/members/constructors.d.ts +12 -0
  291. package/dist/statements/classes/members/constructors.d.ts.map +1 -0
  292. package/dist/statements/classes/members/constructors.js +90 -0
  293. package/dist/statements/classes/members/constructors.js.map +1 -0
  294. package/dist/statements/classes/members/index.d.ts +8 -0
  295. package/dist/statements/classes/members/index.d.ts.map +1 -0
  296. package/{src/statements/classes/members/index.ts → dist/statements/classes/members/index.js} +1 -1
  297. package/dist/statements/classes/members/index.js.map +1 -0
  298. package/dist/statements/classes/members/methods.d.ts +12 -0
  299. package/dist/statements/classes/members/methods.d.ts.map +1 -0
  300. package/dist/statements/classes/members/methods.js +100 -0
  301. package/dist/statements/classes/members/methods.js.map +1 -0
  302. package/dist/statements/classes/members/orchestrator.d.ts +10 -0
  303. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -0
  304. package/dist/statements/classes/members/orchestrator.js +24 -0
  305. package/dist/statements/classes/members/orchestrator.js.map +1 -0
  306. package/dist/statements/classes/members/properties.d.ts +12 -0
  307. package/dist/statements/classes/members/properties.d.ts.map +1 -0
  308. package/dist/statements/classes/members/properties.js +48 -0
  309. package/dist/statements/classes/members/properties.js.map +1 -0
  310. package/dist/statements/classes/members.d.ts +6 -0
  311. package/dist/statements/classes/members.d.ts.map +1 -0
  312. package/{src/statements/classes/members.ts → dist/statements/classes/members.js} +1 -1
  313. package/dist/statements/classes/members.js.map +1 -0
  314. package/dist/statements/classes/parameters.d.ts +10 -0
  315. package/dist/statements/classes/parameters.d.ts.map +1 -0
  316. package/dist/statements/classes/parameters.js +50 -0
  317. package/dist/statements/classes/parameters.js.map +1 -0
  318. package/dist/statements/classes/properties.d.ts +11 -0
  319. package/dist/statements/classes/properties.d.ts.map +1 -0
  320. package/dist/statements/classes/properties.js +74 -0
  321. package/dist/statements/classes/properties.js.map +1 -0
  322. package/dist/statements/classes.d.ts +6 -0
  323. package/dist/statements/classes.d.ts.map +1 -0
  324. package/dist/statements/classes.js +6 -0
  325. package/dist/statements/classes.js.map +1 -0
  326. package/dist/statements/control/conditionals.d.ts +18 -0
  327. package/dist/statements/control/conditionals.d.ts.map +1 -0
  328. package/dist/statements/control/conditionals.js +98 -0
  329. package/dist/statements/control/conditionals.js.map +1 -0
  330. package/dist/statements/control/exceptions.d.ts +18 -0
  331. package/dist/statements/control/exceptions.d.ts.map +1 -0
  332. package/dist/statements/control/exceptions.js +38 -0
  333. package/dist/statements/control/exceptions.js.map +1 -0
  334. package/dist/statements/control/index.d.ts +7 -0
  335. package/dist/statements/control/index.d.ts.map +1 -0
  336. package/{src/statements/control/index.ts → dist/statements/control/index.js} +2 -6
  337. package/dist/statements/control/index.js.map +1 -0
  338. package/dist/statements/control/loops.d.ts +29 -0
  339. package/dist/statements/control/loops.d.ts.map +1 -0
  340. package/dist/statements/control/loops.js +186 -0
  341. package/dist/statements/control/loops.js.map +1 -0
  342. package/dist/statements/control.d.ts +6 -0
  343. package/dist/statements/control.d.ts.map +1 -0
  344. package/dist/statements/control.js +6 -0
  345. package/dist/statements/control.js.map +1 -0
  346. package/dist/statements/declarations/classes.d.ts +12 -0
  347. package/dist/statements/declarations/classes.d.ts.map +1 -0
  348. package/dist/statements/declarations/classes.js +61 -0
  349. package/dist/statements/declarations/classes.js.map +1 -0
  350. package/dist/statements/declarations/enums.d.ts +12 -0
  351. package/dist/statements/declarations/enums.d.ts.map +1 -0
  352. package/dist/statements/declarations/enums.js +25 -0
  353. package/dist/statements/declarations/enums.js.map +1 -0
  354. package/dist/statements/declarations/functions.d.ts +12 -0
  355. package/dist/statements/declarations/functions.d.ts.map +1 -0
  356. package/dist/statements/declarations/functions.js +110 -0
  357. package/dist/statements/declarations/functions.js.map +1 -0
  358. package/dist/statements/declarations/index.d.ts +10 -0
  359. package/dist/statements/declarations/index.d.ts.map +1 -0
  360. package/{src/statements/declarations/index.ts → dist/statements/declarations/index.js} +1 -1
  361. package/dist/statements/declarations/index.js.map +1 -0
  362. package/dist/statements/declarations/interfaces.d.ts +12 -0
  363. package/dist/statements/declarations/interfaces.d.ts.map +1 -0
  364. package/dist/statements/declarations/interfaces.js +85 -0
  365. package/dist/statements/declarations/interfaces.js.map +1 -0
  366. package/dist/statements/declarations/structs.test.d.ts +5 -0
  367. package/dist/statements/declarations/structs.test.d.ts.map +1 -0
  368. package/dist/statements/declarations/structs.test.js +165 -0
  369. package/dist/statements/declarations/structs.test.js.map +1 -0
  370. package/dist/statements/declarations/type-aliases.d.ts +12 -0
  371. package/dist/statements/declarations/type-aliases.d.ts.map +1 -0
  372. package/dist/statements/declarations/type-aliases.js +80 -0
  373. package/dist/statements/declarations/type-aliases.js.map +1 -0
  374. package/dist/statements/declarations/variables.d.ts +12 -0
  375. package/dist/statements/declarations/variables.d.ts.map +1 -0
  376. package/dist/statements/declarations/variables.js +120 -0
  377. package/dist/statements/declarations/variables.js.map +1 -0
  378. package/dist/statements/declarations.d.ts +6 -0
  379. package/dist/statements/declarations.d.ts.map +1 -0
  380. package/dist/statements/declarations.js +6 -0
  381. package/dist/statements/declarations.js.map +1 -0
  382. package/dist/statements/index.d.ts +8 -0
  383. package/dist/statements/index.d.ts.map +1 -0
  384. package/dist/statements/index.js +12 -0
  385. package/dist/statements/index.js.map +1 -0
  386. package/dist/statements/index.test.d.ts +6 -0
  387. package/dist/statements/index.test.d.ts.map +1 -0
  388. package/dist/statements/index.test.js +248 -0
  389. package/dist/statements/index.test.js.map +1 -0
  390. package/dist/type-assertion.test.d.ts +6 -0
  391. package/dist/type-assertion.test.d.ts.map +1 -0
  392. package/dist/type-assertion.test.js +133 -0
  393. package/dist/type-assertion.test.js.map +1 -0
  394. package/dist/type-emitter.d.ts +6 -0
  395. package/dist/type-emitter.d.ts.map +1 -0
  396. package/dist/type-emitter.js +6 -0
  397. package/dist/type-emitter.js.map +1 -0
  398. package/dist/types/arrays.d.ts +12 -0
  399. package/dist/types/arrays.d.ts.map +1 -0
  400. package/dist/types/arrays.js +15 -0
  401. package/dist/types/arrays.js.map +1 -0
  402. package/dist/types/dictionaries.d.ts +17 -0
  403. package/dist/types/dictionaries.d.ts.map +1 -0
  404. package/dist/types/dictionaries.js +37 -0
  405. package/dist/types/dictionaries.js.map +1 -0
  406. package/dist/types/emitter.d.ts +10 -0
  407. package/dist/types/emitter.d.ts.map +1 -0
  408. package/dist/types/emitter.js +53 -0
  409. package/dist/types/emitter.js.map +1 -0
  410. package/dist/types/functions.d.ts +12 -0
  411. package/dist/types/functions.d.ts.map +1 -0
  412. package/dist/types/functions.js +34 -0
  413. package/dist/types/functions.js.map +1 -0
  414. package/dist/types/index.d.ts +14 -0
  415. package/dist/types/index.d.ts.map +1 -0
  416. package/{src/types/index.ts → dist/types/index.js} +1 -1
  417. package/dist/types/index.js.map +1 -0
  418. package/dist/types/index.test.d.ts +6 -0
  419. package/dist/types/index.test.d.ts.map +1 -0
  420. package/dist/types/index.test.js +109 -0
  421. package/dist/types/index.test.js.map +1 -0
  422. package/dist/types/intersections.d.ts +12 -0
  423. package/dist/types/intersections.d.ts.map +1 -0
  424. package/dist/types/intersections.js +13 -0
  425. package/dist/types/intersections.js.map +1 -0
  426. package/dist/types/literals.d.ts +12 -0
  427. package/dist/types/literals.d.ts.map +1 -0
  428. package/dist/types/literals.js +20 -0
  429. package/dist/types/literals.js.map +1 -0
  430. package/{src/types/objects.ts → dist/types/objects.d.ts} +4 -11
  431. package/dist/types/objects.d.ts.map +1 -0
  432. package/dist/types/objects.js +19 -0
  433. package/dist/types/objects.js.map +1 -0
  434. package/dist/types/parameters.d.ts +15 -0
  435. package/dist/types/parameters.d.ts.map +1 -0
  436. package/dist/types/parameters.js +69 -0
  437. package/dist/types/parameters.js.map +1 -0
  438. package/dist/types/parameters.test.d.ts +5 -0
  439. package/dist/types/parameters.test.d.ts.map +1 -0
  440. package/dist/types/parameters.test.js +135 -0
  441. package/dist/types/parameters.test.js.map +1 -0
  442. package/dist/types/primitives.d.ts +12 -0
  443. package/dist/types/primitives.d.ts.map +1 -0
  444. package/dist/types/primitives.js +17 -0
  445. package/dist/types/primitives.js.map +1 -0
  446. package/dist/types/references.d.ts +14 -0
  447. package/dist/types/references.d.ts.map +1 -0
  448. package/dist/types/references.js +154 -0
  449. package/dist/types/references.js.map +1 -0
  450. package/dist/types/unions.d.ts +12 -0
  451. package/dist/types/unions.d.ts.map +1 -0
  452. package/dist/types/unions.js +45 -0
  453. package/dist/types/unions.js.map +1 -0
  454. package/dist/types/unions.test.d.ts +6 -0
  455. package/dist/types/unions.test.d.ts.map +1 -0
  456. package/dist/types/unions.test.js +367 -0
  457. package/dist/types/unions.test.js.map +1 -0
  458. package/dist/types.d.ts +7 -0
  459. package/dist/types.d.ts.map +1 -0
  460. package/dist/types.js +6 -0
  461. package/dist/types.js.map +1 -0
  462. package/package.json +5 -2
  463. package/scripts/update-golden-tests.ts +0 -119
  464. package/src/adapter-generator.ts +0 -112
  465. package/src/array.test.ts +0 -301
  466. package/src/constants.ts +0 -32
  467. package/src/core/exports.ts +0 -36
  468. package/src/core/imports.test.ts +0 -83
  469. package/src/core/imports.ts +0 -243
  470. package/src/core/module-emitter/assembly.ts +0 -83
  471. package/src/core/module-emitter/header.ts +0 -19
  472. package/src/core/module-emitter/namespace.ts +0 -39
  473. package/src/core/module-emitter/orchestrator.ts +0 -98
  474. package/src/core/module-emitter/separation.ts +0 -41
  475. package/src/core/module-emitter/static-container.ts +0 -75
  476. package/src/core/module-emitter.test.ts +0 -154
  477. package/src/core/module-map.ts +0 -218
  478. package/src/core/options.ts +0 -16
  479. package/src/core/type-params.ts +0 -34
  480. package/src/emitter-types/context.ts +0 -91
  481. package/src/emitter-types/core.ts +0 -138
  482. package/src/emitter-types/csharp-types.ts +0 -42
  483. package/src/emitter-types/formatting.ts +0 -13
  484. package/src/emitter-types/fqn.ts +0 -81
  485. package/src/emitter-types/index.ts +0 -31
  486. package/src/emitter.ts +0 -107
  487. package/src/expression-emitter.ts +0 -112
  488. package/src/expressions/access.ts +0 -104
  489. package/src/expressions/calls.ts +0 -264
  490. package/src/expressions/collections.ts +0 -354
  491. package/src/expressions/functions.ts +0 -71
  492. package/src/expressions/identifiers.ts +0 -125
  493. package/src/expressions/index.test.ts +0 -515
  494. package/src/expressions/literals.ts +0 -138
  495. package/src/expressions/operators.ts +0 -211
  496. package/src/expressions/other.ts +0 -63
  497. package/src/generator-exchange.ts +0 -120
  498. package/src/generator.test.ts +0 -193
  499. package/src/golden-tests/config-parser.ts +0 -67
  500. package/src/golden-tests/discovery.ts +0 -61
  501. package/src/golden-tests/registration.ts +0 -26
  502. package/src/golden-tests/runner.ts +0 -131
  503. package/src/golden-tests/tree-builder.ts +0 -43
  504. package/src/golden-tests/types.ts +0 -21
  505. package/src/hierarchical-bindings.test.ts +0 -258
  506. package/src/integration.test.ts +0 -303
  507. package/src/specialization/call-site-rewriting.test.ts +0 -99
  508. package/src/specialization/collection/expressions.ts +0 -184
  509. package/src/specialization/collection/orchestrator.ts +0 -25
  510. package/src/specialization/collection/statements.ts +0 -91
  511. package/src/specialization/collection.ts +0 -10
  512. package/src/specialization/generation.ts +0 -189
  513. package/src/specialization/generic-classes.test.ts +0 -59
  514. package/src/specialization/generic-functions.test.ts +0 -292
  515. package/src/specialization/helpers.ts +0 -39
  516. package/src/specialization/interfaces.test.ts +0 -151
  517. package/src/specialization/naming.ts +0 -34
  518. package/src/specialization/substitution.ts +0 -186
  519. package/src/specialization/type-aliases.test.ts +0 -134
  520. package/src/specialization/types.ts +0 -19
  521. package/src/statement-emitter.ts +0 -117
  522. package/src/statements/blocks.ts +0 -115
  523. package/src/statements/classes/inline-types.ts +0 -79
  524. package/src/statements/classes/members/constructors.ts +0 -123
  525. package/src/statements/classes/members/methods.ts +0 -137
  526. package/src/statements/classes/members/orchestrator.ts +0 -33
  527. package/src/statements/classes/members/properties.ts +0 -62
  528. package/src/statements/classes/parameters.ts +0 -69
  529. package/src/statements/classes/properties.ts +0 -95
  530. package/src/statements/classes.ts +0 -14
  531. package/src/statements/control/conditionals.ts +0 -134
  532. package/src/statements/control/exceptions.ts +0 -59
  533. package/src/statements/control/loops.ts +0 -250
  534. package/src/statements/control.ts +0 -14
  535. package/src/statements/declarations/classes.ts +0 -89
  536. package/src/statements/declarations/enums.ts +0 -32
  537. package/src/statements/declarations/functions.ts +0 -147
  538. package/src/statements/declarations/interfaces.ts +0 -116
  539. package/src/statements/declarations/structs.test.ts +0 -182
  540. package/src/statements/declarations/type-aliases.ts +0 -104
  541. package/src/statements/declarations/variables.ts +0 -159
  542. package/src/statements/declarations.ts +0 -13
  543. package/src/statements/index.test.ts +0 -258
  544. package/src/statements/index.ts +0 -43
  545. package/src/type-assertion.test.ts +0 -143
  546. package/src/type-emitter.ts +0 -18
  547. package/src/types/arrays.ts +0 -21
  548. package/src/types/dictionaries.ts +0 -52
  549. package/src/types/emitter.ts +0 -76
  550. package/src/types/functions.ts +0 -45
  551. package/src/types/index.test.ts +0 -116
  552. package/src/types/intersections.ts +0 -19
  553. package/src/types/literals.ts +0 -26
  554. package/src/types/parameters.test.ts +0 -146
  555. package/src/types/parameters.ts +0 -95
  556. package/src/types/primitives.ts +0 -24
  557. package/src/types/references.ts +0 -187
  558. package/src/types/unions.test.ts +0 -397
  559. package/src/types/unions.ts +0 -62
  560. package/src/types.ts +0 -33
  561. package/testcases/README.md +0 -213
  562. package/testcases/arrays/basic/ArrayLiteral.ts +0 -4
  563. package/testcases/arrays/basic/config.yaml +0 -1
  564. package/testcases/arrays/destructuring/ArrayDestructure.ts +0 -4
  565. package/testcases/arrays/destructuring/config.yaml +0 -1
  566. package/testcases/arrays/methods/ArrayMethods.ts +0 -6
  567. package/testcases/arrays/methods/config.yaml +0 -1
  568. package/testcases/arrays/multidimensional/MultiDimensional.ts +0 -10
  569. package/testcases/arrays/multidimensional/config.yaml +0 -1
  570. package/testcases/arrays/spread/ArraySpread.ts +0 -3
  571. package/testcases/arrays/spread/config.yaml +0 -1
  572. package/testcases/async/basic/AsyncFunction.ts +0 -5
  573. package/testcases/async/basic/config.yaml +0 -1
  574. package/testcases/classes/abstract/AbstractClasses.ts +0 -53
  575. package/testcases/classes/abstract/config.yaml +0 -1
  576. package/testcases/classes/basic/Person.ts +0 -12
  577. package/testcases/classes/basic/config.yaml +0 -1
  578. package/testcases/classes/constructor/User.ts +0 -11
  579. package/testcases/classes/constructor/config.yaml +0 -1
  580. package/testcases/classes/field-inference/Counter.ts +0 -11
  581. package/testcases/classes/field-inference/config.yaml +0 -1
  582. package/testcases/classes/inheritance/Inheritance.ts +0 -24
  583. package/testcases/classes/inheritance/config.yaml +0 -1
  584. package/testcases/classes/static-members/MathHelper.ts +0 -12
  585. package/testcases/classes/static-members/config.yaml +0 -1
  586. package/testcases/control-flow/error-handling/ErrorHandling.ts +0 -13
  587. package/testcases/control-flow/error-handling/config.yaml +0 -1
  588. package/testcases/control-flow/loops/Loops.ts +0 -21
  589. package/testcases/control-flow/loops/config.yaml +0 -1
  590. package/testcases/control-flow/switch/SwitchStatement.ts +0 -15
  591. package/testcases/control-flow/switch/config.yaml +0 -1
  592. package/testcases/edge-cases/complex-expressions/ComplexExpressions.ts +0 -10
  593. package/testcases/edge-cases/complex-expressions/config.yaml +0 -1
  594. package/testcases/edge-cases/nested-scopes/NestedScopes.ts +0 -10
  595. package/testcases/edge-cases/nested-scopes/config.yaml +0 -1
  596. package/testcases/edge-cases/shadowing/Shadowing.ts +0 -16
  597. package/testcases/edge-cases/shadowing/config.yaml +0 -1
  598. package/testcases/functions/arrow/ArrowFunction.ts +0 -5
  599. package/testcases/functions/arrow/config.yaml +0 -1
  600. package/testcases/functions/basic/Greet.ts +0 -3
  601. package/testcases/functions/basic/config.yaml +0 -1
  602. package/testcases/functions/closures/Closures.ts +0 -11
  603. package/testcases/functions/closures/config.yaml +0 -1
  604. package/testcases/functions/default-params/DefaultParams.ts +0 -7
  605. package/testcases/functions/default-params/config.yaml +0 -1
  606. package/testcases/functions/rest-params/RestParams.ts +0 -7
  607. package/testcases/functions/rest-params/config.yaml +0 -1
  608. package/testcases/functions/type-guards/TypeGuards.ts +0 -52
  609. package/testcases/functions/type-guards/config.yaml +0 -1
  610. package/testcases/operators/logical/LogicalOperators.ts +0 -11
  611. package/testcases/operators/logical/config.yaml +0 -1
  612. package/testcases/operators/nullish-coalescing/NullishCoalescing.ts +0 -7
  613. package/testcases/operators/nullish-coalescing/config.yaml +0 -1
  614. package/testcases/operators/optional-chaining/OptionalChaining.ts +0 -15
  615. package/testcases/operators/optional-chaining/config.yaml +0 -1
  616. package/testcases/real-world/advanced-generics/advanced-generics.ts +0 -116
  617. package/testcases/real-world/advanced-generics/config.yaml +0 -1
  618. package/testcases/real-world/async-ops/async-ops.ts +0 -67
  619. package/testcases/real-world/async-ops/config.yaml +0 -1
  620. package/testcases/real-world/business-logic/business-logic.ts +0 -215
  621. package/testcases/real-world/business-logic/config.yaml +0 -1
  622. package/testcases/real-world/calculator/calculator.ts +0 -29
  623. package/testcases/real-world/calculator/config.yaml +0 -1
  624. package/testcases/real-world/data-structures/config.yaml +0 -1
  625. package/testcases/real-world/data-structures/data-structures.ts +0 -133
  626. package/testcases/real-world/functional/config.yaml +0 -1
  627. package/testcases/real-world/functional/functional.ts +0 -116
  628. package/testcases/real-world/shapes/config.yaml +0 -1
  629. package/testcases/real-world/shapes/shapes.ts +0 -87
  630. package/testcases/real-world/string-utils/config.yaml +0 -1
  631. package/testcases/real-world/string-utils/string-utils.ts +0 -47
  632. package/testcases/real-world/todo-list/config.yaml +0 -1
  633. package/testcases/real-world/todo-list/todo-list.ts +0 -52
  634. package/testcases/real-world/type-guards/config.yaml +0 -1
  635. package/testcases/real-world/type-guards/type-guards.ts +0 -71
  636. package/testcases/structs/basic/Point.ts +0 -9
  637. package/testcases/structs/basic/config.yaml +0 -1
  638. package/testcases/types/conditional/ConditionalTypes.ts +0 -35
  639. package/testcases/types/conditional/config.yaml +0 -1
  640. package/testcases/types/constants/ModuleConstants.ts +0 -6
  641. package/testcases/types/constants/config.yaml +0 -1
  642. package/testcases/types/generics/Generics.ts +0 -15
  643. package/testcases/types/generics/config.yaml +0 -1
  644. package/testcases/types/interfaces/Interfaces.ts +0 -14
  645. package/testcases/types/interfaces/config.yaml +0 -1
  646. package/testcases/types/mapped/MappedTypes.ts +0 -27
  647. package/testcases/types/mapped/config.yaml +0 -1
  648. package/testcases/types/tuples-intersections/TuplesAndIntersections.ts +0 -46
  649. package/testcases/types/tuples-intersections/config.yaml +0 -1
  650. package/testcases/types/unions/UnionTypes.ts +0 -11
  651. package/testcases/types/unions/config.yaml +0 -1
  652. package/tsconfig.json +0 -14
@@ -1,154 +0,0 @@
1
- /**
2
- * Tests for Module Generation
3
- * Tests emission of static containers and regular classes
4
- */
5
-
6
- import { describe, it } from "mocha";
7
- import { expect } from "chai";
8
- import { emitModule } from "../emitter.js";
9
- import { IrModule } from "@tsonic/frontend";
10
-
11
- describe("Module Generation", () => {
12
- it("should emit a static container class", () => {
13
- const module: IrModule = {
14
- kind: "module",
15
- filePath: "/src/math.ts",
16
- namespace: "MyApp",
17
- className: "math",
18
- isStaticContainer: true,
19
- imports: [],
20
- body: [
21
- {
22
- kind: "variableDeclaration",
23
- declarationKind: "const",
24
- declarations: [
25
- {
26
- kind: "variableDeclarator",
27
- name: { kind: "identifierPattern", name: "PI" },
28
- initializer: { kind: "literal", value: 3.14159 },
29
- },
30
- ],
31
- isExported: true,
32
- },
33
- {
34
- kind: "functionDeclaration",
35
- name: "add",
36
- parameters: [
37
- {
38
- kind: "parameter",
39
- pattern: { kind: "identifierPattern", name: "a" },
40
- type: { kind: "primitiveType", name: "number" },
41
- isOptional: false,
42
- isRest: false,
43
- passing: "value",
44
- },
45
- {
46
- kind: "parameter",
47
- pattern: { kind: "identifierPattern", name: "b" },
48
- type: { kind: "primitiveType", name: "number" },
49
- isOptional: false,
50
- isRest: false,
51
- passing: "value",
52
- },
53
- ],
54
- returnType: { kind: "primitiveType", name: "number" },
55
- body: {
56
- kind: "blockStatement",
57
- statements: [
58
- {
59
- kind: "returnStatement",
60
- expression: {
61
- kind: "binary",
62
- operator: "+",
63
- left: { kind: "identifier", name: "a" },
64
- right: { kind: "identifier", name: "b" },
65
- },
66
- },
67
- ],
68
- },
69
- isExported: true,
70
- isAsync: false,
71
- isGenerator: false,
72
- },
73
- ],
74
- exports: [],
75
- };
76
-
77
- const result = emitModule(module);
78
-
79
- expect(result).to.include("public static class math");
80
- expect(result).to.include("var PI = 3.14159");
81
- expect(result).to.include("public static double add(double a, double b)");
82
- expect(result).to.include("return a + b");
83
- expect(result).to.include("namespace MyApp");
84
- });
85
-
86
- it("should emit a regular class", () => {
87
- const module: IrModule = {
88
- kind: "module",
89
- filePath: "/src/User.ts",
90
- namespace: "MyApp",
91
- className: "User",
92
- isStaticContainer: false,
93
- imports: [],
94
- body: [
95
- {
96
- kind: "classDeclaration",
97
- name: "User",
98
- members: [
99
- {
100
- kind: "propertyDeclaration",
101
- name: "name",
102
- type: { kind: "primitiveType", name: "string" },
103
- accessibility: "public",
104
- isStatic: false,
105
- isReadonly: false,
106
- },
107
- {
108
- kind: "methodDeclaration",
109
- name: "greet",
110
- parameters: [],
111
- returnType: { kind: "primitiveType", name: "string" },
112
- body: {
113
- kind: "blockStatement",
114
- statements: [
115
- {
116
- kind: "returnStatement",
117
- expression: {
118
- kind: "templateLiteral",
119
- quasis: ["Hello, I'm ", ""],
120
- expressions: [
121
- {
122
- kind: "memberAccess",
123
- object: { kind: "this" },
124
- property: "name",
125
- isComputed: false,
126
- isOptional: false,
127
- },
128
- ],
129
- },
130
- },
131
- ],
132
- },
133
- accessibility: "public",
134
- isStatic: false,
135
- isAsync: false,
136
- isGenerator: false,
137
- },
138
- ],
139
- isStruct: false,
140
- isExported: true,
141
- implements: [],
142
- },
143
- ],
144
- exports: [],
145
- };
146
-
147
- const result = emitModule(module);
148
-
149
- expect(result).to.include("public class User");
150
- expect(result).to.include("public string name;");
151
- expect(result).to.include("public string greet()");
152
- expect(result).to.include('$"Hello, I\'m {this.name}"');
153
- });
154
- });
@@ -1,218 +0,0 @@
1
- /**
2
- * Module map for resolving cross-file imports
3
- */
4
-
5
- import { IrModule, Diagnostic } from "@tsonic/frontend";
6
- import type {
7
- ModuleIdentity,
8
- ModuleMap,
9
- ExportSource,
10
- ExportMap,
11
- } from "../emitter-types/core.js";
12
-
13
- // Re-export types for backward compatibility
14
- export type { ModuleIdentity, ModuleMap, ExportSource, ExportMap };
15
-
16
- /**
17
- * Normalize a file path for use as module map key
18
- * - Convert backslashes to forward slashes
19
- * - Remove .ts extension if present
20
- * - Normalize . and .. segments
21
- */
22
- export const canonicalizeFilePath = (filePath: string): string => {
23
- // Normalize slashes
24
- let normalized = filePath.replace(/\\/g, "/");
25
-
26
- // Remove .ts extension
27
- if (normalized.endsWith(".ts")) {
28
- normalized = normalized.slice(0, -3);
29
- }
30
-
31
- // Split into segments and resolve . and ..
32
- const segments: string[] = [];
33
- for (const segment of normalized.split("/")) {
34
- if (segment === "" || segment === ".") {
35
- continue; // Skip empty and current directory
36
- } else if (segment === "..") {
37
- segments.pop(); // Go up one directory
38
- } else {
39
- segments.push(segment);
40
- }
41
- }
42
-
43
- return segments.join("/");
44
- };
45
-
46
- /**
47
- * Result of building module map
48
- */
49
- export type ModuleMapResult =
50
- | {
51
- readonly ok: true;
52
- readonly value: ModuleMap;
53
- readonly exportMap: ExportMap;
54
- }
55
- | { readonly ok: false; readonly errors: readonly Diagnostic[] };
56
-
57
- /**
58
- * Build module map from IR modules.
59
- * Returns an error if any two files in the same namespace have the same
60
- * normalized class name (e.g., api-client.ts and apiclient.ts both map to "apiclient").
61
- */
62
- export const buildModuleMap = (
63
- modules: readonly IrModule[]
64
- ): ModuleMapResult => {
65
- const map = new Map<string, ModuleIdentity>();
66
- const errors: Diagnostic[] = [];
67
-
68
- // Group modules by namespace to detect class name collisions
69
- const byNamespace = new Map<string, IrModule[]>();
70
- for (const module of modules) {
71
- const existing = byNamespace.get(module.namespace) ?? [];
72
- byNamespace.set(module.namespace, [...existing, module]);
73
- }
74
-
75
- // Check for collisions within each namespace
76
- for (const [namespace, nsModules] of byNamespace) {
77
- const byClassName = new Map<string, IrModule[]>();
78
- for (const module of nsModules) {
79
- const existing = byClassName.get(module.className) ?? [];
80
- byClassName.set(module.className, [...existing, module]);
81
- }
82
-
83
- // Report collisions
84
- for (const [className, colliding] of byClassName) {
85
- if (colliding.length > 1) {
86
- const fileNames = colliding
87
- .map((m) => `'${m.filePath.split("/").pop()}'`)
88
- .join(" and ");
89
- errors.push({
90
- code: "TSN9001",
91
- message: `File name collision after normalization: ${fileNames} both map to class '${className}' in namespace '${namespace}'. Rename one file.`,
92
- severity: "error",
93
- });
94
- }
95
- }
96
- }
97
-
98
- if (errors.length > 0) {
99
- return { ok: false, errors };
100
- }
101
-
102
- // Build the map
103
- for (const module of modules) {
104
- const canonicalPath = canonicalizeFilePath(module.filePath);
105
- map.set(canonicalPath, {
106
- namespace: module.namespace,
107
- className: module.className,
108
- filePath: canonicalPath,
109
- });
110
- }
111
-
112
- // Build the export map
113
- const exportMap = buildExportMap(modules);
114
-
115
- return { ok: true, value: map, exportMap };
116
- };
117
-
118
- /**
119
- * Build export map from IR modules.
120
- * Maps (modulePath, exportName) -> actual source for re-exports.
121
- */
122
- const buildExportMap = (modules: readonly IrModule[]): ExportMap => {
123
- const exportMap = new Map<string, ExportSource>();
124
-
125
- // First pass: collect all re-exports
126
- for (const module of modules) {
127
- const modulePath = canonicalizeFilePath(module.filePath);
128
-
129
- for (const exp of module.exports) {
130
- if (exp.kind === "reexport") {
131
- // Resolve the source module path
132
- const sourcePath = resolveImportPath(module.filePath, exp.fromModule);
133
- const key = `${modulePath}:${exp.name}`;
134
- exportMap.set(key, {
135
- sourceFile: sourcePath,
136
- sourceName: exp.originalName,
137
- });
138
- }
139
- }
140
- }
141
-
142
- // Second pass: resolve transitive re-exports
143
- // Keep resolving until no changes (handles chains like A re-exports from B re-exports from C)
144
- const resolveTransitive = (): boolean => {
145
- let changed = false;
146
-
147
- for (const [key, source] of exportMap) {
148
- const transitiveKey = `${source.sourceFile}:${source.sourceName}`;
149
- const transitiveSource = exportMap.get(transitiveKey);
150
-
151
- if (transitiveSource) {
152
- // This is a transitive re-export - update to point to the actual source
153
- exportMap.set(key, transitiveSource);
154
- changed = true;
155
- }
156
- }
157
-
158
- return changed;
159
- };
160
-
161
- // Resolve transitive re-exports (max 10 iterations to prevent infinite loops)
162
- for (let i = 0; i < 10 && resolveTransitive(); i++) {
163
- // Keep resolving
164
- }
165
-
166
- return exportMap;
167
- };
168
-
169
- /**
170
- * Resolve a relative import path to a canonical file path
171
- */
172
- export const resolveImportPath = (
173
- currentFilePath: string,
174
- importSource: string
175
- ): string => {
176
- // Normalize current file path
177
- const currentCanonical = canonicalizeFilePath(currentFilePath);
178
-
179
- // Get directory of current file
180
- const lastSlash = currentCanonical.lastIndexOf("/");
181
- const currentDir = lastSlash >= 0 ? currentCanonical.slice(0, lastSlash) : "";
182
-
183
- // Normalize import source
184
- let source = importSource.replace(/\\/g, "/");
185
-
186
- // Remove .ts extension if present
187
- if (source.endsWith(".ts")) {
188
- source = source.slice(0, -3);
189
- }
190
-
191
- // Resolve relative path
192
- let resolvedPath: string;
193
- if (source.startsWith("./")) {
194
- // Same directory or subdirectory
195
- resolvedPath = currentDir
196
- ? `${currentDir}/${source.slice(2)}`
197
- : source.slice(2);
198
- } else if (source.startsWith("../")) {
199
- // Parent directory
200
- const parts = currentDir.split("/");
201
- let remaining = source;
202
- while (remaining.startsWith("../")) {
203
- parts.pop();
204
- remaining = remaining.slice(3);
205
- }
206
- resolvedPath =
207
- parts.length > 0 ? `${parts.join("/")}/${remaining}` : remaining;
208
- } else if (source.startsWith("/")) {
209
- // Absolute path (remove leading slash)
210
- resolvedPath = source.slice(1);
211
- } else {
212
- // No ./ or ../, treat as same directory
213
- resolvedPath = currentDir ? `${currentDir}/${source}` : source;
214
- }
215
-
216
- // Canonicalize the result
217
- return canonicalizeFilePath(resolvedPath);
218
- };
@@ -1,16 +0,0 @@
1
- /**
2
- * Emitter options and defaults
3
- */
4
-
5
- import { EmitterOptions } from "../types.js";
6
-
7
- /**
8
- * Default emitter options
9
- */
10
- export const defaultOptions: EmitterOptions = {
11
- rootNamespace: "MyApp",
12
- includeSourceMaps: false,
13
- indent: 4,
14
- maxLineLength: 120,
15
- includeTimestamp: true,
16
- };
@@ -1,34 +0,0 @@
1
- /**
2
- * Type parameter collection
3
- */
4
-
5
- import { IrModule, IrTypeParameter } from "@tsonic/frontend";
6
-
7
- /**
8
- * Collect all type parameters from declarations in a module
9
- */
10
- export const collectTypeParameters = (
11
- module: IrModule
12
- ): readonly IrTypeParameter[] => {
13
- const typeParams: IrTypeParameter[] = [];
14
-
15
- for (const stmt of module.body) {
16
- if (stmt.kind === "functionDeclaration" && stmt.typeParameters) {
17
- typeParams.push(...stmt.typeParameters);
18
- } else if (stmt.kind === "classDeclaration" && stmt.typeParameters) {
19
- typeParams.push(...stmt.typeParameters);
20
- // Also collect from class members
21
- for (const member of stmt.members) {
22
- if (member.kind === "methodDeclaration" && member.typeParameters) {
23
- typeParams.push(...member.typeParameters);
24
- }
25
- }
26
- } else if (stmt.kind === "interfaceDeclaration" && stmt.typeParameters) {
27
- typeParams.push(...stmt.typeParameters);
28
- } else if (stmt.kind === "typeAliasDeclaration" && stmt.typeParameters) {
29
- typeParams.push(...stmt.typeParameters);
30
- }
31
- }
32
-
33
- return typeParams;
34
- };
@@ -1,91 +0,0 @@
1
- /**
2
- * Context creation and manipulation functions
3
- */
4
-
5
- import { EmitterOptions, EmitterContext } from "./core.js";
6
- import {
7
- loadLibraries,
8
- buildBindingsRegistry,
9
- } from "@tsonic/frontend/metadata/index.js";
10
-
11
- /**
12
- * Create a new emitter context with default values
13
- */
14
- export const createContext = (options: EmitterOptions): EmitterContext => {
15
- // Load metadata and bindings from library directories
16
- let metadata: EmitterContext["metadata"] = undefined;
17
- let bindingsRegistry: EmitterContext["bindingsRegistry"] = undefined;
18
-
19
- if (options.libraries && options.libraries.length > 0) {
20
- const librariesResult = loadLibraries(options.libraries);
21
- if (librariesResult.ok) {
22
- metadata = librariesResult.value.metadata;
23
- bindingsRegistry = buildBindingsRegistry(librariesResult.value.bindings);
24
- } else {
25
- // TODO: Report diagnostics from librariesResult.error
26
- // Need to integrate diagnostic reporting infrastructure
27
- console.warn(
28
- "[Tsonic] Failed to load libraries:",
29
- librariesResult.error.map((d) => d.message).join(", ")
30
- );
31
- }
32
- }
33
-
34
- return {
35
- indentLevel: 0,
36
- options,
37
- isStatic: false,
38
- isAsync: false,
39
- metadata,
40
- bindingsRegistry,
41
- };
42
- };
43
-
44
- /**
45
- * Increase indentation level
46
- */
47
- export const indent = (context: EmitterContext): EmitterContext => ({
48
- ...context,
49
- indentLevel: context.indentLevel + 1,
50
- });
51
-
52
- /**
53
- * Decrease indentation level
54
- */
55
- export const dedent = (context: EmitterContext): EmitterContext => ({
56
- ...context,
57
- indentLevel: Math.max(0, context.indentLevel - 1),
58
- });
59
-
60
- /**
61
- * Set static context flag
62
- */
63
- export const withStatic = (
64
- context: EmitterContext,
65
- isStatic: boolean
66
- ): EmitterContext => ({
67
- ...context,
68
- isStatic,
69
- });
70
-
71
- /**
72
- * Set async context flag
73
- */
74
- export const withAsync = (
75
- context: EmitterContext,
76
- isAsync: boolean
77
- ): EmitterContext => ({
78
- ...context,
79
- isAsync,
80
- });
81
-
82
- /**
83
- * Set current class name in context
84
- */
85
- export const withClassName = (
86
- context: EmitterContext,
87
- className: string
88
- ): EmitterContext => ({
89
- ...context,
90
- className,
91
- });
@@ -1,138 +0,0 @@
1
- /**
2
- * Core emitter types
3
- */
4
-
5
- import type { MetadataFile } from "@tsonic/frontend/types/metadata.js";
6
- import type { TypeBinding } from "@tsonic/frontend/types/bindings.js";
7
-
8
- /**
9
- * Module identity for import resolution
10
- */
11
- export type ModuleIdentity = {
12
- readonly namespace: string;
13
- readonly className: string;
14
- readonly filePath: string;
15
- };
16
-
17
- /**
18
- * Module map for resolving cross-file imports
19
- */
20
- export type ModuleMap = ReadonlyMap<string, ModuleIdentity>;
21
-
22
- /**
23
- * Export source: where an export actually comes from
24
- * Used to resolve re-exports to their original source
25
- */
26
- export type ExportSource = {
27
- /** Canonical file path of the actual source */
28
- readonly sourceFile: string;
29
- /** Name of the export in the source file */
30
- readonly sourceName: string;
31
- };
32
-
33
- /**
34
- * Map from (moduleFilePath, exportName) to actual source
35
- * Key format: "moduleFilePath:exportName"
36
- */
37
- export type ExportMap = ReadonlyMap<string, ExportSource>;
38
-
39
- /**
40
- * Options for C# code generation
41
- */
42
- export type EmitterOptions = {
43
- /** Root namespace for the application */
44
- readonly rootNamespace: string;
45
- /** Whether to include source map comments */
46
- readonly includeSourceMaps?: boolean;
47
- /** Indentation style (spaces) */
48
- readonly indent?: number;
49
- /** Maximum line length */
50
- readonly maxLineLength?: number;
51
- /** Include timestamp in generated files */
52
- readonly includeTimestamp?: boolean;
53
- /** Whether this module is an entry point (needs Main method) */
54
- readonly isEntryPoint?: boolean;
55
- /** Entry point file path (for batch emit) */
56
- readonly entryPointPath?: string;
57
- /** External library paths (contain .metadata and .bindings directories) */
58
- readonly libraries?: readonly string[];
59
- /** Runtime mode: "js" uses Tsonic.JSRuntime extensions, "dotnet" uses pure .NET */
60
- readonly runtime?: "js" | "dotnet";
61
- /** Module map for resolving cross-file imports (populated during batch emission) */
62
- readonly moduleMap?: ModuleMap;
63
- /** Export map for resolving re-exports to actual source (populated during batch emission) */
64
- readonly exportMap?: ExportMap;
65
- };
66
-
67
- /**
68
- * Import binding information for qualifying imported identifiers.
69
- * Local module imports are always emitted as fully-qualified references
70
- * to avoid C# name ambiguity.
71
- *
72
- * All CLR name resolution is done in the frontend - the emitter just uses
73
- * the pre-computed clrName directly (no string parsing or type lookup).
74
- */
75
- export type ImportBinding = {
76
- /** Import kind: type (interface/class), value (function/variable), or namespace (import *) */
77
- readonly kind: "type" | "value" | "namespace";
78
- /**
79
- * Fully-qualified CLR name.
80
- * - For types: the type's FQN (e.g., "MultiFileTypes.models.User")
81
- * - For values/namespaces: the container class FQN (e.g., "MultiFileTypes.models.user")
82
- */
83
- readonly clrName: string;
84
- /** For value imports: the member name inside the container (e.g., "createUser") */
85
- readonly member?: string;
86
- };
87
-
88
- /**
89
- * Context passed through emission process
90
- */
91
- export type EmitterContext = {
92
- /** Current indentation level */
93
- readonly indentLevel: number;
94
- /** Options for emission */
95
- readonly options: EmitterOptions;
96
- /** Whether currently in static context */
97
- readonly isStatic: boolean;
98
- /** Whether currently in async context */
99
- readonly isAsync: boolean;
100
- /** Whether currently emitting an array index (omit .0 from integer literals) */
101
- readonly isArrayIndex?: boolean;
102
- /** Current class name (for constructor emission) */
103
- readonly className?: string;
104
- /** Whether the current class has a superclass (for virtual/override) */
105
- readonly hasSuperClass?: boolean;
106
- /** Whether the module has any inheritance (to decide virtual methods) */
107
- readonly hasInheritance?: boolean;
108
- /** Loaded .NET metadata files (for CLR type information) */
109
- readonly metadata?: ReadonlyArray<MetadataFile>;
110
- /** Registry mapping TypeScript emit names to type bindings */
111
- readonly bindingsRegistry?: ReadonlyMap<string, TypeBinding>;
112
- /** Map of local names to import binding info (for qualifying imported identifiers) */
113
- readonly importBindings?: ReadonlyMap<string, ImportBinding>;
114
- /** Set of variable names known to be int (from canonical for-loop counters) */
115
- readonly intLoopVars?: ReadonlySet<string>;
116
- };
117
-
118
- /**
119
- * Result of emitting C# code
120
- */
121
- export type EmitResult = {
122
- /** The generated C# code */
123
- readonly code: string;
124
- /** Updated context after emission */
125
- readonly context: EmitterContext;
126
- };
127
-
128
- /**
129
- * Helper type for C# code fragments
130
- */
131
- export type CSharpFragment = {
132
- /** The code fragment */
133
- readonly text: string;
134
- /** Whether this needs parentheses when used in expressions */
135
- readonly needsParens?: boolean;
136
- /** Precedence level for operator expressions */
137
- readonly precedence?: number;
138
- };
@@ -1,42 +0,0 @@
1
- /**
2
- * C# language-specific types
3
- */
4
-
5
- /**
6
- * C# access modifiers
7
- */
8
- export type CSharpAccessModifier =
9
- | "public"
10
- | "private"
11
- | "protected"
12
- | "internal"
13
- | "protected internal";
14
-
15
- /**
16
- * C# class modifiers
17
- */
18
- export type CSharpClassModifier = "static" | "abstract" | "sealed" | "partial";
19
-
20
- /**
21
- * C# method modifiers
22
- */
23
- export type CSharpMethodModifier =
24
- | "static"
25
- | "virtual"
26
- | "override"
27
- | "abstract"
28
- | "async"
29
- | "new"
30
- | "sealed";
31
-
32
- /**
33
- * Represents a C# using statement
34
- */
35
- export type CSharpUsing = {
36
- /** The namespace to import */
37
- readonly namespace: string;
38
- /** Whether this is a static import */
39
- readonly isStatic?: boolean;
40
- /** Alias for the import */
41
- readonly alias?: string;
42
- };