@tsonic/emitter 0.0.62 → 0.0.63

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 (517) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-generator.d.ts +5 -15
  3. package/dist/adapter-generator.d.ts.map +1 -1
  4. package/dist/adapter-generator.js +60 -53
  5. package/dist/adapter-generator.js.map +1 -1
  6. package/dist/contracts/backend-adapter.d.ts +36 -0
  7. package/dist/contracts/backend-adapter.d.ts.map +1 -0
  8. package/dist/contracts/backend-adapter.js +9 -0
  9. package/dist/contracts/backend-adapter.js.map +1 -0
  10. package/dist/contracts/emitter-contract.d.ts +54 -0
  11. package/dist/contracts/emitter-contract.d.ts.map +1 -0
  12. package/dist/contracts/emitter-contract.js +8 -0
  13. package/dist/contracts/emitter-contract.js.map +1 -0
  14. package/dist/contracts/import-classifier.d.ts +36 -0
  15. package/dist/contracts/import-classifier.d.ts.map +1 -0
  16. package/dist/contracts/import-classifier.js +9 -0
  17. package/dist/contracts/import-classifier.js.map +1 -0
  18. package/dist/core/{attributes.d.ts → format/attributes.d.ts} +9 -14
  19. package/dist/core/format/attributes.d.ts.map +1 -0
  20. package/dist/core/format/attributes.js +190 -0
  21. package/dist/core/format/attributes.js.map +1 -0
  22. package/dist/core/format/attributes.test.d.ts.map +1 -0
  23. package/dist/core/{attributes.test.js → format/attributes.test.js} +70 -32
  24. package/dist/core/format/attributes.test.js.map +1 -0
  25. package/dist/core/format/backend-ast/index.d.ts +7 -0
  26. package/dist/core/format/backend-ast/index.d.ts.map +1 -0
  27. package/dist/core/format/backend-ast/index.js +6 -0
  28. package/dist/core/format/backend-ast/index.js.map +1 -0
  29. package/dist/core/format/backend-ast/printer.d.ts +33 -0
  30. package/dist/core/format/backend-ast/printer.d.ts.map +1 -0
  31. package/dist/core/format/backend-ast/printer.js +1151 -0
  32. package/dist/core/format/backend-ast/printer.js.map +1 -0
  33. package/dist/core/format/backend-ast/types.d.ts +504 -0
  34. package/dist/core/format/backend-ast/types.d.ts.map +1 -0
  35. package/dist/core/format/backend-ast/types.js +13 -0
  36. package/dist/core/format/backend-ast/types.js.map +1 -0
  37. package/dist/core/format/backend-ast/utils.d.ts +26 -0
  38. package/dist/core/format/backend-ast/utils.d.ts.map +1 -0
  39. package/dist/core/format/backend-ast/utils.js +65 -0
  40. package/dist/core/format/backend-ast/utils.js.map +1 -0
  41. package/dist/core/{exports.d.ts → format/exports.d.ts} +2 -2
  42. package/dist/core/format/exports.d.ts.map +1 -0
  43. package/dist/core/format/exports.js +22 -0
  44. package/dist/core/format/exports.js.map +1 -0
  45. package/dist/core/format/index.d.ts +9 -0
  46. package/dist/core/format/index.d.ts.map +1 -0
  47. package/dist/core/format/index.js +9 -0
  48. package/dist/core/format/index.js.map +1 -0
  49. package/dist/core/{local-names.d.ts → format/local-names.d.ts} +1 -1
  50. package/dist/core/format/local-names.d.ts.map +1 -0
  51. package/dist/core/{local-names.js → format/local-names.js} +1 -1
  52. package/dist/core/format/local-names.js.map +1 -0
  53. package/dist/core/format/module-emitter/assembly.d.ts +27 -0
  54. package/dist/core/format/module-emitter/assembly.d.ts.map +1 -0
  55. package/dist/core/format/module-emitter/assembly.js +44 -0
  56. package/dist/core/format/module-emitter/assembly.js.map +1 -0
  57. package/dist/core/{module-emitter → format/module-emitter}/header.d.ts +1 -1
  58. package/dist/core/format/module-emitter/header.d.ts.map +1 -0
  59. package/dist/core/{module-emitter → format/module-emitter}/header.js +1 -1
  60. package/dist/core/format/module-emitter/header.js.map +1 -0
  61. package/dist/core/format/module-emitter/index.d.ts.map +1 -0
  62. package/dist/core/format/module-emitter/index.js.map +1 -0
  63. package/dist/core/format/module-emitter/namespace.d.ts +21 -0
  64. package/dist/core/format/module-emitter/namespace.d.ts.map +1 -0
  65. package/dist/core/format/module-emitter/namespace.js +58 -0
  66. package/dist/core/format/module-emitter/namespace.js.map +1 -0
  67. package/dist/core/{module-emitter → format/module-emitter}/orchestrator.d.ts +1 -1
  68. package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -0
  69. package/dist/core/{module-emitter → format/module-emitter}/orchestrator.js +19 -19
  70. package/dist/core/format/module-emitter/orchestrator.js.map +1 -0
  71. package/dist/core/format/module-emitter/separation.d.ts.map +1 -0
  72. package/dist/core/format/module-emitter/separation.js.map +1 -0
  73. package/dist/core/{module-emitter → format/module-emitter}/static-container.d.ts +8 -3
  74. package/dist/core/format/module-emitter/static-container.d.ts.map +1 -0
  75. package/dist/core/format/module-emitter/static-container.js +202 -0
  76. package/dist/core/format/module-emitter/static-container.js.map +1 -0
  77. package/dist/core/format/module-emitter.d.ts.map +1 -0
  78. package/dist/core/format/module-emitter.js.map +1 -0
  79. package/dist/core/{options.d.ts → format/options.d.ts} +1 -1
  80. package/dist/core/format/options.d.ts.map +1 -0
  81. package/dist/core/format/options.js.map +1 -0
  82. package/dist/core/index.d.ts +2 -7
  83. package/dist/core/index.d.ts.map +1 -1
  84. package/dist/core/index.js +2 -7
  85. package/dist/core/index.js.map +1 -1
  86. package/dist/core/semantic/boolean-context.d.ts +44 -0
  87. package/dist/core/semantic/boolean-context.d.ts.map +1 -0
  88. package/dist/core/semantic/boolean-context.js +655 -0
  89. package/dist/core/semantic/boolean-context.js.map +1 -0
  90. package/dist/core/semantic/boolean-context.test.d.ts.map +1 -0
  91. package/dist/core/{boolean-context.test.js → semantic/boolean-context.test.js} +44 -108
  92. package/dist/core/semantic/boolean-context.test.js.map +1 -0
  93. package/dist/core/{imports.d.ts → semantic/imports.d.ts} +1 -5
  94. package/dist/core/semantic/imports.d.ts.map +1 -0
  95. package/dist/core/{imports.js → semantic/imports.js} +6 -77
  96. package/dist/core/semantic/imports.js.map +1 -0
  97. package/dist/core/semantic/imports.test.d.ts.map +1 -0
  98. package/dist/core/{imports.test.js → semantic/imports.test.js} +1 -1
  99. package/dist/core/semantic/imports.test.js.map +1 -0
  100. package/dist/core/semantic/index.d.ts +15 -0
  101. package/dist/core/semantic/index.d.ts.map +1 -0
  102. package/dist/core/semantic/index.js +15 -0
  103. package/dist/core/semantic/index.js.map +1 -0
  104. package/dist/core/{local-types.d.ts → semantic/local-types.d.ts} +1 -1
  105. package/dist/core/semantic/local-types.d.ts.map +1 -0
  106. package/dist/core/semantic/local-types.js.map +1 -0
  107. package/dist/core/{module-map.d.ts → semantic/module-map.d.ts} +1 -1
  108. package/dist/core/semantic/module-map.d.ts.map +1 -0
  109. package/dist/core/semantic/module-map.js.map +1 -0
  110. package/dist/core/semantic/module-map.test.d.ts.map +1 -0
  111. package/dist/core/semantic/module-map.test.js.map +1 -0
  112. package/dist/core/semantic/naming-collisions.d.ts.map +1 -0
  113. package/dist/core/{naming-collisions.js → semantic/naming-collisions.js} +1 -1
  114. package/dist/core/semantic/naming-collisions.js.map +1 -0
  115. package/dist/core/{type-alias-index.d.ts → semantic/type-alias-index.d.ts} +1 -1
  116. package/dist/core/semantic/type-alias-index.d.ts.map +1 -0
  117. package/dist/core/semantic/type-alias-index.js.map +1 -0
  118. package/dist/core/semantic/type-compatibility.d.ts.map +1 -0
  119. package/dist/core/semantic/type-compatibility.js.map +1 -0
  120. package/dist/core/{type-member-index.d.ts → semantic/type-member-index.d.ts} +1 -1
  121. package/dist/core/semantic/type-member-index.d.ts.map +1 -0
  122. package/dist/core/semantic/type-member-index.js.map +1 -0
  123. package/dist/core/semantic/type-params.d.ts.map +1 -0
  124. package/dist/core/semantic/type-params.js.map +1 -0
  125. package/dist/core/{type-resolution.d.ts → semantic/type-resolution.d.ts} +3 -6
  126. package/dist/core/semantic/type-resolution.d.ts.map +1 -0
  127. package/dist/core/{type-resolution.js → semantic/type-resolution.js} +15 -25
  128. package/dist/core/semantic/type-resolution.js.map +1 -0
  129. package/dist/core/semantic/type-resolution.test.d.ts.map +1 -0
  130. package/dist/core/{type-resolution.test.js → semantic/type-resolution.test.js} +11 -19
  131. package/dist/core/semantic/type-resolution.test.js.map +1 -0
  132. package/dist/core/semantic/unsafe.d.ts.map +1 -0
  133. package/dist/core/semantic/unsafe.js.map +1 -0
  134. package/dist/emitter-types/core.d.ts +4 -12
  135. package/dist/emitter-types/core.d.ts.map +1 -1
  136. package/dist/emitter-types/index.d.ts +1 -1
  137. package/dist/emitter-types/index.d.ts.map +1 -1
  138. package/dist/emitter-types/index.js.map +1 -1
  139. package/dist/emitter.d.ts +1 -1
  140. package/dist/emitter.d.ts.map +1 -1
  141. package/dist/emitter.js +9 -8
  142. package/dist/emitter.js.map +1 -1
  143. package/dist/expression-emitter.d.ts +10 -5
  144. package/dist/expression-emitter.d.ts.map +1 -1
  145. package/dist/expression-emitter.js +111 -117
  146. package/dist/expression-emitter.js.map +1 -1
  147. package/dist/expressions/access.d.ts +4 -3
  148. package/dist/expressions/access.d.ts.map +1 -1
  149. package/dist/expressions/access.js +176 -102
  150. package/dist/expressions/access.js.map +1 -1
  151. package/dist/expressions/calls/call-analysis.d.ts +86 -0
  152. package/dist/expressions/calls/call-analysis.d.ts.map +1 -0
  153. package/dist/expressions/calls/call-analysis.js +284 -0
  154. package/dist/expressions/calls/call-analysis.js.map +1 -0
  155. package/dist/expressions/calls/call-emitter.d.ts +13 -0
  156. package/dist/expressions/calls/call-emitter.d.ts.map +1 -0
  157. package/dist/expressions/calls/call-emitter.js +876 -0
  158. package/dist/expressions/calls/call-emitter.js.map +1 -0
  159. package/dist/expressions/calls/new-emitter.d.ts +13 -0
  160. package/dist/expressions/calls/new-emitter.d.ts.map +1 -0
  161. package/dist/expressions/calls/new-emitter.js +641 -0
  162. package/dist/expressions/calls/new-emitter.js.map +1 -0
  163. package/dist/expressions/calls.d.ts +2 -14
  164. package/dist/expressions/calls.d.ts.map +1 -1
  165. package/dist/expressions/calls.js +2 -909
  166. package/dist/expressions/calls.js.map +1 -1
  167. package/dist/expressions/collections.d.ts +6 -16
  168. package/dist/expressions/collections.d.ts.map +1 -1
  169. package/dist/expressions/collections.js +301 -217
  170. package/dist/expressions/collections.js.map +1 -1
  171. package/dist/expressions/functions.d.ts +6 -5
  172. package/dist/expressions/functions.d.ts.map +1 -1
  173. package/dist/expressions/functions.js +57 -62
  174. package/dist/expressions/functions.js.map +1 -1
  175. package/dist/expressions/identifiers.d.ts +11 -6
  176. package/dist/expressions/identifiers.d.ts.map +1 -1
  177. package/dist/expressions/identifiers.js +76 -25
  178. package/dist/expressions/identifiers.js.map +1 -1
  179. package/dist/expressions/index.d.ts +1 -1
  180. package/dist/expressions/index.d.ts.map +1 -1
  181. package/dist/expressions/index.js +1 -1
  182. package/dist/expressions/index.js.map +1 -1
  183. package/dist/expressions/index.test.js +143 -0
  184. package/dist/expressions/index.test.js.map +1 -1
  185. package/dist/expressions/literals.d.ts +4 -3
  186. package/dist/expressions/literals.d.ts.map +1 -1
  187. package/dist/expressions/literals.js +25 -17
  188. package/dist/expressions/literals.js.map +1 -1
  189. package/dist/expressions/literals.test.js +18 -18
  190. package/dist/expressions/literals.test.js.map +1 -1
  191. package/dist/expressions/operators/assignment-emitter.d.ts +16 -0
  192. package/dist/expressions/operators/assignment-emitter.d.ts.map +1 -0
  193. package/dist/expressions/operators/assignment-emitter.js +118 -0
  194. package/dist/expressions/operators/assignment-emitter.js.map +1 -0
  195. package/dist/expressions/operators/binary-emitter.d.ts +33 -0
  196. package/dist/expressions/operators/binary-emitter.d.ts.map +1 -0
  197. package/dist/expressions/operators/binary-emitter.js +398 -0
  198. package/dist/expressions/operators/binary-emitter.js.map +1 -0
  199. package/dist/expressions/operators/conditional-emitter.d.ts +17 -0
  200. package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -0
  201. package/dist/expressions/operators/conditional-emitter.js +306 -0
  202. package/dist/expressions/operators/conditional-emitter.js.map +1 -0
  203. package/dist/expressions/operators/helpers.d.ts +37 -0
  204. package/dist/expressions/operators/helpers.d.ts.map +1 -0
  205. package/dist/expressions/operators/helpers.js +136 -0
  206. package/dist/expressions/operators/helpers.js.map +1 -0
  207. package/dist/expressions/operators/logical-emitter.d.ts +23 -0
  208. package/dist/expressions/operators/logical-emitter.d.ts.map +1 -0
  209. package/dist/expressions/operators/logical-emitter.js +73 -0
  210. package/dist/expressions/operators/logical-emitter.js.map +1 -0
  211. package/dist/expressions/operators/unary-emitter.d.ts +30 -0
  212. package/dist/expressions/operators/unary-emitter.d.ts.map +1 -0
  213. package/dist/expressions/operators/unary-emitter.js +244 -0
  214. package/dist/expressions/operators/unary-emitter.js.map +1 -0
  215. package/dist/expressions/operators.d.ts +5 -81
  216. package/dist/expressions/operators.d.ts.map +1 -1
  217. package/dist/expressions/operators.js +5 -949
  218. package/dist/expressions/operators.js.map +1 -1
  219. package/dist/expressions/other.d.ts +15 -11
  220. package/dist/expressions/other.d.ts.map +1 -1
  221. package/dist/expressions/other.js +51 -36
  222. package/dist/expressions/other.js.map +1 -1
  223. package/dist/expressions/precedence.test.js +1 -1
  224. package/dist/expressions/precedence.test.js.map +1 -1
  225. package/dist/generator-exchange.d.ts +10 -3
  226. package/dist/generator-exchange.d.ts.map +1 -1
  227. package/dist/generator-exchange.js +57 -54
  228. package/dist/generator-exchange.js.map +1 -1
  229. package/dist/generator-wrapper.d.ts +17 -65
  230. package/dist/generator-wrapper.d.ts.map +1 -1
  231. package/dist/generator-wrapper.js +396 -220
  232. package/dist/generator-wrapper.js.map +1 -1
  233. package/dist/generator-wrapper.test.js +22 -14
  234. package/dist/generator-wrapper.test.js.map +1 -1
  235. package/dist/integration.test.js +166 -1
  236. package/dist/integration.test.js.map +1 -1
  237. package/dist/patterns.d.ts +18 -88
  238. package/dist/patterns.d.ts.map +1 -1
  239. package/dist/patterns.js +540 -304
  240. package/dist/patterns.js.map +1 -1
  241. package/dist/patterns.test.js +5 -4
  242. package/dist/patterns.test.js.map +1 -1
  243. package/dist/specialization/generation.d.ts +7 -3
  244. package/dist/specialization/generation.d.ts.map +1 -1
  245. package/dist/specialization/generation.js +31 -15
  246. package/dist/specialization/generation.js.map +1 -1
  247. package/dist/specialization/type-aliases.test.js +3 -2
  248. package/dist/specialization/type-aliases.test.js.map +1 -1
  249. package/dist/statement-emitter.d.ts +15 -4
  250. package/dist/statement-emitter.d.ts.map +1 -1
  251. package/dist/statement-emitter.js +54 -47
  252. package/dist/statement-emitter.js.map +1 -1
  253. package/dist/statements/blocks.d.ts +24 -16
  254. package/dist/statements/blocks.d.ts.map +1 -1
  255. package/dist/statements/blocks.js +191 -65
  256. package/dist/statements/blocks.js.map +1 -1
  257. package/dist/statements/classes/index.d.ts +1 -1
  258. package/dist/statements/classes/index.d.ts.map +1 -1
  259. package/dist/statements/classes/index.js +1 -1
  260. package/dist/statements/classes/index.js.map +1 -1
  261. package/dist/statements/classes/inline-types.d.ts +4 -3
  262. package/dist/statements/classes/inline-types.d.ts.map +1 -1
  263. package/dist/statements/classes/inline-types.js +21 -21
  264. package/dist/statements/classes/inline-types.js.map +1 -1
  265. package/dist/statements/classes/members/constructors.d.ts +4 -3
  266. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  267. package/dist/statements/classes/members/constructors.js +57 -58
  268. package/dist/statements/classes/members/constructors.js.map +1 -1
  269. package/dist/statements/classes/members/methods.d.ts +4 -3
  270. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  271. package/dist/statements/classes/members/methods.js +98 -98
  272. package/dist/statements/classes/members/methods.js.map +1 -1
  273. package/dist/statements/classes/members/orchestrator.d.ts +4 -3
  274. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  275. package/dist/statements/classes/members/orchestrator.js +2 -2
  276. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  277. package/dist/statements/classes/members/properties.d.ts +4 -3
  278. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  279. package/dist/statements/classes/members/properties.js +105 -88
  280. package/dist/statements/classes/members/properties.js.map +1 -1
  281. package/dist/statements/classes/members/shadowing.test.js +7 -2
  282. package/dist/statements/classes/members/shadowing.test.js.map +1 -1
  283. package/dist/statements/classes/members/static-readonly-properties.test.js +4 -1
  284. package/dist/statements/classes/members/static-readonly-properties.test.js.map +1 -1
  285. package/dist/statements/classes/parameters.d.ts +8 -10
  286. package/dist/statements/classes/parameters.d.ts.map +1 -1
  287. package/dist/statements/classes/parameters.js +30 -26
  288. package/dist/statements/classes/parameters.js.map +1 -1
  289. package/dist/statements/classes/properties.d.ts +4 -3
  290. package/dist/statements/classes/properties.d.ts.map +1 -1
  291. package/dist/statements/classes/properties.js +76 -50
  292. package/dist/statements/classes/properties.js.map +1 -1
  293. package/dist/statements/classes.d.ts +1 -1
  294. package/dist/statements/classes.d.ts.map +1 -1
  295. package/dist/statements/classes.js +1 -1
  296. package/dist/statements/classes.js.map +1 -1
  297. package/dist/statements/control/conditionals/guard-analysis.d.ts +169 -0
  298. package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -0
  299. package/dist/statements/control/conditionals/guard-analysis.js +591 -0
  300. package/dist/statements/control/conditionals/guard-analysis.js.map +1 -0
  301. package/dist/statements/control/conditionals/if-emitter.d.ts +14 -0
  302. package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -0
  303. package/dist/statements/control/conditionals/if-emitter.js +725 -0
  304. package/dist/statements/control/conditionals/if-emitter.js.map +1 -0
  305. package/dist/statements/control/conditionals/switch-emitter.d.ts +13 -0
  306. package/dist/statements/control/conditionals/switch-emitter.d.ts.map +1 -0
  307. package/dist/statements/control/conditionals/switch-emitter.js +60 -0
  308. package/dist/statements/control/conditionals/switch-emitter.js.map +1 -0
  309. package/dist/statements/control/conditionals.d.ts +3 -15
  310. package/dist/statements/control/conditionals.d.ts.map +1 -1
  311. package/dist/statements/control/conditionals.js +3 -1152
  312. package/dist/statements/control/conditionals.js.map +1 -1
  313. package/dist/statements/control/exceptions.d.ts +8 -6
  314. package/dist/statements/control/exceptions.d.ts.map +1 -1
  315. package/dist/statements/control/exceptions.js +35 -23
  316. package/dist/statements/control/exceptions.js.map +1 -1
  317. package/dist/statements/control/index.d.ts +3 -3
  318. package/dist/statements/control/index.d.ts.map +1 -1
  319. package/dist/statements/control/index.js +3 -3
  320. package/dist/statements/control/index.js.map +1 -1
  321. package/dist/statements/control/loops.d.ts +14 -12
  322. package/dist/statements/control/loops.d.ts.map +1 -1
  323. package/dist/statements/control/loops.js +147 -82
  324. package/dist/statements/control/loops.js.map +1 -1
  325. package/dist/statements/control.d.ts +1 -1
  326. package/dist/statements/control.d.ts.map +1 -1
  327. package/dist/statements/control.js +1 -1
  328. package/dist/statements/control.js.map +1 -1
  329. package/dist/statements/declarations/classes.d.ts +7 -3
  330. package/dist/statements/declarations/classes.d.ts.map +1 -1
  331. package/dist/statements/declarations/classes.js +66 -83
  332. package/dist/statements/declarations/classes.js.map +1 -1
  333. package/dist/statements/declarations/enums.d.ts +4 -3
  334. package/dist/statements/declarations/enums.d.ts.map +1 -1
  335. package/dist/statements/declarations/enums.js +16 -15
  336. package/dist/statements/declarations/enums.js.map +1 -1
  337. package/dist/statements/declarations/functions.d.ts +18 -2
  338. package/dist/statements/declarations/functions.d.ts.map +1 -1
  339. package/dist/statements/declarations/functions.js +625 -159
  340. package/dist/statements/declarations/functions.js.map +1 -1
  341. package/dist/statements/declarations/index.d.ts +2 -2
  342. package/dist/statements/declarations/index.d.ts.map +1 -1
  343. package/dist/statements/declarations/index.js +2 -2
  344. package/dist/statements/declarations/index.js.map +1 -1
  345. package/dist/statements/declarations/interfaces.d.ts +7 -3
  346. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  347. package/dist/statements/declarations/interfaces.js +119 -106
  348. package/dist/statements/declarations/interfaces.js.map +1 -1
  349. package/dist/statements/declarations/type-aliases.d.ts +7 -3
  350. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  351. package/dist/statements/declarations/type-aliases.js +95 -82
  352. package/dist/statements/declarations/type-aliases.js.map +1 -1
  353. package/dist/statements/declarations/variables.d.ts +12 -2
  354. package/dist/statements/declarations/variables.d.ts.map +1 -1
  355. package/dist/statements/declarations/variables.js +533 -425
  356. package/dist/statements/declarations/variables.js.map +1 -1
  357. package/dist/statements/declarations.d.ts +1 -1
  358. package/dist/statements/declarations.d.ts.map +1 -1
  359. package/dist/statements/declarations.js +1 -1
  360. package/dist/statements/declarations.js.map +1 -1
  361. package/dist/statements/index.d.ts +3 -3
  362. package/dist/statements/index.d.ts.map +1 -1
  363. package/dist/statements/index.js +5 -5
  364. package/dist/statements/index.js.map +1 -1
  365. package/dist/type-emitter.d.ts +1 -1
  366. package/dist/type-emitter.d.ts.map +1 -1
  367. package/dist/type-emitter.js +1 -1
  368. package/dist/type-emitter.js.map +1 -1
  369. package/dist/types/arrays.d.ts +3 -2
  370. package/dist/types/arrays.d.ts.map +1 -1
  371. package/dist/types/arrays.js +7 -5
  372. package/dist/types/arrays.js.map +1 -1
  373. package/dist/types/dictionaries.d.ts +6 -3
  374. package/dist/types/dictionaries.d.ts.map +1 -1
  375. package/dist/types/dictionaries.js +22 -10
  376. package/dist/types/dictionaries.js.map +1 -1
  377. package/dist/types/emitter.d.ts +8 -2
  378. package/dist/types/emitter.d.ts.map +1 -1
  379. package/dist/types/emitter.js +20 -6
  380. package/dist/types/emitter.js.map +1 -1
  381. package/dist/types/functions.d.ts +3 -2
  382. package/dist/types/functions.d.ts.map +1 -1
  383. package/dist/types/functions.js +36 -13
  384. package/dist/types/functions.js.map +1 -1
  385. package/dist/types/index.d.ts +2 -2
  386. package/dist/types/index.d.ts.map +1 -1
  387. package/dist/types/index.js +2 -2
  388. package/dist/types/index.js.map +1 -1
  389. package/dist/types/index.test.js +137 -0
  390. package/dist/types/index.test.js.map +1 -1
  391. package/dist/types/intersections.d.ts +3 -2
  392. package/dist/types/intersections.d.ts.map +1 -1
  393. package/dist/types/intersections.js +2 -2
  394. package/dist/types/intersections.js.map +1 -1
  395. package/dist/types/literals.d.ts +9 -2
  396. package/dist/types/literals.d.ts.map +1 -1
  397. package/dist/types/literals.js +11 -5
  398. package/dist/types/literals.js.map +1 -1
  399. package/dist/types/objects.d.ts +3 -2
  400. package/dist/types/objects.d.ts.map +1 -1
  401. package/dist/types/objects.js +1 -1
  402. package/dist/types/objects.js.map +1 -1
  403. package/dist/types/parameters.d.ts +6 -5
  404. package/dist/types/parameters.d.ts.map +1 -1
  405. package/dist/types/parameters.js +88 -29
  406. package/dist/types/parameters.js.map +1 -1
  407. package/dist/types/parameters.test.js +9 -4
  408. package/dist/types/parameters.test.js.map +1 -1
  409. package/dist/types/primitives.d.ts +5 -4
  410. package/dist/types/primitives.d.ts.map +1 -1
  411. package/dist/types/primitives.js +14 -13
  412. package/dist/types/primitives.js.map +1 -1
  413. package/dist/types/references.d.ts +3 -2
  414. package/dist/types/references.d.ts.map +1 -1
  415. package/dist/types/references.js +135 -111
  416. package/dist/types/references.js.map +1 -1
  417. package/dist/types/tuples.d.ts +3 -2
  418. package/dist/types/tuples.d.ts.map +1 -1
  419. package/dist/types/tuples.js +25 -11
  420. package/dist/types/tuples.js.map +1 -1
  421. package/dist/types/unions.d.ts +3 -2
  422. package/dist/types/unions.d.ts.map +1 -1
  423. package/dist/types/unions.js +36 -21
  424. package/dist/types/unions.js.map +1 -1
  425. package/dist/types.d.ts +1 -1
  426. package/dist/types.d.ts.map +1 -1
  427. package/dist/types.js.map +1 -1
  428. package/package.json +2 -2
  429. package/dist/core/attributes.d.ts.map +0 -1
  430. package/dist/core/attributes.js +0 -141
  431. package/dist/core/attributes.js.map +0 -1
  432. package/dist/core/attributes.test.d.ts.map +0 -1
  433. package/dist/core/attributes.test.js.map +0 -1
  434. package/dist/core/boolean-context.d.ts +0 -42
  435. package/dist/core/boolean-context.d.ts.map +0 -1
  436. package/dist/core/boolean-context.js +0 -442
  437. package/dist/core/boolean-context.js.map +0 -1
  438. package/dist/core/boolean-context.test.d.ts.map +0 -1
  439. package/dist/core/boolean-context.test.js.map +0 -1
  440. package/dist/core/exports.d.ts.map +0 -1
  441. package/dist/core/exports.js +0 -28
  442. package/dist/core/exports.js.map +0 -1
  443. package/dist/core/imports.d.ts.map +0 -1
  444. package/dist/core/imports.js.map +0 -1
  445. package/dist/core/imports.test.d.ts.map +0 -1
  446. package/dist/core/imports.test.js.map +0 -1
  447. package/dist/core/local-names.d.ts.map +0 -1
  448. package/dist/core/local-names.js.map +0 -1
  449. package/dist/core/local-types.d.ts.map +0 -1
  450. package/dist/core/local-types.js.map +0 -1
  451. package/dist/core/module-emitter/assembly.d.ts +0 -24
  452. package/dist/core/module-emitter/assembly.d.ts.map +0 -1
  453. package/dist/core/module-emitter/assembly.js +0 -69
  454. package/dist/core/module-emitter/assembly.js.map +0 -1
  455. package/dist/core/module-emitter/header.d.ts.map +0 -1
  456. package/dist/core/module-emitter/header.js.map +0 -1
  457. package/dist/core/module-emitter/index.d.ts.map +0 -1
  458. package/dist/core/module-emitter/index.js.map +0 -1
  459. package/dist/core/module-emitter/namespace.d.ts +0 -14
  460. package/dist/core/module-emitter/namespace.d.ts.map +0 -1
  461. package/dist/core/module-emitter/namespace.js +0 -26
  462. package/dist/core/module-emitter/namespace.js.map +0 -1
  463. package/dist/core/module-emitter/orchestrator.d.ts.map +0 -1
  464. package/dist/core/module-emitter/orchestrator.js.map +0 -1
  465. package/dist/core/module-emitter/separation.d.ts.map +0 -1
  466. package/dist/core/module-emitter/separation.js.map +0 -1
  467. package/dist/core/module-emitter/static-container.d.ts.map +0 -1
  468. package/dist/core/module-emitter/static-container.js +0 -139
  469. package/dist/core/module-emitter/static-container.js.map +0 -1
  470. package/dist/core/module-emitter.d.ts.map +0 -1
  471. package/dist/core/module-emitter.js.map +0 -1
  472. package/dist/core/module-map.d.ts.map +0 -1
  473. package/dist/core/module-map.js.map +0 -1
  474. package/dist/core/module-map.test.d.ts.map +0 -1
  475. package/dist/core/module-map.test.js.map +0 -1
  476. package/dist/core/naming-collisions.d.ts.map +0 -1
  477. package/dist/core/naming-collisions.js.map +0 -1
  478. package/dist/core/options.d.ts.map +0 -1
  479. package/dist/core/options.js.map +0 -1
  480. package/dist/core/type-alias-index.d.ts.map +0 -1
  481. package/dist/core/type-alias-index.js.map +0 -1
  482. package/dist/core/type-compatibility.d.ts.map +0 -1
  483. package/dist/core/type-compatibility.js.map +0 -1
  484. package/dist/core/type-member-index.d.ts.map +0 -1
  485. package/dist/core/type-member-index.js.map +0 -1
  486. package/dist/core/type-params.d.ts.map +0 -1
  487. package/dist/core/type-params.js.map +0 -1
  488. package/dist/core/type-resolution.d.ts.map +0 -1
  489. package/dist/core/type-resolution.js.map +0 -1
  490. package/dist/core/type-resolution.test.d.ts.map +0 -1
  491. package/dist/core/type-resolution.test.js.map +0 -1
  492. package/dist/core/unsafe.d.ts.map +0 -1
  493. package/dist/core/unsafe.js.map +0 -1
  494. /package/dist/core/{attributes.test.d.ts → format/attributes.test.d.ts} +0 -0
  495. /package/dist/core/{module-emitter → format/module-emitter}/index.d.ts +0 -0
  496. /package/dist/core/{module-emitter → format/module-emitter}/index.js +0 -0
  497. /package/dist/core/{module-emitter → format/module-emitter}/separation.d.ts +0 -0
  498. /package/dist/core/{module-emitter → format/module-emitter}/separation.js +0 -0
  499. /package/dist/core/{module-emitter.d.ts → format/module-emitter.d.ts} +0 -0
  500. /package/dist/core/{module-emitter.js → format/module-emitter.js} +0 -0
  501. /package/dist/core/{options.js → format/options.js} +0 -0
  502. /package/dist/core/{boolean-context.test.d.ts → semantic/boolean-context.test.d.ts} +0 -0
  503. /package/dist/core/{imports.test.d.ts → semantic/imports.test.d.ts} +0 -0
  504. /package/dist/core/{local-types.js → semantic/local-types.js} +0 -0
  505. /package/dist/core/{module-map.js → semantic/module-map.js} +0 -0
  506. /package/dist/core/{module-map.test.d.ts → semantic/module-map.test.d.ts} +0 -0
  507. /package/dist/core/{module-map.test.js → semantic/module-map.test.js} +0 -0
  508. /package/dist/core/{naming-collisions.d.ts → semantic/naming-collisions.d.ts} +0 -0
  509. /package/dist/core/{type-alias-index.js → semantic/type-alias-index.js} +0 -0
  510. /package/dist/core/{type-compatibility.d.ts → semantic/type-compatibility.d.ts} +0 -0
  511. /package/dist/core/{type-compatibility.js → semantic/type-compatibility.js} +0 -0
  512. /package/dist/core/{type-member-index.js → semantic/type-member-index.js} +0 -0
  513. /package/dist/core/{type-params.d.ts → semantic/type-params.d.ts} +0 -0
  514. /package/dist/core/{type-params.js → semantic/type-params.js} +0 -0
  515. /package/dist/core/{type-resolution.test.d.ts → semantic/type-resolution.test.d.ts} +0 -0
  516. /package/dist/core/{unsafe.d.ts → semantic/unsafe.d.ts} +0 -0
  517. /package/dist/core/{unsafe.js → semantic/unsafe.js} +0 -0
