@tsonic/emitter 0.0.1 → 0.0.2

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 (712) 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/async-investigation.test.d.ts +5 -0
  11. package/dist/async-investigation.test.d.ts.map +1 -0
  12. package/dist/async-investigation.test.js +239 -0
  13. package/dist/async-investigation.test.js.map +1 -0
  14. package/dist/constants.d.ts +15 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +22 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/core/exports.d.ts +10 -0
  19. package/dist/core/exports.d.ts.map +1 -0
  20. package/dist/core/exports.js +28 -0
  21. package/dist/core/exports.js.map +1 -0
  22. package/dist/core/imports.d.ts +26 -0
  23. package/dist/core/imports.d.ts.map +1 -0
  24. package/dist/core/imports.js +189 -0
  25. package/dist/core/imports.js.map +1 -0
  26. package/dist/core/imports.test.d.ts +6 -0
  27. package/dist/core/imports.test.d.ts.map +1 -0
  28. package/dist/core/imports.test.js +76 -0
  29. package/dist/core/imports.test.js.map +1 -0
  30. package/dist/core/index.d.ts +9 -0
  31. package/dist/core/index.d.ts.map +1 -0
  32. package/{src/core/index.ts → dist/core/index.js} +1 -1
  33. package/dist/core/index.js.map +1 -0
  34. package/dist/core/module-emitter/assembly.d.ts +21 -0
  35. package/dist/core/module-emitter/assembly.d.ts.map +1 -0
  36. package/dist/core/module-emitter/assembly.js +58 -0
  37. package/dist/core/module-emitter/assembly.js.map +1 -0
  38. package/dist/core/module-emitter/header.d.ts +10 -0
  39. package/dist/core/module-emitter/header.d.ts.map +1 -0
  40. package/dist/core/module-emitter/header.js +13 -0
  41. package/dist/core/module-emitter/header.js.map +1 -0
  42. package/{src/core/module-emitter/index.ts → dist/core/module-emitter/index.d.ts} +3 -10
  43. package/dist/core/module-emitter/index.d.ts.map +1 -0
  44. package/dist/core/module-emitter/index.js +10 -0
  45. package/dist/core/module-emitter/index.js.map +1 -0
  46. package/dist/core/module-emitter/namespace.d.ts +14 -0
  47. package/dist/core/module-emitter/namespace.d.ts.map +1 -0
  48. package/dist/core/module-emitter/namespace.js +26 -0
  49. package/dist/core/module-emitter/namespace.js.map +1 -0
  50. package/dist/core/module-emitter/orchestrator.d.ts +10 -0
  51. package/dist/core/module-emitter/orchestrator.d.ts.map +1 -0
  52. package/dist/core/module-emitter/orchestrator.js +58 -0
  53. package/dist/core/module-emitter/orchestrator.js.map +1 -0
  54. package/dist/core/module-emitter/separation.d.ts +14 -0
  55. package/dist/core/module-emitter/separation.d.ts.map +1 -0
  56. package/dist/core/module-emitter/separation.js +27 -0
  57. package/dist/core/module-emitter/separation.js.map +1 -0
  58. package/dist/core/module-emitter/static-container.d.ts +18 -0
  59. package/dist/core/module-emitter/static-container.d.ts.map +1 -0
  60. package/dist/core/module-emitter/static-container.js +49 -0
  61. package/dist/core/module-emitter/static-container.js.map +1 -0
  62. package/dist/core/module-emitter.d.ts +6 -0
  63. package/dist/core/module-emitter.d.ts.map +1 -0
  64. package/{src/core/module-emitter.ts → dist/core/module-emitter.js} +1 -1
  65. package/dist/core/module-emitter.js.map +1 -0
  66. package/dist/core/module-emitter.test.d.ts +6 -0
  67. package/dist/core/module-emitter.test.d.ts.map +1 -0
  68. package/dist/core/module-emitter.test.js +147 -0
  69. package/dist/core/module-emitter.test.js.map +1 -0
  70. package/dist/core/module-map.d.ts +35 -0
  71. package/dist/core/module-map.d.ts.map +1 -0
  72. package/dist/core/module-map.js +170 -0
  73. package/dist/core/module-map.js.map +1 -0
  74. package/dist/core/options.d.ts +9 -0
  75. package/dist/core/options.d.ts.map +1 -0
  76. package/dist/core/options.js +14 -0
  77. package/dist/core/options.js.map +1 -0
  78. package/dist/core/type-params.d.ts +9 -0
  79. package/dist/core/type-params.d.ts.map +1 -0
  80. package/dist/core/type-params.js +31 -0
  81. package/dist/core/type-params.js.map +1 -0
  82. package/dist/emitter-types/context.d.ts +29 -0
  83. package/dist/emitter-types/context.d.ts.map +1 -0
  84. package/dist/emitter-types/context.js +68 -0
  85. package/dist/emitter-types/context.js.map +1 -0
  86. package/dist/emitter-types/core.d.ts +129 -0
  87. package/dist/emitter-types/core.d.ts.map +1 -0
  88. package/dist/emitter-types/core.js +5 -0
  89. package/dist/emitter-types/core.js.map +1 -0
  90. package/dist/emitter-types/csharp-types.d.ts +27 -0
  91. package/dist/emitter-types/csharp-types.d.ts.map +1 -0
  92. package/dist/emitter-types/csharp-types.js +5 -0
  93. package/dist/emitter-types/csharp-types.js.map +1 -0
  94. package/dist/emitter-types/formatting.d.ts +9 -0
  95. package/dist/emitter-types/formatting.d.ts.map +1 -0
  96. package/dist/emitter-types/formatting.js +11 -0
  97. package/dist/emitter-types/formatting.js.map +1 -0
  98. package/dist/emitter-types/fqn.d.ts +53 -0
  99. package/dist/emitter-types/fqn.d.ts.map +1 -0
  100. package/dist/emitter-types/fqn.js +65 -0
  101. package/dist/emitter-types/fqn.js.map +1 -0
  102. package/dist/emitter-types/index.d.ts +9 -0
  103. package/dist/emitter-types/index.d.ts.map +1 -0
  104. package/dist/emitter-types/index.js +7 -0
  105. package/dist/emitter-types/index.js.map +1 -0
  106. package/dist/emitter.d.ts +27 -0
  107. package/dist/emitter.d.ts.map +1 -0
  108. package/dist/emitter.js +80 -0
  109. package/dist/emitter.js.map +1 -0
  110. package/dist/expression-emitter.d.ts +15 -0
  111. package/dist/expression-emitter.d.ts.map +1 -0
  112. package/dist/expression-emitter.js +67 -0
  113. package/dist/expression-emitter.js.map +1 -0
  114. package/dist/expressions/access.d.ts +12 -0
  115. package/dist/expressions/access.d.ts.map +1 -0
  116. package/dist/expressions/access.js +77 -0
  117. package/dist/expressions/access.js.map +1 -0
  118. package/dist/expressions/calls.d.ts +18 -0
  119. package/dist/expressions/calls.d.ts.map +1 -0
  120. package/dist/expressions/calls.js +207 -0
  121. package/dist/expressions/calls.js.map +1 -0
  122. package/dist/expressions/collections.d.ts +24 -0
  123. package/dist/expressions/collections.d.ts.map +1 -0
  124. package/dist/expressions/collections.js +254 -0
  125. package/dist/expressions/collections.js.map +1 -0
  126. package/dist/expressions/functions.d.ts +18 -0
  127. package/dist/expressions/functions.d.ts.map +1 -0
  128. package/dist/expressions/functions.js +60 -0
  129. package/dist/expressions/functions.js.map +1 -0
  130. package/dist/expressions/identifiers.d.ts +22 -0
  131. package/dist/expressions/identifiers.d.ts.map +1 -0
  132. package/dist/expressions/identifiers.js +99 -0
  133. package/dist/expressions/identifiers.js.map +1 -0
  134. package/dist/expressions/index.d.ts +12 -0
  135. package/dist/expressions/index.d.ts.map +1 -0
  136. package/{src/expressions/index.ts → dist/expressions/index.js} +3 -21
  137. package/dist/expressions/index.js.map +1 -0
  138. package/dist/expressions/index.test.d.ts +6 -0
  139. package/dist/expressions/index.test.d.ts.map +1 -0
  140. package/dist/expressions/index.test.js +480 -0
  141. package/dist/expressions/index.test.js.map +1 -0
  142. package/dist/expressions/literals.d.ts +31 -0
  143. package/dist/expressions/literals.d.ts.map +1 -0
  144. package/dist/expressions/literals.js +116 -0
  145. package/dist/expressions/literals.js.map +1 -0
  146. package/dist/expressions/operators.d.ts +52 -0
  147. package/dist/expressions/operators.d.ts.map +1 -0
  148. package/dist/expressions/operators.js +166 -0
  149. package/dist/expressions/operators.js.map +1 -0
  150. package/dist/expressions/other.d.ts +24 -0
  151. package/dist/expressions/other.d.ts.map +1 -0
  152. package/dist/expressions/other.js +43 -0
  153. package/dist/expressions/other.js.map +1 -0
  154. package/dist/generator-exchange.d.ts +11 -0
  155. package/dist/generator-exchange.d.ts.map +1 -0
  156. package/dist/generator-exchange.js +92 -0
  157. package/dist/generator-exchange.js.map +1 -0
  158. package/dist/generator.test.d.ts +6 -0
  159. package/dist/generator.test.d.ts.map +1 -0
  160. package/dist/generator.test.js +177 -0
  161. package/dist/generator.test.js.map +1 -0
  162. package/dist/golden-tests/config-parser.d.ts +9 -0
  163. package/dist/golden-tests/config-parser.d.ts.map +1 -0
  164. package/dist/golden-tests/config-parser.js +57 -0
  165. package/dist/golden-tests/config-parser.js.map +1 -0
  166. package/dist/golden-tests/discovery.d.ts +9 -0
  167. package/dist/golden-tests/discovery.d.ts.map +1 -0
  168. package/dist/golden-tests/discovery.js +51 -0
  169. package/dist/golden-tests/discovery.js.map +1 -0
  170. package/{src/golden-tests/index.ts → dist/golden-tests/index.d.ts} +1 -1
  171. package/dist/golden-tests/index.d.ts.map +1 -0
  172. package/dist/golden-tests/index.js +9 -0
  173. package/dist/golden-tests/index.js.map +1 -0
  174. package/dist/golden-tests/registration.d.ts +9 -0
  175. package/dist/golden-tests/registration.d.ts.map +1 -0
  176. package/dist/golden-tests/registration.js +23 -0
  177. package/dist/golden-tests/registration.js.map +1 -0
  178. package/dist/golden-tests/runner.d.ts +13 -0
  179. package/dist/golden-tests/runner.d.ts.map +1 -0
  180. package/dist/golden-tests/runner.js +99 -0
  181. package/dist/golden-tests/runner.js.map +1 -0
  182. package/dist/golden-tests/tree-builder.d.ts +9 -0
  183. package/dist/golden-tests/tree-builder.d.ts.map +1 -0
  184. package/dist/golden-tests/tree-builder.js +35 -0
  185. package/dist/golden-tests/tree-builder.js.map +1 -0
  186. package/dist/golden-tests/types.d.ts +19 -0
  187. package/dist/golden-tests/types.d.ts.map +1 -0
  188. package/dist/golden-tests/types.js +5 -0
  189. package/dist/golden-tests/types.js.map +1 -0
  190. package/dist/golden.test.d.ts +11 -0
  191. package/dist/golden.test.d.ts.map +1 -0
  192. package/{src/golden.test.ts → dist/golden.test.js} +15 -20
  193. package/dist/golden.test.js.map +1 -0
  194. package/dist/hierarchical-bindings.test.d.ts +6 -0
  195. package/dist/hierarchical-bindings.test.d.ts.map +1 -0
  196. package/dist/hierarchical-bindings.test.js +194 -0
  197. package/dist/hierarchical-bindings.test.js.map +1 -0
  198. package/dist/index.d.ts +9 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/{src/index.ts → dist/index.js} +2 -7
  201. package/dist/index.js.map +1 -0
  202. package/dist/integration.test.d.ts +6 -0
  203. package/dist/integration.test.d.ts.map +1 -0
  204. package/dist/integration.test.js +234 -0
  205. package/dist/integration.test.js.map +1 -0
  206. package/dist/specialization/call-site-rewriting.test.d.ts +6 -0
  207. package/dist/specialization/call-site-rewriting.test.d.ts.map +1 -0
  208. package/dist/specialization/call-site-rewriting.test.js +92 -0
  209. package/dist/specialization/call-site-rewriting.test.js.map +1 -0
  210. package/dist/specialization/collection/expressions.d.ts +10 -0
  211. package/dist/specialization/collection/expressions.d.ts.map +1 -0
  212. package/dist/specialization/collection/expressions.js +142 -0
  213. package/dist/specialization/collection/expressions.js.map +1 -0
  214. package/dist/specialization/collection/index.d.ts +7 -0
  215. package/dist/specialization/collection/index.d.ts.map +1 -0
  216. package/{src/specialization/collection/index.ts → dist/specialization/collection/index.js} +1 -1
  217. package/dist/specialization/collection/index.js.map +1 -0
  218. package/dist/specialization/collection/orchestrator.d.ts +11 -0
  219. package/dist/specialization/collection/orchestrator.d.ts.map +1 -0
  220. package/dist/specialization/collection/orchestrator.js +18 -0
  221. package/dist/specialization/collection/orchestrator.js.map +1 -0
  222. package/dist/specialization/collection/statements.d.ts +10 -0
  223. package/dist/specialization/collection/statements.d.ts.map +1 -0
  224. package/dist/specialization/collection/statements.js +75 -0
  225. package/dist/specialization/collection/statements.js.map +1 -0
  226. package/dist/specialization/collection.d.ts +6 -0
  227. package/dist/specialization/collection.d.ts.map +1 -0
  228. package/dist/specialization/collection.js +6 -0
  229. package/dist/specialization/collection.js.map +1 -0
  230. package/dist/specialization/generation.d.ts +11 -0
  231. package/dist/specialization/generation.d.ts.map +1 -0
  232. package/dist/specialization/generation.js +137 -0
  233. package/dist/specialization/generation.js.map +1 -0
  234. package/dist/specialization/generic-classes.test.d.ts +6 -0
  235. package/dist/specialization/generic-classes.test.d.ts.map +1 -0
  236. package/dist/specialization/generic-classes.test.js +55 -0
  237. package/dist/specialization/generic-classes.test.js.map +1 -0
  238. package/dist/specialization/generic-functions.test.d.ts +6 -0
  239. package/dist/specialization/generic-functions.test.d.ts.map +1 -0
  240. package/dist/specialization/generic-functions.test.js +275 -0
  241. package/dist/specialization/generic-functions.test.js.map +1 -0
  242. package/dist/specialization/helpers.d.ts +13 -0
  243. package/dist/specialization/helpers.d.ts.map +1 -0
  244. package/dist/specialization/helpers.js +33 -0
  245. package/dist/specialization/helpers.js.map +1 -0
  246. package/dist/specialization/index.d.ts +10 -0
  247. package/dist/specialization/index.d.ts.map +1 -0
  248. package/{src/specialization/index.ts → dist/specialization/index.js} +3 -17
  249. package/dist/specialization/index.js.map +1 -0
  250. package/dist/specialization/interfaces.test.d.ts +6 -0
  251. package/dist/specialization/interfaces.test.d.ts.map +1 -0
  252. package/dist/specialization/interfaces.test.js +139 -0
  253. package/dist/specialization/interfaces.test.js.map +1 -0
  254. package/dist/specialization/naming.d.ts +13 -0
  255. package/dist/specialization/naming.d.ts.map +1 -0
  256. package/dist/specialization/naming.js +25 -0
  257. package/dist/specialization/naming.js.map +1 -0
  258. package/dist/specialization/substitution.d.ts +17 -0
  259. package/dist/specialization/substitution.d.ts.map +1 -0
  260. package/dist/specialization/substitution.js +150 -0
  261. package/dist/specialization/substitution.js.map +1 -0
  262. package/dist/specialization/type-aliases.test.d.ts +6 -0
  263. package/dist/specialization/type-aliases.test.d.ts.map +1 -0
  264. package/dist/specialization/type-aliases.test.js +124 -0
  265. package/dist/specialization/type-aliases.test.js.map +1 -0
  266. package/dist/specialization/types.d.ts +14 -0
  267. package/dist/specialization/types.d.ts.map +1 -0
  268. package/dist/specialization/types.js +5 -0
  269. package/dist/specialization/types.js.map +1 -0
  270. package/{src/specialization-generator.ts → dist/specialization-generator.d.ts} +4 -15
  271. package/dist/specialization-generator.d.ts.map +1 -0
  272. package/dist/specialization-generator.js +11 -0
  273. package/dist/specialization-generator.js.map +1 -0
  274. package/dist/statement-emitter.d.ts +13 -0
  275. package/dist/statement-emitter.d.ts.map +1 -0
  276. package/dist/statement-emitter.js +67 -0
  277. package/dist/statement-emitter.js.map +1 -0
  278. package/dist/statements/blocks.d.ts +40 -0
  279. package/dist/statements/blocks.d.ts.map +1 -0
  280. package/dist/statements/blocks.js +86 -0
  281. package/dist/statements/blocks.js.map +1 -0
  282. package/{src/statements/classes/helpers.ts → dist/statements/classes/helpers.d.ts} +2 -3
  283. package/dist/statements/classes/helpers.d.ts.map +1 -0
  284. package/dist/statements/classes/helpers.js +8 -0
  285. package/dist/statements/classes/helpers.js.map +1 -0
  286. package/dist/statements/classes/index.d.ts +9 -0
  287. package/dist/statements/classes/index.d.ts.map +1 -0
  288. package/{src/statements/classes/index.ts → dist/statements/classes/index.js} +2 -6
  289. package/dist/statements/classes/index.js.map +1 -0
  290. package/dist/statements/classes/inline-types.d.ts +21 -0
  291. package/dist/statements/classes/inline-types.d.ts.map +1 -0
  292. package/dist/statements/classes/inline-types.js +50 -0
  293. package/dist/statements/classes/inline-types.js.map +1 -0
  294. package/dist/statements/classes/members/constructors.d.ts +12 -0
  295. package/dist/statements/classes/members/constructors.d.ts.map +1 -0
  296. package/dist/statements/classes/members/constructors.js +90 -0
  297. package/dist/statements/classes/members/constructors.js.map +1 -0
  298. package/dist/statements/classes/members/index.d.ts +8 -0
  299. package/dist/statements/classes/members/index.d.ts.map +1 -0
  300. package/{src/statements/classes/members/index.ts → dist/statements/classes/members/index.js} +1 -1
  301. package/dist/statements/classes/members/index.js.map +1 -0
  302. package/dist/statements/classes/members/methods.d.ts +12 -0
  303. package/dist/statements/classes/members/methods.d.ts.map +1 -0
  304. package/dist/statements/classes/members/methods.js +100 -0
  305. package/dist/statements/classes/members/methods.js.map +1 -0
  306. package/dist/statements/classes/members/orchestrator.d.ts +10 -0
  307. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -0
  308. package/dist/statements/classes/members/orchestrator.js +24 -0
  309. package/dist/statements/classes/members/orchestrator.js.map +1 -0
  310. package/dist/statements/classes/members/properties.d.ts +12 -0
  311. package/dist/statements/classes/members/properties.d.ts.map +1 -0
  312. package/dist/statements/classes/members/properties.js +48 -0
  313. package/dist/statements/classes/members/properties.js.map +1 -0
  314. package/dist/statements/classes/members.d.ts +6 -0
  315. package/dist/statements/classes/members.d.ts.map +1 -0
  316. package/{src/statements/classes/members.ts → dist/statements/classes/members.js} +1 -1
  317. package/dist/statements/classes/members.js.map +1 -0
  318. package/dist/statements/classes/parameters.d.ts +10 -0
  319. package/dist/statements/classes/parameters.d.ts.map +1 -0
  320. package/dist/statements/classes/parameters.js +50 -0
  321. package/dist/statements/classes/parameters.js.map +1 -0
  322. package/dist/statements/classes/properties.d.ts +11 -0
  323. package/dist/statements/classes/properties.d.ts.map +1 -0
  324. package/dist/statements/classes/properties.js +74 -0
  325. package/dist/statements/classes/properties.js.map +1 -0
  326. package/dist/statements/classes.d.ts +6 -0
  327. package/dist/statements/classes.d.ts.map +1 -0
  328. package/dist/statements/classes.js +6 -0
  329. package/dist/statements/classes.js.map +1 -0
  330. package/dist/statements/control/conditionals.d.ts +18 -0
  331. package/dist/statements/control/conditionals.d.ts.map +1 -0
  332. package/dist/statements/control/conditionals.js +98 -0
  333. package/dist/statements/control/conditionals.js.map +1 -0
  334. package/dist/statements/control/exceptions.d.ts +18 -0
  335. package/dist/statements/control/exceptions.d.ts.map +1 -0
  336. package/dist/statements/control/exceptions.js +38 -0
  337. package/dist/statements/control/exceptions.js.map +1 -0
  338. package/dist/statements/control/index.d.ts +7 -0
  339. package/dist/statements/control/index.d.ts.map +1 -0
  340. package/{src/statements/control/index.ts → dist/statements/control/index.js} +2 -6
  341. package/dist/statements/control/index.js.map +1 -0
  342. package/dist/statements/control/loops.d.ts +29 -0
  343. package/dist/statements/control/loops.d.ts.map +1 -0
  344. package/dist/statements/control/loops.js +186 -0
  345. package/dist/statements/control/loops.js.map +1 -0
  346. package/dist/statements/control.d.ts +6 -0
  347. package/dist/statements/control.d.ts.map +1 -0
  348. package/dist/statements/control.js +6 -0
  349. package/dist/statements/control.js.map +1 -0
  350. package/dist/statements/declarations/classes.d.ts +12 -0
  351. package/dist/statements/declarations/classes.d.ts.map +1 -0
  352. package/dist/statements/declarations/classes.js +61 -0
  353. package/dist/statements/declarations/classes.js.map +1 -0
  354. package/dist/statements/declarations/enums.d.ts +12 -0
  355. package/dist/statements/declarations/enums.d.ts.map +1 -0
  356. package/dist/statements/declarations/enums.js +25 -0
  357. package/dist/statements/declarations/enums.js.map +1 -0
  358. package/dist/statements/declarations/functions.d.ts +12 -0
  359. package/dist/statements/declarations/functions.d.ts.map +1 -0
  360. package/dist/statements/declarations/functions.js +110 -0
  361. package/dist/statements/declarations/functions.js.map +1 -0
  362. package/dist/statements/declarations/index.d.ts +10 -0
  363. package/dist/statements/declarations/index.d.ts.map +1 -0
  364. package/{src/statements/declarations/index.ts → dist/statements/declarations/index.js} +1 -1
  365. package/dist/statements/declarations/index.js.map +1 -0
  366. package/dist/statements/declarations/interfaces.d.ts +12 -0
  367. package/dist/statements/declarations/interfaces.d.ts.map +1 -0
  368. package/dist/statements/declarations/interfaces.js +85 -0
  369. package/dist/statements/declarations/interfaces.js.map +1 -0
  370. package/dist/statements/declarations/structs.test.d.ts +5 -0
  371. package/dist/statements/declarations/structs.test.d.ts.map +1 -0
  372. package/dist/statements/declarations/structs.test.js +165 -0
  373. package/dist/statements/declarations/structs.test.js.map +1 -0
  374. package/dist/statements/declarations/type-aliases.d.ts +12 -0
  375. package/dist/statements/declarations/type-aliases.d.ts.map +1 -0
  376. package/dist/statements/declarations/type-aliases.js +80 -0
  377. package/dist/statements/declarations/type-aliases.js.map +1 -0
  378. package/dist/statements/declarations/variables.d.ts +12 -0
  379. package/dist/statements/declarations/variables.d.ts.map +1 -0
  380. package/dist/statements/declarations/variables.js +120 -0
  381. package/dist/statements/declarations/variables.js.map +1 -0
  382. package/dist/statements/declarations.d.ts +6 -0
  383. package/dist/statements/declarations.d.ts.map +1 -0
  384. package/dist/statements/declarations.js +6 -0
  385. package/dist/statements/declarations.js.map +1 -0
  386. package/dist/statements/index.d.ts +8 -0
  387. package/dist/statements/index.d.ts.map +1 -0
  388. package/dist/statements/index.js +12 -0
  389. package/dist/statements/index.js.map +1 -0
  390. package/dist/statements/index.test.d.ts +6 -0
  391. package/dist/statements/index.test.d.ts.map +1 -0
  392. package/dist/statements/index.test.js +248 -0
  393. package/dist/statements/index.test.js.map +1 -0
  394. package/dist/tests/emitter/expression-emission.test.d.ts +6 -0
  395. package/dist/tests/emitter/expression-emission.test.d.ts.map +1 -0
  396. package/dist/tests/emitter/expression-emission.test.js +322 -0
  397. package/dist/tests/emitter/expression-emission.test.js.map +1 -0
  398. package/dist/tests/emitter/import-handling.test.d.ts +6 -0
  399. package/dist/tests/emitter/import-handling.test.d.ts.map +1 -0
  400. package/dist/tests/emitter/import-handling.test.js +76 -0
  401. package/dist/tests/emitter/import-handling.test.js.map +1 -0
  402. package/dist/tests/emitter/module-generation.test.d.ts +6 -0
  403. package/dist/tests/emitter/module-generation.test.d.ts.map +1 -0
  404. package/dist/tests/emitter/module-generation.test.js +147 -0
  405. package/dist/tests/emitter/module-generation.test.js.map +1 -0
  406. package/dist/tests/emitter/statement-emission.test.d.ts +6 -0
  407. package/dist/tests/emitter/statement-emission.test.d.ts.map +1 -0
  408. package/dist/tests/emitter/statement-emission.test.js +138 -0
  409. package/dist/tests/emitter/statement-emission.test.js.map +1 -0
  410. package/dist/tests/emitter/type-emission.test.d.ts +6 -0
  411. package/dist/tests/emitter/type-emission.test.d.ts.map +1 -0
  412. package/dist/tests/emitter/type-emission.test.js +109 -0
  413. package/dist/tests/emitter/type-emission.test.js.map +1 -0
  414. package/dist/tests/generics/call-site-rewriting.test.d.ts +6 -0
  415. package/dist/tests/generics/call-site-rewriting.test.d.ts.map +1 -0
  416. package/dist/tests/generics/call-site-rewriting.test.js +92 -0
  417. package/dist/tests/generics/call-site-rewriting.test.js.map +1 -0
  418. package/dist/tests/generics/generic-classes.test.d.ts +6 -0
  419. package/dist/tests/generics/generic-classes.test.d.ts.map +1 -0
  420. package/dist/tests/generics/generic-classes.test.js +55 -0
  421. package/dist/tests/generics/generic-classes.test.js.map +1 -0
  422. package/dist/tests/generics/generic-functions.test.d.ts +6 -0
  423. package/dist/tests/generics/generic-functions.test.d.ts.map +1 -0
  424. package/dist/tests/generics/generic-functions.test.js +275 -0
  425. package/dist/tests/generics/generic-functions.test.js.map +1 -0
  426. package/dist/tests/generics/interfaces.test.d.ts +6 -0
  427. package/dist/tests/generics/interfaces.test.d.ts.map +1 -0
  428. package/dist/tests/generics/interfaces.test.js +139 -0
  429. package/dist/tests/generics/interfaces.test.js.map +1 -0
  430. package/dist/tests/generics/type-aliases.test.d.ts +6 -0
  431. package/dist/tests/generics/type-aliases.test.d.ts.map +1 -0
  432. package/dist/tests/generics/type-aliases.test.js +124 -0
  433. package/dist/tests/generics/type-aliases.test.js.map +1 -0
  434. package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts +6 -0
  435. package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts.map +1 -0
  436. package/dist/tests/hierarchical-bindings-full-pipeline.test.js +202 -0
  437. package/dist/tests/hierarchical-bindings-full-pipeline.test.js.map +1 -0
  438. package/dist/tests/ref-out-parameters.test.d.ts +5 -0
  439. package/dist/tests/ref-out-parameters.test.d.ts.map +1 -0
  440. package/dist/tests/ref-out-parameters.test.js +136 -0
  441. package/dist/tests/ref-out-parameters.test.js.map +1 -0
  442. package/dist/tests/structs/struct-emission.test.d.ts +5 -0
  443. package/dist/tests/structs/struct-emission.test.d.ts.map +1 -0
  444. package/dist/tests/structs/struct-emission.test.js +165 -0
  445. package/dist/tests/structs/struct-emission.test.js.map +1 -0
  446. package/dist/type-assertion.test.d.ts +6 -0
  447. package/dist/type-assertion.test.d.ts.map +1 -0
  448. package/dist/type-assertion.test.js +133 -0
  449. package/dist/type-assertion.test.js.map +1 -0
  450. package/dist/type-emitter.d.ts +6 -0
  451. package/dist/type-emitter.d.ts.map +1 -0
  452. package/dist/type-emitter.js +6 -0
  453. package/dist/type-emitter.js.map +1 -0
  454. package/dist/types/arrays.d.ts +12 -0
  455. package/dist/types/arrays.d.ts.map +1 -0
  456. package/dist/types/arrays.js +15 -0
  457. package/dist/types/arrays.js.map +1 -0
  458. package/dist/types/dictionaries.d.ts +17 -0
  459. package/dist/types/dictionaries.d.ts.map +1 -0
  460. package/dist/types/dictionaries.js +37 -0
  461. package/dist/types/dictionaries.js.map +1 -0
  462. package/dist/types/emitter.d.ts +10 -0
  463. package/dist/types/emitter.d.ts.map +1 -0
  464. package/dist/types/emitter.js +53 -0
  465. package/dist/types/emitter.js.map +1 -0
  466. package/dist/types/functions.d.ts +12 -0
  467. package/dist/types/functions.d.ts.map +1 -0
  468. package/dist/types/functions.js +34 -0
  469. package/dist/types/functions.js.map +1 -0
  470. package/dist/types/index.d.ts +14 -0
  471. package/dist/types/index.d.ts.map +1 -0
  472. package/{src/types/index.ts → dist/types/index.js} +1 -1
  473. package/dist/types/index.js.map +1 -0
  474. package/dist/types/index.test.d.ts +6 -0
  475. package/dist/types/index.test.d.ts.map +1 -0
  476. package/dist/types/index.test.js +109 -0
  477. package/dist/types/index.test.js.map +1 -0
  478. package/dist/types/intersections.d.ts +12 -0
  479. package/dist/types/intersections.d.ts.map +1 -0
  480. package/dist/types/intersections.js +13 -0
  481. package/dist/types/intersections.js.map +1 -0
  482. package/dist/types/literals.d.ts +12 -0
  483. package/dist/types/literals.d.ts.map +1 -0
  484. package/dist/types/literals.js +20 -0
  485. package/dist/types/literals.js.map +1 -0
  486. package/{src/types/objects.ts → dist/types/objects.d.ts} +4 -11
  487. package/dist/types/objects.d.ts.map +1 -0
  488. package/dist/types/objects.js +19 -0
  489. package/dist/types/objects.js.map +1 -0
  490. package/dist/types/parameters.d.ts +15 -0
  491. package/dist/types/parameters.d.ts.map +1 -0
  492. package/dist/types/parameters.js +69 -0
  493. package/dist/types/parameters.js.map +1 -0
  494. package/dist/types/parameters.test.d.ts +5 -0
  495. package/dist/types/parameters.test.d.ts.map +1 -0
  496. package/dist/types/parameters.test.js +135 -0
  497. package/dist/types/parameters.test.js.map +1 -0
  498. package/dist/types/primitives.d.ts +12 -0
  499. package/dist/types/primitives.d.ts.map +1 -0
  500. package/dist/types/primitives.js +17 -0
  501. package/dist/types/primitives.js.map +1 -0
  502. package/dist/types/references.d.ts +14 -0
  503. package/dist/types/references.d.ts.map +1 -0
  504. package/dist/types/references.js +154 -0
  505. package/dist/types/references.js.map +1 -0
  506. package/dist/types/unions.d.ts +12 -0
  507. package/dist/types/unions.d.ts.map +1 -0
  508. package/dist/types/unions.js +45 -0
  509. package/dist/types/unions.js.map +1 -0
  510. package/dist/types/unions.test.d.ts +6 -0
  511. package/dist/types/unions.test.d.ts.map +1 -0
  512. package/dist/types/unions.test.js +367 -0
  513. package/dist/types/unions.test.js.map +1 -0
  514. package/dist/types.d.ts +7 -0
  515. package/dist/types.d.ts.map +1 -0
  516. package/dist/types.js +6 -0
  517. package/dist/types.js.map +1 -0
  518. package/dist/union.test.d.ts +6 -0
  519. package/dist/union.test.d.ts.map +1 -0
  520. package/dist/union.test.js +367 -0
  521. package/dist/union.test.js.map +1 -0
  522. package/package.json +5 -2
  523. package/scripts/update-golden-tests.ts +0 -119
  524. package/src/adapter-generator.ts +0 -112
  525. package/src/array.test.ts +0 -301
  526. package/src/constants.ts +0 -32
  527. package/src/core/exports.ts +0 -36
  528. package/src/core/imports.test.ts +0 -83
  529. package/src/core/imports.ts +0 -243
  530. package/src/core/module-emitter/assembly.ts +0 -83
  531. package/src/core/module-emitter/header.ts +0 -19
  532. package/src/core/module-emitter/namespace.ts +0 -39
  533. package/src/core/module-emitter/orchestrator.ts +0 -98
  534. package/src/core/module-emitter/separation.ts +0 -41
  535. package/src/core/module-emitter/static-container.ts +0 -75
  536. package/src/core/module-emitter.test.ts +0 -154
  537. package/src/core/module-map.ts +0 -218
  538. package/src/core/options.ts +0 -16
  539. package/src/core/type-params.ts +0 -34
  540. package/src/emitter-types/context.ts +0 -91
  541. package/src/emitter-types/core.ts +0 -138
  542. package/src/emitter-types/csharp-types.ts +0 -42
  543. package/src/emitter-types/formatting.ts +0 -13
  544. package/src/emitter-types/fqn.ts +0 -81
  545. package/src/emitter-types/index.ts +0 -31
  546. package/src/emitter.ts +0 -107
  547. package/src/expression-emitter.ts +0 -112
  548. package/src/expressions/access.ts +0 -104
  549. package/src/expressions/calls.ts +0 -264
  550. package/src/expressions/collections.ts +0 -354
  551. package/src/expressions/functions.ts +0 -71
  552. package/src/expressions/identifiers.ts +0 -125
  553. package/src/expressions/index.test.ts +0 -515
  554. package/src/expressions/literals.ts +0 -138
  555. package/src/expressions/operators.ts +0 -211
  556. package/src/expressions/other.ts +0 -63
  557. package/src/generator-exchange.ts +0 -120
  558. package/src/generator.test.ts +0 -193
  559. package/src/golden-tests/config-parser.ts +0 -67
  560. package/src/golden-tests/discovery.ts +0 -61
  561. package/src/golden-tests/registration.ts +0 -26
  562. package/src/golden-tests/runner.ts +0 -131
  563. package/src/golden-tests/tree-builder.ts +0 -43
  564. package/src/golden-tests/types.ts +0 -21
  565. package/src/hierarchical-bindings.test.ts +0 -258
  566. package/src/integration.test.ts +0 -303
  567. package/src/specialization/call-site-rewriting.test.ts +0 -99
  568. package/src/specialization/collection/expressions.ts +0 -184
  569. package/src/specialization/collection/orchestrator.ts +0 -25
  570. package/src/specialization/collection/statements.ts +0 -91
  571. package/src/specialization/collection.ts +0 -10
  572. package/src/specialization/generation.ts +0 -189
  573. package/src/specialization/generic-classes.test.ts +0 -59
  574. package/src/specialization/generic-functions.test.ts +0 -292
  575. package/src/specialization/helpers.ts +0 -39
  576. package/src/specialization/interfaces.test.ts +0 -151
  577. package/src/specialization/naming.ts +0 -34
  578. package/src/specialization/substitution.ts +0 -186
  579. package/src/specialization/type-aliases.test.ts +0 -134
  580. package/src/specialization/types.ts +0 -19
  581. package/src/statement-emitter.ts +0 -117
  582. package/src/statements/blocks.ts +0 -115
  583. package/src/statements/classes/inline-types.ts +0 -79
  584. package/src/statements/classes/members/constructors.ts +0 -123
  585. package/src/statements/classes/members/methods.ts +0 -137
  586. package/src/statements/classes/members/orchestrator.ts +0 -33
  587. package/src/statements/classes/members/properties.ts +0 -62
  588. package/src/statements/classes/parameters.ts +0 -69
  589. package/src/statements/classes/properties.ts +0 -95
  590. package/src/statements/classes.ts +0 -14
  591. package/src/statements/control/conditionals.ts +0 -134
  592. package/src/statements/control/exceptions.ts +0 -59
  593. package/src/statements/control/loops.ts +0 -250
  594. package/src/statements/control.ts +0 -14
  595. package/src/statements/declarations/classes.ts +0 -89
  596. package/src/statements/declarations/enums.ts +0 -32
  597. package/src/statements/declarations/functions.ts +0 -147
  598. package/src/statements/declarations/interfaces.ts +0 -116
  599. package/src/statements/declarations/structs.test.ts +0 -182
  600. package/src/statements/declarations/type-aliases.ts +0 -104
  601. package/src/statements/declarations/variables.ts +0 -159
  602. package/src/statements/declarations.ts +0 -13
  603. package/src/statements/index.test.ts +0 -258
  604. package/src/statements/index.ts +0 -43
  605. package/src/type-assertion.test.ts +0 -143
  606. package/src/type-emitter.ts +0 -18
  607. package/src/types/arrays.ts +0 -21
  608. package/src/types/dictionaries.ts +0 -52
  609. package/src/types/emitter.ts +0 -76
  610. package/src/types/functions.ts +0 -45
  611. package/src/types/index.test.ts +0 -116
  612. package/src/types/intersections.ts +0 -19
  613. package/src/types/literals.ts +0 -26
  614. package/src/types/parameters.test.ts +0 -146
  615. package/src/types/parameters.ts +0 -95
  616. package/src/types/primitives.ts +0 -24
  617. package/src/types/references.ts +0 -187
  618. package/src/types/unions.test.ts +0 -397
  619. package/src/types/unions.ts +0 -62
  620. package/src/types.ts +0 -33
  621. package/testcases/README.md +0 -213
  622. package/testcases/arrays/basic/ArrayLiteral.ts +0 -4
  623. package/testcases/arrays/basic/config.yaml +0 -1
  624. package/testcases/arrays/destructuring/ArrayDestructure.ts +0 -4
  625. package/testcases/arrays/destructuring/config.yaml +0 -1
  626. package/testcases/arrays/methods/ArrayMethods.ts +0 -6
  627. package/testcases/arrays/methods/config.yaml +0 -1
  628. package/testcases/arrays/multidimensional/MultiDimensional.ts +0 -10
  629. package/testcases/arrays/multidimensional/config.yaml +0 -1
  630. package/testcases/arrays/spread/ArraySpread.ts +0 -3
  631. package/testcases/arrays/spread/config.yaml +0 -1
  632. package/testcases/async/basic/AsyncFunction.ts +0 -5
  633. package/testcases/async/basic/config.yaml +0 -1
  634. package/testcases/classes/abstract/AbstractClasses.ts +0 -53
  635. package/testcases/classes/abstract/config.yaml +0 -1
  636. package/testcases/classes/basic/Person.ts +0 -12
  637. package/testcases/classes/basic/config.yaml +0 -1
  638. package/testcases/classes/constructor/User.ts +0 -11
  639. package/testcases/classes/constructor/config.yaml +0 -1
  640. package/testcases/classes/field-inference/Counter.ts +0 -11
  641. package/testcases/classes/field-inference/config.yaml +0 -1
  642. package/testcases/classes/inheritance/Inheritance.ts +0 -24
  643. package/testcases/classes/inheritance/config.yaml +0 -1
  644. package/testcases/classes/static-members/MathHelper.ts +0 -12
  645. package/testcases/classes/static-members/config.yaml +0 -1
  646. package/testcases/control-flow/error-handling/ErrorHandling.ts +0 -13
  647. package/testcases/control-flow/error-handling/config.yaml +0 -1
  648. package/testcases/control-flow/loops/Loops.ts +0 -21
  649. package/testcases/control-flow/loops/config.yaml +0 -1
  650. package/testcases/control-flow/switch/SwitchStatement.ts +0 -15
  651. package/testcases/control-flow/switch/config.yaml +0 -1
  652. package/testcases/edge-cases/complex-expressions/ComplexExpressions.ts +0 -10
  653. package/testcases/edge-cases/complex-expressions/config.yaml +0 -1
  654. package/testcases/edge-cases/nested-scopes/NestedScopes.ts +0 -10
  655. package/testcases/edge-cases/nested-scopes/config.yaml +0 -1
  656. package/testcases/edge-cases/shadowing/Shadowing.ts +0 -16
  657. package/testcases/edge-cases/shadowing/config.yaml +0 -1
  658. package/testcases/functions/arrow/ArrowFunction.ts +0 -5
  659. package/testcases/functions/arrow/config.yaml +0 -1
  660. package/testcases/functions/basic/Greet.ts +0 -3
  661. package/testcases/functions/basic/config.yaml +0 -1
  662. package/testcases/functions/closures/Closures.ts +0 -11
  663. package/testcases/functions/closures/config.yaml +0 -1
  664. package/testcases/functions/default-params/DefaultParams.ts +0 -7
  665. package/testcases/functions/default-params/config.yaml +0 -1
  666. package/testcases/functions/rest-params/RestParams.ts +0 -7
  667. package/testcases/functions/rest-params/config.yaml +0 -1
  668. package/testcases/functions/type-guards/TypeGuards.ts +0 -52
  669. package/testcases/functions/type-guards/config.yaml +0 -1
  670. package/testcases/operators/logical/LogicalOperators.ts +0 -11
  671. package/testcases/operators/logical/config.yaml +0 -1
  672. package/testcases/operators/nullish-coalescing/NullishCoalescing.ts +0 -7
  673. package/testcases/operators/nullish-coalescing/config.yaml +0 -1
  674. package/testcases/operators/optional-chaining/OptionalChaining.ts +0 -15
  675. package/testcases/operators/optional-chaining/config.yaml +0 -1
  676. package/testcases/real-world/advanced-generics/advanced-generics.ts +0 -116
  677. package/testcases/real-world/advanced-generics/config.yaml +0 -1
  678. package/testcases/real-world/async-ops/async-ops.ts +0 -67
  679. package/testcases/real-world/async-ops/config.yaml +0 -1
  680. package/testcases/real-world/business-logic/business-logic.ts +0 -215
  681. package/testcases/real-world/business-logic/config.yaml +0 -1
  682. package/testcases/real-world/calculator/calculator.ts +0 -29
  683. package/testcases/real-world/calculator/config.yaml +0 -1
  684. package/testcases/real-world/data-structures/config.yaml +0 -1
  685. package/testcases/real-world/data-structures/data-structures.ts +0 -133
  686. package/testcases/real-world/functional/config.yaml +0 -1
  687. package/testcases/real-world/functional/functional.ts +0 -116
  688. package/testcases/real-world/shapes/config.yaml +0 -1
  689. package/testcases/real-world/shapes/shapes.ts +0 -87
  690. package/testcases/real-world/string-utils/config.yaml +0 -1
  691. package/testcases/real-world/string-utils/string-utils.ts +0 -47
  692. package/testcases/real-world/todo-list/config.yaml +0 -1
  693. package/testcases/real-world/todo-list/todo-list.ts +0 -52
  694. package/testcases/real-world/type-guards/config.yaml +0 -1
  695. package/testcases/real-world/type-guards/type-guards.ts +0 -71
  696. package/testcases/structs/basic/Point.ts +0 -9
  697. package/testcases/structs/basic/config.yaml +0 -1
  698. package/testcases/types/conditional/ConditionalTypes.ts +0 -35
  699. package/testcases/types/conditional/config.yaml +0 -1
  700. package/testcases/types/constants/ModuleConstants.ts +0 -6
  701. package/testcases/types/constants/config.yaml +0 -1
  702. package/testcases/types/generics/Generics.ts +0 -15
  703. package/testcases/types/generics/config.yaml +0 -1
  704. package/testcases/types/interfaces/Interfaces.ts +0 -14
  705. package/testcases/types/interfaces/config.yaml +0 -1
  706. package/testcases/types/mapped/MappedTypes.ts +0 -27
  707. package/testcases/types/mapped/config.yaml +0 -1
  708. package/testcases/types/tuples-intersections/TuplesAndIntersections.ts +0 -46
  709. package/testcases/types/tuples-intersections/config.yaml +0 -1
  710. package/testcases/types/unions/UnionTypes.ts +0 -11
  711. package/testcases/types/unions/config.yaml +0 -1
  712. package/tsconfig.json +0 -14
