@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,397 +0,0 @@
1
- /**
2
- * Tests for union type emission
3
- * Verifies TypeScript unions map to C# Union<T1, T2>
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("Union Type Emission", () => {
12
- it("should emit nullable type as T?", () => {
13
- const module: IrModule = {
14
- kind: "module",
15
- filePath: "/test/nullable.ts",
16
- namespace: "Test",
17
- className: "nullable",
18
- isStaticContainer: true,
19
- imports: [],
20
- exports: [],
21
- body: [
22
- {
23
- kind: "variableDeclaration",
24
- declarationKind: "const",
25
- isExported: false,
26
- declarations: [
27
- {
28
- kind: "variableDeclarator",
29
- name: { kind: "identifierPattern", name: "maybeString" },
30
- type: {
31
- kind: "unionType",
32
- types: [
33
- { kind: "primitiveType", name: "string" },
34
- { kind: "primitiveType", name: "null" },
35
- ],
36
- },
37
- initializer: { kind: "literal", value: null },
38
- },
39
- ],
40
- },
41
- ],
42
- };
43
-
44
- const code = emitModule(module);
45
-
46
- // Should use nullable syntax
47
- expect(code).to.include("string? maybeString");
48
- });
49
-
50
- it("should emit two-type union as Union<T1, T2>", () => {
51
- const module: IrModule = {
52
- kind: "module",
53
- filePath: "/test/union.ts",
54
- namespace: "Test",
55
- className: "union",
56
- isStaticContainer: true,
57
- imports: [],
58
- exports: [],
59
- body: [
60
- {
61
- kind: "variableDeclaration",
62
- declarationKind: "const",
63
- isExported: false,
64
- declarations: [
65
- {
66
- kind: "variableDeclarator",
67
- name: { kind: "identifierPattern", name: "value" },
68
- type: {
69
- kind: "unionType",
70
- types: [
71
- { kind: "primitiveType", name: "string" },
72
- { kind: "primitiveType", name: "number" },
73
- ],
74
- },
75
- initializer: { kind: "literal", value: "hello" },
76
- },
77
- ],
78
- },
79
- ],
80
- };
81
-
82
- const code = emitModule(module);
83
-
84
- // Should use Union<T1, T2>
85
- expect(code).to.include("Union<string, double> value");
86
- expect(code).to.include("using Tsonic.Runtime");
87
- });
88
-
89
- it("should emit function returning union type", () => {
90
- const module: IrModule = {
91
- kind: "module",
92
- filePath: "/test/unionFunc.ts",
93
- namespace: "Test",
94
- className: "unionFunc",
95
- isStaticContainer: true,
96
- imports: [],
97
- exports: [],
98
- body: [
99
- {
100
- kind: "functionDeclaration",
101
- name: "getValue",
102
- parameters: [],
103
- returnType: {
104
- kind: "unionType",
105
- types: [
106
- { kind: "primitiveType", name: "string" },
107
- { kind: "primitiveType", name: "number" },
108
- ],
109
- },
110
- body: {
111
- kind: "blockStatement",
112
- statements: [
113
- {
114
- kind: "returnStatement",
115
- expression: { kind: "literal", value: "hello" },
116
- },
117
- ],
118
- },
119
- isAsync: false,
120
- isGenerator: false,
121
- isExported: true,
122
- },
123
- ],
124
- };
125
-
126
- const code = emitModule(module);
127
-
128
- // Should return Union<string, double>
129
- expect(code).to.include("public static Union<string, double> getValue()");
130
- });
131
-
132
- it("should emit function parameter with union type", () => {
133
- const module: IrModule = {
134
- kind: "module",
135
- filePath: "/test/unionParam.ts",
136
- namespace: "Test",
137
- className: "unionParam",
138
- isStaticContainer: true,
139
- imports: [],
140
- exports: [],
141
- body: [
142
- {
143
- kind: "functionDeclaration",
144
- name: "process",
145
- parameters: [
146
- {
147
- kind: "parameter",
148
- pattern: { kind: "identifierPattern", name: "input" },
149
- type: {
150
- kind: "unionType",
151
- types: [
152
- { kind: "primitiveType", name: "string" },
153
- { kind: "primitiveType", name: "boolean" },
154
- ],
155
- },
156
- isOptional: false,
157
- isRest: false,
158
- passing: "value",
159
- },
160
- ],
161
- returnType: { kind: "voidType" },
162
- body: {
163
- kind: "blockStatement",
164
- statements: [],
165
- },
166
- isAsync: false,
167
- isGenerator: false,
168
- isExported: true,
169
- },
170
- ],
171
- };
172
-
173
- const code = emitModule(module);
174
-
175
- // Should accept Union<string, bool> parameter
176
- expect(code).to.include("process(Union<string, bool> input)");
177
- });
178
-
179
- it("should handle union with custom types", () => {
180
- const module: IrModule = {
181
- kind: "module",
182
- filePath: "/test/customUnion.ts",
183
- namespace: "Test",
184
- className: "customUnion",
185
- isStaticContainer: true,
186
- imports: [],
187
- exports: [],
188
- body: [
189
- {
190
- kind: "functionDeclaration",
191
- name: "getResult",
192
- parameters: [],
193
- returnType: {
194
- kind: "unionType",
195
- types: [
196
- { kind: "referenceType", name: "User", typeArguments: [] },
197
- { kind: "referenceType", name: "Product", typeArguments: [] },
198
- ],
199
- },
200
- body: {
201
- kind: "blockStatement",
202
- statements: [
203
- {
204
- kind: "returnStatement",
205
- expression: { kind: "identifier", name: "user" },
206
- },
207
- ],
208
- },
209
- isAsync: false,
210
- isGenerator: false,
211
- isExported: true,
212
- },
213
- ],
214
- };
215
-
216
- const code = emitModule(module);
217
-
218
- // Should use Union<User, Product>
219
- expect(code).to.include("Union<User, Product> getResult()");
220
- });
221
-
222
- it("should emit three-type union as Union<T1, T2, T3>", () => {
223
- const module: IrModule = {
224
- kind: "module",
225
- filePath: "/test/union3.ts",
226
- namespace: "Test",
227
- className: "union3",
228
- isStaticContainer: true,
229
- imports: [],
230
- exports: [],
231
- body: [
232
- {
233
- kind: "variableDeclaration",
234
- declarationKind: "const",
235
- isExported: false,
236
- declarations: [
237
- {
238
- kind: "variableDeclarator",
239
- name: { kind: "identifierPattern", name: "value" },
240
- type: {
241
- kind: "unionType",
242
- types: [
243
- { kind: "primitiveType", name: "string" },
244
- { kind: "primitiveType", name: "number" },
245
- { kind: "primitiveType", name: "boolean" },
246
- ],
247
- },
248
- initializer: { kind: "literal", value: "hello" },
249
- },
250
- ],
251
- },
252
- ],
253
- };
254
-
255
- const code = emitModule(module);
256
-
257
- // Should use Union<T1, T2, T3>
258
- expect(code).to.include("Union<string, double, bool> value");
259
- expect(code).to.include("using Tsonic.Runtime");
260
- });
261
-
262
- it("should emit four-type union as Union<T1, T2, T3, T4>", () => {
263
- const module: IrModule = {
264
- kind: "module",
265
- filePath: "/test/union4.ts",
266
- namespace: "Test",
267
- className: "union4",
268
- isStaticContainer: true,
269
- imports: [],
270
- exports: [],
271
- body: [
272
- {
273
- kind: "functionDeclaration",
274
- name: "process",
275
- parameters: [],
276
- returnType: {
277
- kind: "unionType",
278
- types: [
279
- { kind: "primitiveType", name: "string" },
280
- { kind: "primitiveType", name: "number" },
281
- { kind: "primitiveType", name: "boolean" },
282
- { kind: "referenceType", name: "Date", typeArguments: [] },
283
- ],
284
- },
285
- body: {
286
- kind: "blockStatement",
287
- statements: [
288
- {
289
- kind: "returnStatement",
290
- expression: { kind: "literal", value: "hello" },
291
- },
292
- ],
293
- },
294
- isAsync: false,
295
- isGenerator: false,
296
- isExported: true,
297
- },
298
- ],
299
- };
300
-
301
- const code = emitModule(module);
302
-
303
- // Should use Union<T1, T2, T3, T4>
304
- expect(code).to.include("Union<string, double, bool, Date> process()");
305
- });
306
-
307
- it("should emit eight-type union as Union<T1, T2, T3, T4, T5, T6, T7, T8>", () => {
308
- const module: IrModule = {
309
- kind: "module",
310
- filePath: "/test/union8.ts",
311
- namespace: "Test",
312
- className: "union8",
313
- isStaticContainer: true,
314
- imports: [],
315
- exports: [],
316
- body: [
317
- {
318
- kind: "variableDeclaration",
319
- declarationKind: "const",
320
- isExported: false,
321
- declarations: [
322
- {
323
- kind: "variableDeclarator",
324
- name: { kind: "identifierPattern", name: "value" },
325
- type: {
326
- kind: "unionType",
327
- types: [
328
- { kind: "primitiveType", name: "string" },
329
- { kind: "primitiveType", name: "number" },
330
- { kind: "primitiveType", name: "boolean" },
331
- { kind: "referenceType", name: "User", typeArguments: [] },
332
- { kind: "referenceType", name: "Product", typeArguments: [] },
333
- { kind: "referenceType", name: "Order", typeArguments: [] },
334
- { kind: "referenceType", name: "Payment", typeArguments: [] },
335
- { kind: "referenceType", name: "Invoice", typeArguments: [] },
336
- ],
337
- },
338
- initializer: { kind: "literal", value: "hello" },
339
- },
340
- ],
341
- },
342
- ],
343
- };
344
-
345
- const code = emitModule(module);
346
-
347
- // Should use Union<T1, T2, T3, T4, T5, T6, T7, T8>
348
- expect(code).to.include(
349
- "Union<string, double, bool, User, Product, Order, Payment, Invoice> value"
350
- );
351
- });
352
-
353
- it("should fall back to object for unions with more than 8 types", () => {
354
- const module: IrModule = {
355
- kind: "module",
356
- filePath: "/test/union9.ts",
357
- namespace: "Test",
358
- className: "union9",
359
- isStaticContainer: true,
360
- imports: [],
361
- exports: [],
362
- body: [
363
- {
364
- kind: "variableDeclaration",
365
- declarationKind: "const",
366
- isExported: false,
367
- declarations: [
368
- {
369
- kind: "variableDeclarator",
370
- name: { kind: "identifierPattern", name: "value" },
371
- type: {
372
- kind: "unionType",
373
- types: [
374
- { kind: "primitiveType", name: "string" },
375
- { kind: "primitiveType", name: "number" },
376
- { kind: "primitiveType", name: "boolean" },
377
- { kind: "referenceType", name: "T1", typeArguments: [] },
378
- { kind: "referenceType", name: "T2", typeArguments: [] },
379
- { kind: "referenceType", name: "T3", typeArguments: [] },
380
- { kind: "referenceType", name: "T4", typeArguments: [] },
381
- { kind: "referenceType", name: "T5", typeArguments: [] },
382
- { kind: "referenceType", name: "T6", typeArguments: [] },
383
- ],
384
- },
385
- initializer: { kind: "literal", value: "hello" },
386
- },
387
- ],
388
- },
389
- ],
390
- };
391
-
392
- const code = emitModule(module);
393
-
394
- // Should fall back to object for 9+ types
395
- expect(code).to.include("object value");
396
- });
397
- });
@@ -1,62 +0,0 @@
1
- /**
2
- * Union type emission
3
- */
4
-
5
- import { IrType } from "@tsonic/frontend";
6
- import { EmitterContext } from "../types.js";
7
- import { emitType } from "./emitter.js";
8
-
9
- /**
10
- * Emit union types as nullable (T?), Union<T1, T2>, or object
11
- */
12
- export const emitUnionType = (
13
- type: Extract<IrType, { kind: "unionType" }>,
14
- context: EmitterContext
15
- ): [string, EmitterContext] => {
16
- // C# doesn't have native union types
17
- // Strategy:
18
- // 1. Nullable types (T | null | undefined) → T?
19
- // 2. Two-type unions → Union<T1, T2>
20
- // 3. Multi-type unions → object (fallback)
21
-
22
- // Check if it's a nullable type (T | null | undefined)
23
- const nonNullTypes = type.types.filter(
24
- (t) =>
25
- !(
26
- t.kind === "primitiveType" &&
27
- (t.name === "null" || t.name === "undefined")
28
- )
29
- );
30
-
31
- if (nonNullTypes.length === 1) {
32
- // This is a nullable type (T | null | undefined)
33
- const firstType = nonNullTypes[0];
34
- if (!firstType) {
35
- return ["object?", context];
36
- }
37
- const [baseType, newContext] = emitType(firstType, context);
38
- // Add ? suffix for nullable types (both value types and reference types)
39
- // This includes string?, int?, double?, etc. per spec/04-type-mappings.md
40
- return [`${baseType}?`, newContext];
41
- }
42
-
43
- // Multi-type unions (2-8 types) → Union<T1, T2, ...>
44
- if (type.types.length >= 2 && type.types.length <= 8) {
45
- const typeStrings: string[] = [];
46
- let currentContext = context;
47
-
48
- for (const t of type.types) {
49
- const [typeStr, newContext] = emitType(t, currentContext);
50
- typeStrings.push(typeStr);
51
- currentContext = newContext;
52
- }
53
-
54
- return [
55
- `global::Tsonic.Runtime.Union<${typeStrings.join(", ")}>`,
56
- currentContext,
57
- ];
58
- }
59
-
60
- // Fallback for unions with more than 8 types: use object
61
- return ["object", context];
62
- };
package/src/types.ts DELETED
@@ -1,33 +0,0 @@
1
- /**
2
- * C# Emitter Types
3
- * Main dispatcher - re-exports from emitter-types/ subdirectory
4
- */
5
-
6
- export type {
7
- EmitterOptions,
8
- EmitterContext,
9
- EmitResult,
10
- CSharpFragment,
11
- CSharpAccessModifier,
12
- CSharpClassModifier,
13
- CSharpMethodModifier,
14
- CSharpUsing,
15
- ImportBinding,
16
- ModuleIdentity,
17
- ModuleMap,
18
- ExportSource,
19
- ExportMap,
20
- } from "./emitter-types/index.js";
21
- export {
22
- createContext,
23
- indent,
24
- dedent,
25
- withStatic,
26
- withAsync,
27
- withClassName,
28
- getIndent,
29
- renderTypeFQN,
30
- renderMemberFQN,
31
- renderFQN,
32
- FQN,
33
- } from "./emitter-types/index.js";
@@ -1,213 +0,0 @@
1
- # Golden Test Suite
2
-
3
- This directory contains **golden tests** for the Tsonic emitter - tests that verify the exact C# output generated from TypeScript input.
4
-
5
- ## Structure
6
-
7
- Each test case is a directory containing three files:
8
-
9
- ```
10
- testcases/
11
- category/ # e.g., arrays, async, functions
12
- subcategory/ # e.g., basic, advanced
13
- title.txt # One-line test description
14
- FileName.ts # TypeScript input (name becomes C# class name)
15
- expected.cs # Expected C# output
16
- ```
17
-
18
- **Important**: The `.ts` filename determines the generated C# class name. For example:
19
-
20
- - `Basic.ts` → `class Basic`
21
- - `UserService.ts` → `class UserService`
22
-
23
- ## How It Works
24
-
25
- 1. **Auto-discovery**: The test harness (`golden.test.ts`) automatically discovers all test cases
26
- 2. **Nested describes**: Test cases are organized into nested `describe` blocks matching the directory structure
27
- 3. **Full pipeline**: Each test runs the complete TypeScript → IR → C# pipeline
28
- 4. **Exact comparison**: Generated C# is compared character-by-character with expected output
29
-
30
- ## Adding a New Test
31
-
32
- 1. **Create a directory** under the appropriate category:
33
-
34
- ```bash
35
- mkdir -p testcases/arrays/destructuring
36
- ```
37
-
38
- 2. **Add three files**:
39
-
40
- **`title.txt`** - Single line description:
41
-
42
- ```
43
- should emit array destructuring assignment
44
- ```
45
-
46
- **`ArrayDestructure.ts`** - TypeScript input:
47
-
48
- ```typescript
49
- export function destructure(arr: number[]): number {
50
- const [first, second] = arr;
51
- return first + second;
52
- }
53
- ```
54
-
55
- **`expected.cs`** - Expected C# output (without header):
56
-
57
- ```csharp
58
- using Tsonic.Runtime;
59
-
60
- namespace TestCases.Arrays
61
- {
62
- public static class ArrayDestructure
63
- {
64
- public static double destructure(Tsonic.Runtime.Array<double> arr)
65
- {
66
- var first = arr[0];
67
- var second = arr[1];
68
- return first + second;
69
- }
70
- }
71
- }
72
- ```
73
-
74
- **Note**: Do NOT include the file header (`// Generated from:...`) in expected files. The test harness automatically generates and prepends the header using a shared constant from `constants.ts`. This ensures tests don't break when the header format changes.
75
-
76
- 3. **Run tests**:
77
- ```bash
78
- npm run test:emitter
79
- ```
80
-
81
- ## Tips
82
-
83
- ### Getting the Expected Output
84
-
85
- The easiest way to create `expected.cs` is to:
86
-
87
- 1. Create the `.ts` file with your input
88
- 2. Create a temporary `expected.cs` with placeholder content
89
- 3. Run the tests - they will fail and show you the actual output
90
- 4. Copy the actual output to `expected.cs`
91
- 5. **Remove the header** (the first 4 lines starting with `// Generated from:`)
92
-
93
- Or use the CLI to generate it:
94
-
95
- ```bash
96
- cd packages/emitter/testcases/arrays/destructuring
97
- tsonic emit ArrayDestructure.ts --out-dir temp
98
- # Remove header lines before saving
99
- tail -n +5 temp/ArrayDestructure.cs > expected.cs
100
- ```
101
-
102
- ### File Path Normalization
103
-
104
- The harness normalizes:
105
-
106
- - Line endings (`\r\n` → `\n`)
107
- - Trailing whitespace
108
- - Timestamps (`Generated at: ...` → `TIMESTAMP`)
109
-
110
- This makes tests resilient to minor formatting changes.
111
-
112
- ### Namespace Calculation
113
-
114
- The namespace is derived from the directory path:
115
-
116
- ```
117
- testcases/arrays/basic/Basic.ts
118
- └─ TestCases.Arrays (namespace)
119
- └─ Basic (class name from filename)
120
-
121
- testcases/async/advanced/PromiseHelper.ts
122
- └─ TestCases.Async.Advanced
123
- └─ PromiseHelper
124
- ```
125
-
126
- ## Test Organization
127
-
128
- Organize tests by feature category:
129
-
130
- - **`arrays/`** - Array operations, destructuring, spread
131
- - **`async/`** - Async/await, promises, generators
132
- - **`functions/`** - Function declarations, arrow functions, closures
133
- - **`classes/`** - Class declarations, methods, inheritance
134
- - **`types/`** - Type mappings, unions, generics
135
- - **`interop/`** - .NET interop, imports
136
- - **`edge-cases/`** - Corner cases, error conditions
137
-
138
- Within each category, use subdirectories for complexity:
139
-
140
- - `basic/` - Simple, fundamental cases
141
- - `advanced/` - Complex scenarios
142
- - `edge-cases/` - Unusual inputs
143
-
144
- ## Running Tests
145
-
146
- ```bash
147
- # Run all emitter tests (including golden tests)
148
- npm run test:emitter
149
-
150
- # Run only golden tests (via mocha grep)
151
- npm run test:emitter -- --grep "Golden Tests"
152
-
153
- # Run specific category
154
- npm run test:emitter -- --grep "Golden Tests arrays"
155
- ```
156
-
157
- ## Troubleshooting
158
-
159
- ### Test fails with "No .ts input file found"
160
-
161
- Make sure your test directory contains exactly one `.ts` file (other than `title.txt`).
162
-
163
- ### Test fails with "Incomplete test case"
164
-
165
- You're missing one of the required files:
166
-
167
- - `title.txt`
168
- - `*.ts`
169
- - `expected.cs`
170
-
171
- ### Test fails with diff showing wrong class name
172
-
173
- The C# class name comes from the `.ts` filename, not the directory name.
174
-
175
- Example:
176
-
177
- - ❌ `input.ts` → `class input`
178
- - ✅ `ArrayHelper.ts` → `class ArrayHelper`
179
-
180
- ### Test fails with diff showing wrong namespace
181
-
182
- Check the directory structure. Namespace is built from path components:
183
-
184
- ```
185
- testcases/foo/bar/Test.ts → TestCases.Foo (not TestCases.Foo.Bar)
186
- ```
187
-
188
- The last directory component becomes the class name prefix, not part of the namespace.
189
-
190
- ## Benefits
191
-
192
- ✅ **Easy to add** - Just create 3 files
193
- ✅ **Exact verification** - Catches any output changes
194
- ✅ **Auto-discovered** - No manual test registration
195
- ✅ **Well-organized** - Nested describes match directory structure
196
- ✅ **Fast feedback** - Clear diffs when tests fail
197
- ✅ **Comprehensive** - Tests full TS → IR → C# pipeline
198
-
199
- ## Contribution Guidelines
200
-
201
- When adding golden tests:
202
-
203
- 1. **Be specific** - One test per feature/behavior
204
- 2. **Use descriptive names** - File and title should be clear
205
- 3. **Keep it simple** - Focus on one aspect per test
206
- 4. **Add comments** - Explain non-obvious behavior in the `.ts` file
207
- 5. **Verify output** - Ensure expected.cs is actually correct
208
-
209
- ## See Also
210
-
211
- - [Emitter Implementation](../src/emitter.ts)
212
- - [Golden Test Harness](../src/golden.test.ts)
213
- - [Tsonic Spec](../../../spec/)
@@ -1,4 +0,0 @@
1
- export function createArray(): number[] {
2
- const arr = [1, 2, 3];
3
- return arr;
4
- }