@@ -1,84 +1,91 @@
1
1
  /**
2
2
  * Adapter Generator - Generate C# adapters for structural constraints
3
3
  * Per spec/15-generics.md §4 - Structural Constraints & Adapters
4
+ *
5
+ * Returns CSharpTypeDeclarationAst[] (interface + wrapper class).
4
6
  */
5
- import { getIndent, indent } from "./types.js";
6
- import { emitType } from "./type-emitter.js";
7
+ import { emitTypeAst } from "./type-emitter.js";
7
8
  import { emitCSharpName } from "./naming-policy.js";
8
9
  /**
9
10
  * Generate adapter interface and wrapper class for a structural constraint
10
- *
11
- * Example:
12
- * Input: T extends { id: number; name: string }
13
- * Output:
14
- * interface __Constraint_T {
15
- * double id { get; }
16
- * string name { get; }
17
- * }
18
- *
19
- * sealed class __Wrapper_T : __Constraint_T {
20
- * public double id { get; set; }
21
- * public string name { get; set; }
22
- * }
23
11
  */
24
12
  export const generateStructuralAdapter = (typeParam, context) => {
25
13
  if (!typeParam.isStructuralConstraint || !typeParam.structuralMembers) {
26
- return ["", context];
14
+ return [[], context];
27
15
  }
28
- const ind = getIndent(context);
29
- const bodyInd = getIndent(indent(context));
30
- const parts = [];
31
16
  let currentContext = context;
32
17
  const interfaceName = `__Constraint_${typeParam.name}`;
33
18
  const wrapperName = `__Wrapper_${typeParam.name}`;
34
- // Generate interface
35
- parts.push(`${ind}public interface ${interfaceName}`);
36
- parts.push(`${ind}{`);
19
+ // Build interface members (readonly properties)
20
+ const interfaceMembers = [];
21
+ // Build wrapper members (read-write properties)
22
+ const wrapperMembers = [];
37
23
  for (const member of typeParam.structuralMembers) {
38
- if (member.kind === "propertySignature") {
39
- const [memberType, newContext] = emitType(member.type, currentContext);
40
- currentContext = newContext;
41
- const optional = member.isOptional ? "?" : "";
42
- parts.push(`${bodyInd}${memberType}${optional} ${emitCSharpName(member.name, "properties", context)} { get; }`);
43
- }
24
+ if (member.kind !== "propertySignature")
25
+ continue;
26
+ const [memberTypeAst, newContext] = emitTypeAst(member.type, currentContext);
27
+ currentContext = newContext;
28
+ const typeAst = member.isOptional
29
+ ? { kind: "nullableType", underlyingType: memberTypeAst }
30
+ : memberTypeAst;
31
+ const propName = emitCSharpName(member.name, "properties", context);
32
+ // Interface: get-only
33
+ interfaceMembers.push({
34
+ kind: "propertyDeclaration",
35
+ attributes: [],
36
+ modifiers: [],
37
+ type: typeAst,
38
+ name: propName,
39
+ hasGetter: true,
40
+ hasSetter: false,
41
+ isAutoProperty: true,
42
+ });
43
+ // Wrapper: public get/set
44
+ wrapperMembers.push({
45
+ kind: "propertyDeclaration",
46
+ attributes: [],
47
+ modifiers: ["public"],
48
+ type: typeAst,
49
+ name: propName,
50
+ hasGetter: true,
51
+ hasSetter: true,
52
+ isAutoProperty: true,
53
+ });
44
54
  }
45
- parts.push(`${ind}}`);
46
- parts.push(""); // Blank line
47
- // Generate wrapper class
48
- parts.push(`${ind}public sealed class ${wrapperName} : ${interfaceName}`);
49
- parts.push(`${ind}{`);
50
- for (const member of typeParam.structuralMembers) {
51
- if (member.kind === "propertySignature") {
52
- const [memberType, newContext] = emitType(member.type, currentContext);
53
- currentContext = newContext;
54
- const optional = member.isOptional ? "?" : "";
55
- parts.push(`${bodyInd}public ${memberType}${optional} ${emitCSharpName(member.name, "properties", context)} { get; set; }`);
56
- }
57
- }
58
- parts.push(`${ind}}`);
59
- return [parts.join("\n"), currentContext];
55
+ const interfaceDecl = {
56
+ kind: "interfaceDeclaration",
57
+ attributes: [],
58
+ modifiers: ["public"],
59
+ name: interfaceName,
60
+ interfaces: [],
61
+ members: interfaceMembers,
62
+ };
63
+ const wrapperDecl = {
64
+ kind: "classDeclaration",
65
+ attributes: [],
66
+ modifiers: ["public", "sealed"],
67
+ name: wrapperName,
68
+ interfaces: [{ kind: "identifierType", name: interfaceName }],
69
+ members: wrapperMembers,
70
+ };
71
+ return [[interfaceDecl, wrapperDecl], currentContext];
60
72
  };