package/src/emitter.ts DELETED
@@ -1,107 +0,0 @@
1
- /**
2
- * Main C# Emitter - Public API
3
- * Orchestrates code generation from IR
4
- */
5
-
6
- import { IrModule, Diagnostic } from "@tsonic/frontend";
7
- import { EmitterOptions } from "./types.js";
8
- import { emitModule } from "./core/module-emitter.js";
9
- import { buildModuleMap } from "./core/module-map.js";
10
-
11
- /**
12
- * Result of batch emission
13
- */
14
- export type EmitResult =
15
- | { readonly ok: true; readonly files: Map<string, string> }
16
- | { readonly ok: false; readonly errors: readonly Diagnostic[] };
17
-
18
- /**
19
- * Emit a complete C# file from an IR module
20
- */
21
- export const emitCSharpFile = (
22
- module: IrModule,
23
- options: Partial<EmitterOptions> = {}
24
- ): string => {
25
- return emitModule(module, options);
26
- };
27
-
28
- /**
29
- * Batch emit multiple IR modules.
30
- * Returns an error if there are file name collisions after normalization.
31
- */
32
- export const emitCSharpFiles = (
33
- modules: readonly IrModule[],
34
- options: Partial<EmitterOptions> = {}
35
- ): EmitResult => {
36
- // Build module map for cross-file import resolution
37
- const moduleMapResult = buildModuleMap(modules);
38
-
39
- if (!moduleMapResult.ok) {
40
- return { ok: false, errors: moduleMapResult.errors };
41
- }
42
-
43
- const moduleMap = moduleMapResult.value;
44
- const exportMap = moduleMapResult.exportMap;
45
- const results = new Map<string, string>();
46
-
47
- // Find common root directory for all modules
48
- const commonRoot = findCommonRoot(modules.map((m) => m.filePath));
49
-
50
- for (const module of modules) {
51
- // Create relative path from common root
52
- const relativePath = module.filePath.startsWith(commonRoot)
53
- ? module.filePath.slice(commonRoot.length).replace(/^\//, "")
54
- : module.filePath;
55
- const outputPath = relativePath.replace(/\.ts$/, ".cs");
56
-
57
- // Mark this module as entry point if it matches the entry point path
58
- const isEntryPoint = !!(
59
- options.entryPointPath && module.filePath === options.entryPointPath
60
- );
61
- const moduleOptions = {
62
- ...options,
63
- isEntryPoint,
64
- moduleMap, // Pass module map to each module emission
65
- exportMap, // Pass export map for re-export resolution
66
- };
67
- const code = emitModule(module, moduleOptions);
68
- results.set(outputPath, code);
69
- }
70
-
71
- return { ok: true, files: results };
72
- };
73
-
74
- /**
75
- * Find the common root directory for a set of file paths
76
- */
77
- const findCommonRoot = (paths: readonly string[]): string => {
78
- if (paths.length === 0) return "";
79
- if (paths.length === 1) {
80
- const firstPath = paths[0];
81
- if (!firstPath) return "";
82
- const lastSlash = firstPath.lastIndexOf("/");
83
- return lastSlash >= 0 ? firstPath.slice(0, lastSlash + 1) : "";
84
- }
85
-
86
- // Split all paths into segments
87
- const segments = paths.map((p) => p.split("/"));
88
- const firstSegments = segments[0];
89
- if (!firstSegments) return "";
90
-
91
- const minLength = Math.min(...segments.map((s) => s.length));
92
-
93
- let commonLength = 0;
94
- for (let i = 0; i < minLength; i++) {
95
- const segment = firstSegments[i];
96
- if (segment && segments.every((s) => s[i] === segment)) {
97
- commonLength = i + 1;
98
- } else {
99
- break;
100
- }
101
- }
102
-
103
- return firstSegments.slice(0, commonLength).join("/") + "/";
104
- };
105
-
106
- // Re-export emitModule for backward compatibility
107
- export { emitModule } from "./core/module-emitter.js";
@@ -1,112 +0,0 @@
1
- /**
2
- * Expression Emitter - IR expressions to C# code
3
- * Main dispatcher - delegates to specialized modules
4
- */
5
-
6
- import { IrExpression, IrType } from "@tsonic/frontend";
7
- import { EmitterContext, CSharpFragment } from "./types.js";
8
-
9
- // Import expression emitters from specialized modules
10
- import { emitLiteral } from "./expressions/literals.js";
11
- import { emitIdentifier } from "./expressions/identifiers.js";
12
- import { emitArray, emitObject } from "./expressions/collections.js";
13
- import { emitMemberAccess } from "./expressions/access.js";
14
- import { emitCall, emitNew } from "./expressions/calls.js";
15
- import {
16
- emitBinary,
17
- emitLogical,
18
- emitUnary,
19
- emitUpdate,
20
- emitAssignment,
21
- emitConditional,
22
- } from "./expressions/operators.js";
23
- import {
24
- emitFunctionExpression,
25
- emitArrowFunction,
26
- } from "./expressions/functions.js";
27
- import {
28
- emitTemplateLiteral,
29
- emitSpread,
30
- emitAwait,
31
- } from "./expressions/other.js";
32
-
33
- /**
34
- * Emit a C# expression from an IR expression
35
- * @param expr The IR expression to emit
36
- * @param context The emitter context
37
- * @param expectedType Optional expected type for contextual typing (e.g., array element type inference)
38
- */
39
- export const emitExpression = (
40
- expr: IrExpression,
41
- context: EmitterContext,
42
- expectedType?: IrType
43
- ): [CSharpFragment, EmitterContext] => {
44
- switch (expr.kind) {
45
- case "literal":
46
- return emitLiteral(expr, context);
47
-
48
- case "identifier":
49
- return emitIdentifier(expr, context);
50
-
51
- case "array":
52
- return emitArray(expr, context, expectedType);
53
-
54
- case "object":
55
- return emitObject(expr, context);
56
-
57
- case "memberAccess":
58
- return emitMemberAccess(expr, context);
59
-
60
- case "call":
61
- return emitCall(expr, context);
62
-
63
- case "new":
64
- return emitNew(expr, context);
65
-
66
- case "binary":
67
- return emitBinary(expr, context);
68
-
69
- case "logical":
70
- return emitLogical(expr, context);
71
-
72
- case "unary":
73
- return emitUnary(expr, context);
74
-
75
- case "update":
76
- return emitUpdate(expr, context);
77
-
78
- case "assignment":
79
- return emitAssignment(expr, context);
80
-
81
- case "conditional":
82
- return emitConditional(expr, context);
83
-
84
- case "functionExpression":
85
- return emitFunctionExpression(expr, context);
86
-
87
- case "arrowFunction":
88
- return emitArrowFunction(expr, context);
89
-
90
- case "templateLiteral":
91
- return emitTemplateLiteral(expr, context);
92
-
93
- case "spread":
94
- return emitSpread(expr, context);
95
-
96
- case "await":
97
- return emitAwait(expr, context);
98
-
99
- case "this":
100
- return [{ text: "this" }, context];
101
-
102
- default:
103
- // Fallback for unhandled expressions
104
- return [{ text: "/* TODO: unhandled expression */" }, context];
105
- }
106
- };
107
-
108
- // Re-export commonly used functions for backward compatibility
109
- export {
110
- emitTypeArguments,
111
- generateSpecializedName,
112
- } from "./expressions/identifiers.js";
@@ -1,104 +0,0 @@
1
- /**
2
- * Member access expression emitters
3
- */
4
-
5
- import { IrExpression } from "@tsonic/frontend";
6
- import { EmitterContext, CSharpFragment } from "../types.js";
7
- import { emitExpression } from "../expression-emitter.js";
8
- import {
9
- isExplicitViewProperty,
10
- extractInterfaceNameFromView,
11
- } from "@tsonic/frontend/types/explicit-views.js";
12
-
13
- /**
14
- * Emit a member access expression (dot notation or bracket notation)
15
- */
16
- export const emitMemberAccess = (
17
- expr: Extract<IrExpression, { kind: "memberAccess" }>,
18
- context: EmitterContext
19
- ): [CSharpFragment, EmitterContext] => {
20
- // Check if this is a hierarchical member binding
21
- if (expr.memberBinding) {
22
- // Emit the full CLR type and member with global:: prefix
23
- const { assembly, type, member } = expr.memberBinding;
24
- const text = `global::${assembly}.${type}.${member}`;
25
- return [{ text }, context];
26
- }
27
-
28
- const [objectFrag, newContext] = emitExpression(expr.object, context);
29
-
30
- // Default runtime to "js" when not specified
31
- const runtime = context.options.runtime ?? "js";
32
-
33
- if (expr.isComputed) {
34
- // Check if this is array index access - rewrite to static helper
35
- const objectType = expr.object.inferredType;
36
- const isArrayType = objectType?.kind === "arrayType";
37
-
38
- // For TS arrays, use Tsonic.Runtime.Array.get() in BOTH modes
39
- // This provides TS array semantics (auto-grow, sparse arrays, etc.)
40
- // Note: Tsonic.Runtime is compiler support for lowered TS constructs (both modes)
41
- // Tsonic.JSRuntime is JS built-ins like .map/.filter (js mode only)
42
- if (isArrayType) {
43
- const indexContext = { ...newContext, isArrayIndex: true };
44
- const [propFrag, contextWithIndex] = emitExpression(
45
- expr.property as IrExpression,
46
- indexContext
47
- );
48
- const finalContext = { ...contextWithIndex, isArrayIndex: false };
49
- const text = `global::Tsonic.Runtime.Array.get(${objectFrag.text}, ${propFrag.text})`;
50
- return [{ text }, finalContext];
51
- }
52
-
53
- // CLR indexer access (non-TS-array types like List<T>, string, etc.)
54
- // CLR indexers require integral indices.
55
- // This applies in BOTH js and dotnet modes - CLR type requirements are mode-independent.
56
- const indexContext = { ...newContext, isArrayIndex: true };
57
- const [propFrag, contextWithIndex] = emitExpression(
58
- expr.property as IrExpression,
59
- indexContext
60
- );
61
- const finalContext = { ...contextWithIndex, isArrayIndex: false };
62
- const accessor = expr.isOptional ? "?[" : "[";
63
-
64
- // Check if the index is already known to be int (e.g., canonical loop counter)
65
- const indexExpr = expr.property as IrExpression;
66
- const isKnownInt =
67
- indexExpr.kind === "identifier" &&
68
- context.intLoopVars?.has(indexExpr.name);
69
-
70
- // Skip cast if index is known int, otherwise cast for safety
71
- const indexText = isKnownInt ? propFrag.text : `(int)(${propFrag.text})`;
72
- const text = `${objectFrag.text}${accessor}${indexText}]`;
73
- return [{ text }, finalContext];
74
- }
75
-
76
- // Property access
77
- const prop = expr.property as string;
78
- const objectType = expr.object.inferredType;
79
- const isArrayType = objectType?.kind === "arrayType";
80
-
81
- // In JS runtime mode, rewrite array.length → global::Tsonic.Runtime.Array.length(array)
82
- // In dotnet mode, there is no JS emulation - users access .Count directly on List<T>
83
- if (isArrayType && prop === "length" && runtime === "js") {
84
- const text = `global::Tsonic.Runtime.Array.length(${objectFrag.text})`;
85
- return [{ text }, newContext];
86
- }
87
-
88
- // Handle explicit interface view properties (As_IInterface)
89
- if (isExplicitViewProperty(prop)) {
90
- const interfaceName = extractInterfaceNameFromView(prop);
91
- if (interfaceName) {
92
- // Emit as C# interface cast: ((IInterface)obj)
93
- // TODO: Need to look up full interface name from metadata
94
- // For now, use the extracted short name
95
- const text = `((${interfaceName})${objectFrag.text})`;
96
- return [{ text }, newContext];
97
- }
98
- }
99
-
100
- // Regular property access
101
- const accessor = expr.isOptional ? "?." : ".";
102
- const text = `${objectFrag.text}${accessor}${prop}`;
103
- return [{ text }, newContext];
104
- };
@@ -1,264 +0,0 @@
1
- /**
2
- * Call and new expression emitters
3
- */
4
-
5
- import { IrExpression } from "@tsonic/frontend";
6
- import { EmitterContext, CSharpFragment } from "../types.js";
7
- import { emitExpression } from "../expression-emitter.js";
8
- import { emitTypeArguments, generateSpecializedName } from "./identifiers.js";
9
-
10
- /**
11
- * Ref/out/in parameter handling:
12
- * The frontend extracts parameter passing modes from resolved signatures
13
- * and attaches them to IrCallExpression.argumentPassing array.
14
- * The emitter reads this array and prefixes arguments with ref/out/in keywords.
15
- */
16
-
17
- /**
18
- * Check if an expression is an lvalue (can be passed by reference)
19
- * Only identifiers and member accesses are lvalues in C#
20
- */
21
- const isLValue = (expr: IrExpression): boolean => {
22
- return expr.kind === "identifier" || expr.kind === "memberAccess";
23
- };
24
-
25
- /**
26
- * Check if a call expression needs an explicit cast because the inferred type
27
- * differs from the C# return type. This handles cases like Math.floor() which
28
- * returns double in C# but is cast to int in TypeScript via `as int`.
29
- */
30
- const needsIntCast = (
31
- expr: Extract<IrExpression, { kind: "call" }>,
32
- calleeName: string
33
- ): boolean => {
34
- // Check if the inferred type is int (a reference type from @tsonic/types)
35
- const inferredType = expr.inferredType;
36
- if (
37
- !inferredType ||
38
- inferredType.kind !== "referenceType" ||
39
- inferredType.name !== "int"
40
- ) {
41
- return false;
42
- }
43
-
44
- // Check if this is a Math method that returns double
45
- const mathMethodsReturningDouble = [
46
- "Math.floor",
47
- "Math.ceil",
48
- "Math.round",
49
- "Math.abs",
50
- "Math.pow",
51
- "Math.sqrt",
52
- "Math.min",
53
- "Math.max",
54
- "Tsonic.JSRuntime.Math.floor",
55
- "Tsonic.JSRuntime.Math.ceil",
56
- "Tsonic.JSRuntime.Math.round",
57
- ];
58
-
59
- return mathMethodsReturningDouble.some(
60
- (m) => calleeName === m || calleeName.endsWith(`.${m.split(".").pop()}`)
61
- );
62
- };
63
-
64
- /**
65
- * Emit a function call expression
66
- */
67
- export const emitCall = (
68
- expr: Extract<IrExpression, { kind: "call" }>,
69
- context: EmitterContext
70
- ): [CSharpFragment, EmitterContext] => {
71
- // Type-aware method call rewriting
72
- // Use inferredType to determine if we need to rewrite as static helper
73
- if (
74
- expr.callee.kind === "memberAccess" &&
75
- typeof expr.callee.property === "string"
76
- ) {
77
- const methodName = expr.callee.property;
78
- const objectType = expr.callee.object.inferredType;
79
-
80
- // Rewrite based on type:
81
- // - string → Tsonic.JSRuntime.String.method()
82
- // - number → Tsonic.JSRuntime.Number.method()
83
- // - Array<T> → Tsonic.JSRuntime.Array.method() (extension methods on List<T>)
84
- // - Other custom types → Keep as instance method
85
-
86
- const isStringType =
87
- objectType?.kind === "primitiveType" && objectType.name === "string";
88
- const isNumberType =
89
- objectType?.kind === "primitiveType" && objectType.name === "number";
90
- const isArrayType = objectType?.kind === "arrayType";
91
-
92
- const shouldRewriteAsStatic = isStringType || isNumberType || isArrayType;
93
-
94
- // Only rewrite to JSRuntime in "js" mode
95
- // In "dotnet" mode, there is no JS emulation - use .NET APIs directly
96
- const runtime = context.options.runtime ?? "js";
97
- if (shouldRewriteAsStatic && runtime === "js") {
98
- // Runtime mode "js": Use Tsonic.JSRuntime
99
- // Determine which runtime class based on type
100
- let runtimeClass: string;
101
- if (isStringType) {
102
- runtimeClass = "String";
103
- } else if (isNumberType) {
104
- runtimeClass = "Number";
105
- } else {
106
- runtimeClass = "Array";
107
- }
108
-
109
- // Rewrite: obj.method(args) → global::Tsonic.JSRuntime.{Class}.method(obj, args)
110
- const [objectFrag, objContext] = emitExpression(
111
- expr.callee.object,
112
- context
113
- );
114
- let currentContext = objContext;
115
-
116
- const args: string[] = [objectFrag.text]; // Object becomes first argument
117
- for (let i = 0; i < expr.arguments.length; i++) {
118
- const arg = expr.arguments[i];
119
- if (!arg) continue; // Skip undefined (shouldn't happen in valid IR)
120
- if (arg.kind === "spread") {
121
- const [spreadFrag, ctx] = emitExpression(
122
- arg.expression,
123
- currentContext
124
- );
125
- args.push(`params ${spreadFrag.text}`);
126
- currentContext = ctx;
127
- } else {
128
- const [argFrag, ctx] = emitExpression(arg, currentContext);
129
- // Check if this argument needs ref/out/in prefix
130
- // Note: argumentPassing[i] corresponds to method parameter i+1 (first param is the object)
131
- // Only add prefix if argument is an lvalue (identifier or member access)
132
- const passingMode = expr.argumentPassing?.[i + 1];
133
- const prefix =
134
- passingMode && passingMode !== "value" && isLValue(arg)
135
- ? `${passingMode} `
136
- : "";
137
- args.push(`${prefix}${argFrag.text}`);
138
- currentContext = ctx;
139
- }
140
- }
141
-
142
- const text = `global::Tsonic.JSRuntime.${runtimeClass}.${methodName}(${args.join(", ")})`;
143
- return [{ text }, currentContext];
144
- }
145
- }
146
-
147
- // Regular function call
148
- const [calleeFrag, newContext] = emitExpression(expr.callee, context);
149
- let currentContext = newContext;
150
-
151
- // Handle generic type arguments
152
- let typeArgsStr = "";
153
- let finalCalleeName = calleeFrag.text;
154
-
155
- if (expr.typeArguments && expr.typeArguments.length > 0) {
156
- if (expr.requiresSpecialization) {
157
- // Monomorphisation: Generate specialized method name
158
- // e.g., process<string> → process__string
159
- const [specializedName, specContext] = generateSpecializedName(
160
- calleeFrag.text,
161
- expr.typeArguments,
162
- currentContext
163
- );
164
- finalCalleeName = specializedName;
165
- currentContext = specContext;
166
- } else {
167
- // Emit explicit type arguments for generic call
168
- // e.g., identity<string>(value)
169
- const [typeArgs, typeContext] = emitTypeArguments(
170
- expr.typeArguments,
171
- currentContext
172
- );
173
- typeArgsStr = typeArgs;
174
- currentContext = typeContext;
175
- }
176
- }
177
-
178
- const args: string[] = [];
179
- for (let i = 0; i < expr.arguments.length; i++) {
180
- const arg = expr.arguments[i];
181
- if (!arg) continue; // Skip undefined (shouldn't happen in valid IR)
182
- if (arg.kind === "spread") {
183
- // Spread in function call
184
- const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
185
- args.push(`params ${spreadFrag.text}`);
186
- currentContext = ctx;
187
- } else {
188
- const [argFrag, ctx] = emitExpression(arg, currentContext);
189
- // Check if this argument needs ref/out/in prefix
190
- // Only add prefix if argument is an lvalue (identifier or member access)
191
- const passingMode = expr.argumentPassing?.[i];
192
- const prefix =
193
- passingMode && passingMode !== "value" && isLValue(arg)
194
- ? `${passingMode} `
195
- : "";
196
- args.push(`${prefix}${argFrag.text}`);
197
- currentContext = ctx;
198
- }
199
- }
200
-
201
- const callOp = expr.isOptional ? "?." : "";
202
- const callText = `${finalCalleeName}${typeArgsStr}${callOp}(${args.join(", ")})`;
203
-
204
- // Add cast if needed (e.g., Math.floor returning double but asserted as int)
205
- const text = needsIntCast(expr, finalCalleeName)
206
- ? `(int)${callText}`
207
- : callText;
208
-
209
- return [{ text }, currentContext];
210
- };
211
-
212
- /**
213
- * Emit a new expression
214
- */
215
- export const emitNew = (
216
- expr: Extract<IrExpression, { kind: "new" }>,
217
- context: EmitterContext
218
- ): [CSharpFragment, EmitterContext] => {
219
- const [calleeFrag, newContext] = emitExpression(expr.callee, context);
220
- let currentContext = newContext;
221
-
222
- // Handle generic type arguments
223
- let typeArgsStr = "";
224
- let finalClassName = calleeFrag.text;
225
-
226
- if (expr.typeArguments && expr.typeArguments.length > 0) {
227
- if (expr.requiresSpecialization) {
228
- // Monomorphisation: Generate specialized class name
229
- // e.g., new Box<string>() → new Box__string()
230
- const [specializedName, specContext] = generateSpecializedName(
231
- calleeFrag.text,
232
- expr.typeArguments,
233
- currentContext
234
- );
235
- finalClassName = specializedName;
236
- currentContext = specContext;
237
- } else {
238
- // Emit explicit type arguments for generic constructor
239
- // e.g., new Box<string>(value)
240
- const [typeArgs, typeContext] = emitTypeArguments(
241
- expr.typeArguments,
242
- currentContext
243
- );
244
- typeArgsStr = typeArgs;
245
- currentContext = typeContext;
246
- }
247
- }
248
-
249
- const args: string[] = [];
250
- for (const arg of expr.arguments) {
251
- if (arg.kind === "spread") {
252
- const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
253
- args.push(`params ${spreadFrag.text}`);
254
- currentContext = ctx;
255
- } else {
256
- const [argFrag, ctx] = emitExpression(arg, currentContext);
257
- args.push(argFrag.text);
258
- currentContext = ctx;
259
- }
260
- }
261
-
262
- const text = `new ${finalClassName}${typeArgsStr}(${args.join(", ")})`;
263
- return [{ text }, currentContext];
264
- };