61
73
  /**
62
74
  * Generate all structural adapters for a set of type parameters
63
75
  */
64
76
  export const generateStructuralAdapters = (typeParams, context) => {
65
77
  if (!typeParams || typeParams.length === 0) {
66
- return ["", context];
78
+ return [[], context];
67
79
  }
68
80
  const adapters = [];
69
81
  let currentContext = context;
70
82
  for (const tp of typeParams) {
71
83
  if (tp.isStructuralConstraint && tp.structuralMembers) {
72
- const [adapterCode, newContext] = generateStructuralAdapter(tp, currentContext);
73
- if (adapterCode) {
74
- adapters.push(adapterCode);
75
- currentContext = newContext;
76
- }
84
+ const [adapterDecls, newContext] = generateStructuralAdapter(tp, currentContext);
85
+ adapters.push(...adapterDecls);
86
+ currentContext = newContext;
77
87
  }
78
88
  }
79
- if (adapters.length === 0) {
80
- return ["", context];
81
- }
82
- return [adapters.join("\n\n"), currentContext];
89
+ return [adapters, currentContext];
83
90
  };
84
91
  //# sourceMappingURL=adapter-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-generator.js","sourceRoot":"","sources":["../src/adapter-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-generator.js","sourceRoot":"","sources":["../src/adapter-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * BackendAdapter — maps IR types to target-language representations.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: C# adapter maps IrType → C# type strings,
6
+ * future backends provide their own adapters.
7
+ */
8
+ import type { IrType } from "@tsonic/frontend";
9
+ /**
10
+ * Maps an IR type to a target-language type string.
11
+ */
12
+ export type TypeMapper = {
13
+ /**
14
+ * Convert an IR type to a target-language type name.
15
+ * Returns undefined if the type has no direct mapping.
16
+ */
17
+ readonly mapType: (irType: IrType) => string | undefined;
18
+ /**
19
+ * Convert an IR primitive to a target-language primitive name.
20
+ * E.g., "int32" → "int" (C#), "int32" → "i32" (Rust)
21
+ */
22
+ readonly mapPrimitive: (primitiveName: string) => string | undefined;
23
+ /**
24
+ * Map a fully-qualified CLR name to the target-language equivalent.
25
+ * E.g., "System.Collections.Generic.List`1" → "List<T>" (C#)
26
+ */
27
+ readonly mapQualifiedName: (fqn: string) => string | undefined;
28
+ };
29
+ /**
30
+ * Full backend adapter combining type mapping with emission utilities.
31
+ */
32
+ export type BackendAdapter = {
33
+ readonly typeMapper: TypeMapper;
34
+ readonly backendName: string;
35
+ };
36
+ //# sourceMappingURL=backend-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-adapter.d.ts","sourceRoot":"","sources":["../../src/contracts/backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAEzD;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAErE;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * BackendAdapter — maps IR types to target-language representations.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: C# adapter maps IrType → C# type strings,
6
+ * future backends provide their own adapters.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=backend-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-adapter.js","sourceRoot":"","sources":["../../src/contracts/backend-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * EmitterContract — the interface that any Tsonic backend must implement.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: the C# emitter implements this, new backends implement it too.
6
+ */
7
+ import type { IrModule } from "@tsonic/frontend";
8
+ /**
9
+ * Configuration provided to the backend by the compilation pipeline.
10
+ */
11
+ export type EmitterConfig = {
12
+ readonly projectRoot: string;
13
+ readonly outputDir: string;
14
+ readonly moduleMap: ReadonlyMap<string, string>;
15
+ readonly typeRoots: readonly string[];
16
+ };
17
+ /**
18
+ * Result of emitting a single module.
19
+ */
20
+ export type EmitResult = {
21
+ readonly fileName: string;
22
+ readonly content: string;
23
+ readonly diagnostics: readonly EmitDiagnostic[];
24
+ };
25
+ /**
26
+ * Diagnostic from the emission phase.
27
+ */
28
+ export type EmitDiagnostic = {
29
+ readonly code: string;
30
+ readonly message: string;
31
+ readonly filePath?: string;
32
+ readonly line?: number;
33
+ };
34
+ /**
35
+ * The contract that every backend must satisfy.
36
+ *
37
+ * The compilation pipeline calls emitModule() for each IrModule,
38
+ * then assembleOutput() to produce the final file content.
39
+ */
40
+ export type EmitterContract = {
41
+ /**
42
+ * Emit a single module to the target language.
43
+ */
44
+ readonly emitModule: (module: IrModule, config: EmitterConfig) => EmitResult;
45
+ /**
46
+ * Return the file extension for the target language (e.g., ".cs", ".py").
47
+ */
48
+ readonly fileExtension: string;
49
+ /**
50
+ * Human-readable backend name (e.g., "csharp", "python").
51
+ */
52
+ readonly backendName: string;
53
+ };
54
+ //# sourceMappingURL=emitter-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-contract.d.ts","sourceRoot":"","sources":["../../src/contracts/emitter-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,KAAK,UAAU,CAAC;IAE7E;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * EmitterContract — the interface that any Tsonic backend must implement.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: the C# emitter implements this, new backends implement it too.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=emitter-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-contract.js","sourceRoot":"","sources":["../../src/contracts/emitter-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ImportClassifier — categorizes imports for backend-specific handling.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: used by the backend adapter to classify imports before
6
+ * emitting language-specific import statements.
7
+ */
8
+ import type { IrImport } from "@tsonic/frontend";
9
+ /**
10
+ * Classification of an import for backend emission.
11
+ */
12
+ export type ImportClassification = {
13
+ readonly kind: "clrNamespace";
14
+ readonly namespace: string;
15
+ } | {
16
+ readonly kind: "localModule";
17
+ readonly modulePath: string;
18
+ } | {
19
+ readonly kind: "external";
20
+ readonly packageName: string;
21
+ } | {
22
+ readonly kind: "builtin";
23
+ };
24
+ /**
25
+ * Classifies imports into categories that backends can handle differently.
26
+ *
27
+ * C# backend: clrNamespace → `using Namespace;`
28
+ * localModule → file-level dependency
29
+ * external → package reference
30
+ *
31
+ * Future backends would map these categories to their own import systems.
32
+ */
33
+ export type ImportClassifier = {
34
+ readonly classify: (imp: IrImport) => ImportClassification;
35
+ };
36
+ //# sourceMappingURL=import-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-classifier.d.ts","sourceRoot":"","sources":["../../src/contracts/import-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,oBAAoB,CAAC;CAC5D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ImportClassifier — categorizes imports for backend-specific handling.
3
+ *
4
+ * Plan-black: type-only forward declaration. No code imports this.
5
+ * Plan-beta: used by the backend adapter to classify imports before
6
+ * emitting language-specific import statements.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=import-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-classifier.js","sourceRoot":"","sources":["../../src/contracts/import-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Attribute emission helpers
3
3
  *
4
- * Emits C# attribute syntax from IrAttribute nodes.
4
+ * Emits C# attribute syntax from IrAttribute nodes as CSharpAttributeAst.
5
5
  *
6
6
  * Example:
7
7
  * ```typescript
@@ -19,27 +19,22 @@
19
19
  * ```
20
20
  */
21
21
  import { IrAttribute } from "@tsonic/frontend";
22
- import { EmitterContext } from "../types.js";
22
+ import { EmitterContext } from "../../types.js";
23
+ import type { CSharpAttributeAst } from "./backend-ast/types.js";
23
24
  /**
24
- * Emit all attributes for a declaration.
25
+ * Emit all attributes for a declaration as CSharpAttributeAst[].
25
26
  *
26
27
  * @param attributes - Array of attributes (may be undefined)
27
28
  * @param context - Emitter context
28
- * @returns Tuple of [attribute lines string, context]
29
- *
30
- * Returns empty string if no attributes.
31
- * Each attribute is on its own line with the current indentation.
29
+ * @returns Tuple of [attribute ASTs, context]
32
30
  */
33
- export declare const emitAttributes: (attributes: readonly IrAttribute[] | undefined, context: EmitterContext) => [string, EmitterContext];
31
+ export declare const emitAttributes: (attributes: readonly IrAttribute[] | undefined, context: EmitterContext) => [readonly CSharpAttributeAst[], EmitterContext];
34
32
  /**
35
- * Emit parameter-level attributes inline.
33
+ * Emit parameter-level attributes as CSharpAttributeAst[].
36
34
  *
37
35
  * @param attributes - Array of attributes (may be undefined)
38
36
  * @param context - Emitter context
39
- * @returns Tuple of [attribute prefix string, context]
40
- *
41
- * Returns empty string if no attributes.
42
- * Format: `[Attr1][Attr2] ` (with trailing space if any attributes)
37
+ * @returns Tuple of [attribute ASTs, context]
43
38
  */
44
- export declare const emitParameterAttributes: (attributes: readonly IrAttribute[] | undefined, context: EmitterContext) => [string, EmitterContext];
39
+ export declare const emitParameterAttributes: (attributes: readonly IrAttribute[] | undefined, context: EmitterContext) => [readonly CSharpAttributeAst[], EmitterContext];
45
40
  //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/core/format/attributes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AAoJhC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,SAAS,WAAW,EAAE,GAAG,SAAS,EAC9C,SAAS,cAAc,KACtB,CAAC,SAAS,kBAAkB,EAAE,EAAE,cAAc,CAehD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,SAAS,WAAW,EAAE,GAAG,SAAS,EAC9C,SAAS,cAAc,KACtB,CAAC,SAAS,kBAAkB,EAAE,EAAE,cAAc,CAehD,CAAC"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Attribute emission helpers
3
+ *
4
+ * Emits C# attribute syntax from IrAttribute nodes as CSharpAttributeAst.
5
+ *
6
+ * Example:
7
+ * ```typescript
8
+ * A.on(User).type.add(SerializableAttribute);
9
+ * A.on(User).type.add(DataContractAttribute, { Name: "UserDTO" });
10
+ * A.on(User).method((x) => x.foo).target("return").add(MarshalAsAttribute, UnmanagedType.Bool);
11
+ * ```
12
+ *
13
+ * Emits:
14
+ * ```csharp
15
+ * [global::System.SerializableAttribute]
16
+ * [global::System.Runtime.Serialization.DataContractAttribute(Name = "UserDTO")]
17
+ * [return: global::System.Runtime.InteropServices.MarshalAsAttribute(global::System.Runtime.InteropServices.UnmanagedType.Bool)]
18
+ * public class User { ... }
19
+ * ```
20
+ */
21
+ import { emitTypeAst } from "../../type-emitter.js";
22
+ /**
23
+ * Emit a single attribute argument value as CSharpExpressionAst.
24
+ */
25
+ const emitAttributeArgAst = (arg, context) => {
26
+ switch (arg.kind) {
27
+ case "string":
28
+ return [
29
+ {
30
+ kind: "literalExpression",
31
+ text: `"${arg.value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`,
32
+ },
33
+ context,
34
+ ];
35
+ case "number":
36
+ return [{ kind: "literalExpression", text: String(arg.value) }, context];
37
+ case "boolean":
38
+ return [
39
+ { kind: "literalExpression", text: arg.value ? "true" : "false" },
40
+ context,
41
+ ];
42
+ case "typeof": {
43
+ const [typeAst, newContext] = emitTypeAst(arg.type, context);
44
+ return [{ kind: "typeofExpression", type: typeAst }, newContext];
45
+ }
46
+ case "enum": {
47
+ const [typeAst, newContext] = emitTypeAst(arg.type, context);
48
+ return [
49
+ {
50
+ kind: "memberAccessExpression",
51
+ expression: {
52
+ kind: "identifierExpression",
53
+ identifier: extractTypeName(typeAst),
54
+ },
55
+ memberName: arg.member,
56
+ },
57
+ newContext,
58
+ ];
59
+ }
60
+ case "array": {
61
+ const elements = [];
62
+ let currentContext = context;
63
+ for (const el of arg.elements) {
64
+ const [elAst, newContext] = emitAttributeArgAst(el, currentContext);
65
+ elements.push(elAst);
66
+ currentContext = newContext;
67
+ }
68
+ return [
69
+ {
70
+ kind: "arrayCreationExpression",
71
+ elementType: { kind: "varType" },
72
+ initializer: elements,
73
+ },
74
+ currentContext,
75
+ ];
76
+ }
77
+ }
78
+ };
79
+ /**
80
+ * Extract a printable type name from a CSharpTypeAst without calling printType.
81
+ * Handles the common cases (identifierType, predefinedType).
82
+ * Falls back to printType for exotic shapes.
83
+ */
84
+ const extractTypeName = (typeAst) => {
85
+ if (typeAst.kind === "predefinedType") {
86
+ return typeAst.keyword;
87
+ }
88
+ if (typeAst.kind === "identifierType") {
89
+ const args = typeAst.typeArguments && typeAst.typeArguments.length > 0
90
+ ? `<${typeAst.typeArguments.map(extractTypeName).join(", ")}>`
91
+ : "";
92
+ return `${typeAst.name}${args}`;
93
+ }
94
+ if (typeAst.kind === "nullableType") {
95
+ return `${extractTypeName(typeAst.underlyingType)}?`;
96
+ }
97
+ if (typeAst.kind === "arrayType") {
98
+ const rank = typeAst.rank > 1
99
+ ? `[${",".repeat(Math.max(0, typeAst.rank - 1))}]`
100
+ : "[]";
101
+ return `${extractTypeName(typeAst.elementType)}${rank}`;
102
+ }
103
+ if (typeAst.kind === "pointerType") {
104
+ return `${extractTypeName(typeAst.elementType)}*`;
105
+ }
106
+ if (typeAst.kind === "tupleType") {
107
+ const elems = typeAst.elements
108
+ .map((e) => e.name
109
+ ? `${extractTypeName(e.type)} ${e.name}`
110
+ : extractTypeName(e.type))
111
+ .join(", ");
112
+ return `(${elems})`;
113
+ }
114
+ if (typeAst.kind === "varType") {
115
+ return "var";
116
+ }
117
+ throw new Error("ICE: Unsupported attribute type AST.");
118
+ };
119
+ /**
120
+ * Emit a single attribute as CSharpAttributeAst.
121
+ */
122
+ const emitAttributeAst = (attr, context) => {
123
+ const [typeAst, typeContext] = emitTypeAst(attr.attributeType, context);
124
+ const args = [];
125
+ let currentContext = typeContext;
126
+ // Emit positional arguments
127
+ for (const arg of attr.positionalArgs) {
128
+ const [argAst, newContext] = emitAttributeArgAst(arg, currentContext);
129
+ args.push(argAst);
130
+ currentContext = newContext;
131
+ }
132
+ // Emit named arguments as assignment expressions
133
+ for (const [name, arg] of attr.namedArgs) {
134
+ const [argAst, newContext] = emitAttributeArgAst(arg, currentContext);
135
+ args.push({
136
+ kind: "assignmentExpression",
137
+ operatorToken: "=",
138
+ left: { kind: "identifierExpression", identifier: name },
139
+ right: argAst,
140
+ });
141
+ currentContext = newContext;
142
+ }
143
+ const result = {
144
+ type: typeAst,
145
+ ...(args.length > 0 ? { arguments: args } : {}),
146
+ ...(attr.target ? { target: attr.target } : {}),
147
+ };
148
+ return [result, currentContext];
149
+ };
150
+ /**
151
+ * Emit all attributes for a declaration as CSharpAttributeAst[].
152
+ *
153
+ * @param attributes - Array of attributes (may be undefined)
154
+ * @param context - Emitter context
155
+ * @returns Tuple of [attribute ASTs, context]
156
+ */
157
+ export const emitAttributes = (attributes, context) => {
158
+ if (!attributes || attributes.length === 0) {
159
+ return [[], context];
160
+ }
161
+ const result = [];
162
+ let currentContext = context;
163
+ for (const attr of attributes) {
164
+ const [attrAst, newContext] = emitAttributeAst(attr, currentContext);
165
+ currentContext = newContext;
166
+ result.push(attrAst);
167
+ }
168
+ return [result, currentContext];
169
+ };
170
+ /**
171
+ * Emit parameter-level attributes as CSharpAttributeAst[].
172
+ *
173
+ * @param attributes - Array of attributes (may be undefined)
174
+ * @param context - Emitter context
175
+ * @returns Tuple of [attribute ASTs, context]
176
+ */
177
+ export const emitParameterAttributes = (attributes, context) => {
178
+ if (!attributes || attributes.length === 0) {
179
+ return [[], context];
180
+ }
181
+ const result = [];
182
+ let currentContext = context;
183
+ for (const attr of attributes) {
184
+ const [attrAst, newContext] = emitAttributeAst(attr, currentContext);
185
+ currentContext = newContext;
186
+ result.push(attrAst);
187
+ }
188
+ return [result, currentContext];
189
+ };
190
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../src/core/format/attributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.test.d.ts","sourceRoot":"","sources":["../../../src/core/format/attributes.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}