@tsonic/emitter 0.0.74 → 0.0.75

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 (1497) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/array.test.js +277 -6
  3. package/dist/array.test.js.map +1 -1
  4. package/dist/core/format/attributes.d.ts +3 -3
  5. package/dist/core/format/attributes.js +3 -3
  6. package/dist/core/format/backend-ast/builders.d.ts +1 -0
  7. package/dist/core/format/backend-ast/builders.d.ts.map +1 -1
  8. package/dist/core/format/backend-ast/builders.js +44 -22
  9. package/dist/core/format/backend-ast/builders.js.map +1 -1
  10. package/dist/core/format/backend-ast/invariants.test.js +15 -8
  11. package/dist/core/format/backend-ast/invariants.test.js.map +1 -1
  12. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.d.ts +2 -0
  13. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.d.ts.map +1 -0
  14. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.js +226 -0
  15. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.js.map +1 -0
  16. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.d.ts +2 -0
  17. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.d.ts.map +1 -0
  18. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.js +289 -0
  19. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.js.map +1 -0
  20. package/dist/core/format/backend-ast/printer-cases/helpers.d.ts +6 -0
  21. package/dist/core/format/backend-ast/printer-cases/helpers.d.ts.map +1 -0
  22. package/dist/core/format/backend-ast/printer-cases/helpers.js +5 -0
  23. package/dist/core/format/backend-ast/printer-cases/helpers.js.map +1 -0
  24. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.d.ts +2 -0
  25. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.d.ts.map +1 -0
  26. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.js +211 -0
  27. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.js.map +1 -0
  28. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.d.ts +2 -0
  29. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.d.ts.map +1 -0
  30. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.js +186 -0
  31. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.js.map +1 -0
  32. package/dist/core/format/backend-ast/printer-colon-detection.d.ts +14 -0
  33. package/dist/core/format/backend-ast/printer-colon-detection.d.ts.map +1 -0
  34. package/dist/core/format/backend-ast/printer-colon-detection.js +141 -0
  35. package/dist/core/format/backend-ast/printer-colon-detection.js.map +1 -0
  36. package/dist/core/format/backend-ast/printer-declarations.d.ts +12 -0
  37. package/dist/core/format/backend-ast/printer-declarations.d.ts.map +1 -0
  38. package/dist/core/format/backend-ast/printer-declarations.js +212 -0
  39. package/dist/core/format/backend-ast/printer-declarations.js.map +1 -0
  40. package/dist/core/format/backend-ast/printer-expressions.d.ts +12 -0
  41. package/dist/core/format/backend-ast/printer-expressions.d.ts.map +1 -0
  42. package/dist/core/format/backend-ast/printer-expressions.js +363 -0
  43. package/dist/core/format/backend-ast/printer-expressions.js.map +1 -0
  44. package/dist/core/format/backend-ast/printer-identifiers.d.ts +31 -0
  45. package/dist/core/format/backend-ast/printer-identifiers.d.ts.map +1 -0
  46. package/dist/core/format/backend-ast/printer-identifiers.js +194 -0
  47. package/dist/core/format/backend-ast/printer-identifiers.js.map +1 -0
  48. package/dist/core/format/backend-ast/printer-precedence.d.ts +23 -0
  49. package/dist/core/format/backend-ast/printer-precedence.d.ts.map +1 -0
  50. package/dist/core/format/backend-ast/printer-precedence.js +225 -0
  51. package/dist/core/format/backend-ast/printer-precedence.js.map +1 -0
  52. package/dist/core/format/backend-ast/printer-shared.d.ts +12 -0
  53. package/dist/core/format/backend-ast/printer-shared.d.ts.map +1 -0
  54. package/dist/core/format/backend-ast/printer-shared.js +12 -0
  55. package/dist/core/format/backend-ast/printer-shared.js.map +1 -0
  56. package/dist/core/format/backend-ast/printer-statements.d.ts +24 -0
  57. package/dist/core/format/backend-ast/printer-statements.d.ts.map +1 -0
  58. package/dist/core/format/backend-ast/printer-statements.js +336 -0
  59. package/dist/core/format/backend-ast/printer-statements.js.map +1 -0
  60. package/dist/core/format/backend-ast/printer.d.ts +10 -23
  61. package/dist/core/format/backend-ast/printer.d.ts.map +1 -1
  62. package/dist/core/format/backend-ast/printer.js +11 -1389
  63. package/dist/core/format/backend-ast/printer.js.map +1 -1
  64. package/dist/core/format/backend-ast/printer.test.d.ts +4 -1
  65. package/dist/core/format/backend-ast/printer.test.d.ts.map +1 -1
  66. package/dist/core/format/backend-ast/printer.test.js +4 -795
  67. package/dist/core/format/backend-ast/printer.test.js.map +1 -1
  68. package/dist/core/format/backend-ast/types/compilation-unit-ast.d.ts +26 -0
  69. package/dist/core/format/backend-ast/types/compilation-unit-ast.d.ts.map +1 -0
  70. package/dist/core/format/backend-ast/types/compilation-unit-ast.js +2 -0
  71. package/dist/core/format/backend-ast/types/compilation-unit-ast.js.map +1 -0
  72. package/dist/core/format/backend-ast/types/declaration-ast.d.ts +105 -0
  73. package/dist/core/format/backend-ast/types/declaration-ast.d.ts.map +1 -0
  74. package/dist/core/format/backend-ast/types/declaration-ast.js +2 -0
  75. package/dist/core/format/backend-ast/types/declaration-ast.js.map +1 -0
  76. package/dist/core/format/backend-ast/types/expression-ast.d.ts +219 -0
  77. package/dist/core/format/backend-ast/types/expression-ast.d.ts.map +1 -0
  78. package/dist/core/format/backend-ast/types/expression-ast.js +2 -0
  79. package/dist/core/format/backend-ast/types/expression-ast.js.map +1 -0
  80. package/dist/core/format/backend-ast/types/pattern-ast.d.ts +28 -0
  81. package/dist/core/format/backend-ast/types/pattern-ast.d.ts.map +1 -0
  82. package/dist/core/format/backend-ast/types/pattern-ast.js +2 -0
  83. package/dist/core/format/backend-ast/types/pattern-ast.js.map +1 -0
  84. package/dist/core/format/backend-ast/types/signature-ast.d.ts +34 -0
  85. package/dist/core/format/backend-ast/types/signature-ast.d.ts.map +1 -0
  86. package/dist/core/format/backend-ast/types/signature-ast.js +2 -0
  87. package/dist/core/format/backend-ast/types/signature-ast.js.map +1 -0
  88. package/dist/core/format/backend-ast/types/statement-ast.d.ts +118 -0
  89. package/dist/core/format/backend-ast/types/statement-ast.d.ts.map +1 -0
  90. package/dist/core/format/backend-ast/types/statement-ast.js +2 -0
  91. package/dist/core/format/backend-ast/types/statement-ast.js.map +1 -0
  92. package/dist/core/format/backend-ast/types/type-ast.d.ts +50 -0
  93. package/dist/core/format/backend-ast/types/type-ast.d.ts.map +1 -0
  94. package/dist/core/format/backend-ast/types/type-ast.js +2 -0
  95. package/dist/core/format/backend-ast/types/type-ast.js.map +1 -0
  96. package/dist/core/format/backend-ast/types.d.ts +7 -549
  97. package/dist/core/format/backend-ast/types.d.ts.map +1 -1
  98. package/dist/core/format/backend-ast/types.js +7 -1
  99. package/dist/core/format/backend-ast/types.js.map +1 -1
  100. package/dist/core/format/backend-ast/utils.d.ts +4 -0
  101. package/dist/core/format/backend-ast/utils.d.ts.map +1 -1
  102. package/dist/core/format/backend-ast/utils.js +87 -16
  103. package/dist/core/format/backend-ast/utils.js.map +1 -1
  104. package/dist/core/format/backend-ast/utils.test.js +67 -4
  105. package/dist/core/format/backend-ast/utils.test.js.map +1 -1
  106. package/dist/core/format/local-names.d.ts +26 -0
  107. package/dist/core/format/local-names.d.ts.map +1 -1
  108. package/dist/core/format/local-names.js +59 -0
  109. package/dist/core/format/local-names.js.map +1 -1
  110. package/dist/core/format/local-names.test.d.ts +12 -0
  111. package/dist/core/format/local-names.test.d.ts.map +1 -0
  112. package/dist/core/format/local-names.test.js +278 -0
  113. package/dist/core/format/local-names.test.js.map +1 -0
  114. package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -1
  115. package/dist/core/format/module-emitter/orchestrator.js +1 -152
  116. package/dist/core/format/module-emitter/orchestrator.js.map +1 -1
  117. package/dist/core/format/module-emitter/static-container.d.ts.map +1 -1
  118. package/dist/core/format/module-emitter/static-container.js +17 -1
  119. package/dist/core/format/module-emitter/static-container.js.map +1 -1
  120. package/dist/core/module-emitter-cases/class-and-recursion.test.d.ts +6 -0
  121. package/dist/core/module-emitter-cases/class-and-recursion.test.d.ts.map +1 -0
  122. package/dist/core/module-emitter-cases/class-and-recursion.test.js +263 -0
  123. package/dist/core/module-emitter-cases/class-and-recursion.test.js.map +1 -0
  124. package/dist/core/module-emitter-cases/static-containers.test.d.ts +6 -0
  125. package/dist/core/module-emitter-cases/static-containers.test.d.ts.map +1 -0
  126. package/dist/core/module-emitter-cases/static-containers.test.js +275 -0
  127. package/dist/core/module-emitter-cases/static-containers.test.js.map +1 -0
  128. package/dist/core/module-emitter.test.d.ts +2 -5
  129. package/dist/core/module-emitter.test.d.ts.map +1 -1
  130. package/dist/core/module-emitter.test.js +2 -403
  131. package/dist/core/module-emitter.test.js.map +1 -1
  132. package/dist/core/semantic/array-expected-types.d.ts +6 -0
  133. package/dist/core/semantic/array-expected-types.d.ts.map +1 -0
  134. package/dist/core/semantic/array-expected-types.js +84 -0
  135. package/dist/core/semantic/array-expected-types.js.map +1 -0
  136. package/dist/core/semantic/array-expected-types.test.d.ts +2 -0
  137. package/dist/core/semantic/array-expected-types.test.d.ts.map +1 -0
  138. package/dist/core/semantic/array-expected-types.test.js +66 -0
  139. package/dist/core/semantic/array-expected-types.test.js.map +1 -0
  140. package/dist/core/semantic/assignment-flow.d.ts +9 -0
  141. package/dist/core/semantic/assignment-flow.d.ts.map +1 -0
  142. package/dist/core/semantic/assignment-flow.js +161 -0
  143. package/dist/core/semantic/assignment-flow.js.map +1 -0
  144. package/dist/core/semantic/async-wrapper-types.d.ts +6 -0
  145. package/dist/core/semantic/async-wrapper-types.d.ts.map +1 -0
  146. package/dist/core/semantic/async-wrapper-types.js +65 -0
  147. package/dist/core/semantic/async-wrapper-types.js.map +1 -0
  148. package/dist/core/semantic/boolean-condition-emission.d.ts +9 -0
  149. package/dist/core/semantic/boolean-condition-emission.d.ts.map +1 -0
  150. package/dist/core/semantic/boolean-condition-emission.js +9 -0
  151. package/dist/core/semantic/boolean-condition-emission.js.map +1 -0
  152. package/dist/core/semantic/boolean-condition-main.d.ts +38 -0
  153. package/dist/core/semantic/boolean-condition-main.d.ts.map +1 -0
  154. package/dist/core/semantic/boolean-condition-main.js +235 -0
  155. package/dist/core/semantic/boolean-condition-main.js.map +1 -0
  156. package/dist/core/semantic/boolean-condition-union.d.ts +20 -0
  157. package/dist/core/semantic/boolean-condition-union.d.ts.map +1 -0
  158. package/dist/core/semantic/boolean-condition-union.js +238 -0
  159. package/dist/core/semantic/boolean-condition-union.js.map +1 -0
  160. package/dist/core/semantic/boolean-context.d.ts +6 -40
  161. package/dist/core/semantic/boolean-context.d.ts.map +1 -1
  162. package/dist/core/semantic/boolean-context.js +6 -709
  163. package/dist/core/semantic/boolean-context.js.map +1 -1
  164. package/dist/core/semantic/boolean-context.test.js +22 -2
  165. package/dist/core/semantic/boolean-context.test.js.map +1 -1
  166. package/dist/core/semantic/broad-array-storage.d.ts +11 -0
  167. package/dist/core/semantic/broad-array-storage.d.ts.map +1 -0
  168. package/dist/core/semantic/broad-array-storage.js +111 -0
  169. package/dist/core/semantic/broad-array-storage.js.map +1 -0
  170. package/dist/core/semantic/broad-object-types.d.ts +7 -0
  171. package/dist/core/semantic/broad-object-types.d.ts.map +1 -0
  172. package/dist/core/semantic/broad-object-types.js +60 -0
  173. package/dist/core/semantic/broad-object-types.js.map +1 -0
  174. package/dist/core/semantic/clr-type-identity.d.ts +21 -0
  175. package/dist/core/semantic/clr-type-identity.d.ts.map +1 -0
  176. package/dist/core/semantic/clr-type-identity.js +230 -0
  177. package/dist/core/semantic/clr-type-identity.js.map +1 -0
  178. package/dist/core/semantic/comparable-types.d.ts +5 -0
  179. package/dist/core/semantic/comparable-types.d.ts.map +1 -0
  180. package/dist/core/semantic/comparable-types.js +108 -0
  181. package/dist/core/semantic/comparable-types.js.map +1 -0
  182. package/dist/core/semantic/comparable-types.test.d.ts +2 -0
  183. package/dist/core/semantic/comparable-types.test.d.ts.map +1 -0
  184. package/dist/core/semantic/comparable-types.test.js +199 -0
  185. package/dist/core/semantic/comparable-types.test.js.map +1 -0
  186. package/dist/core/semantic/condition-branch-narrowing.d.ts +6 -0
  187. package/dist/core/semantic/condition-branch-narrowing.d.ts.map +1 -0
  188. package/dist/core/semantic/condition-branch-narrowing.js +50 -0
  189. package/dist/core/semantic/condition-branch-narrowing.js.map +1 -0
  190. package/dist/core/semantic/defaults.d.ts +7 -0
  191. package/dist/core/semantic/defaults.d.ts.map +1 -0
  192. package/dist/core/semantic/defaults.js +61 -0
  193. package/dist/core/semantic/defaults.js.map +1 -0
  194. package/dist/core/semantic/defaults.test.d.ts +2 -0
  195. package/dist/core/semantic/defaults.test.d.ts.map +1 -0
  196. package/dist/core/semantic/defaults.test.js +88 -0
  197. package/dist/core/semantic/defaults.test.js.map +1 -0
  198. package/dist/core/semantic/deterministic-type-keys.d.ts +8 -0
  199. package/dist/core/semantic/deterministic-type-keys.d.ts.map +1 -0
  200. package/dist/core/semantic/deterministic-type-keys.js +277 -0
  201. package/dist/core/semantic/deterministic-type-keys.js.map +1 -0
  202. package/dist/core/semantic/direct-storage-ir-types.d.ts +12 -0
  203. package/dist/core/semantic/direct-storage-ir-types.d.ts.map +1 -0
  204. package/dist/core/semantic/direct-storage-ir-types.js +189 -0
  205. package/dist/core/semantic/direct-storage-ir-types.js.map +1 -0
  206. package/dist/core/semantic/direct-value-surfaces.d.ts +9 -0
  207. package/dist/core/semantic/direct-value-surfaces.d.ts.map +1 -0
  208. package/dist/core/semantic/direct-value-surfaces.js +181 -0
  209. package/dist/core/semantic/direct-value-surfaces.js.map +1 -0
  210. package/dist/core/semantic/direct-value-surfaces.test.d.ts +2 -0
  211. package/dist/core/semantic/direct-value-surfaces.test.d.ts.map +1 -0
  212. package/dist/core/semantic/direct-value-surfaces.test.js +116 -0
  213. package/dist/core/semantic/direct-value-surfaces.test.js.map +1 -0
  214. package/dist/core/semantic/expected-type-matching.d.ts +7 -0
  215. package/dist/core/semantic/expected-type-matching.d.ts.map +1 -0
  216. package/dist/core/semantic/expected-type-matching.js +101 -0
  217. package/dist/core/semantic/expected-type-matching.js.map +1 -0
  218. package/dist/core/semantic/guard-primitives.d.ts +29 -0
  219. package/dist/core/semantic/guard-primitives.d.ts.map +1 -0
  220. package/dist/core/semantic/guard-primitives.js +80 -0
  221. package/dist/core/semantic/guard-primitives.js.map +1 -0
  222. package/dist/core/semantic/implicit-interfaces.d.ts +34 -0
  223. package/dist/core/semantic/implicit-interfaces.d.ts.map +1 -0
  224. package/dist/core/semantic/implicit-interfaces.js +276 -0
  225. package/dist/core/semantic/implicit-interfaces.js.map +1 -0
  226. package/dist/core/semantic/implicit-interfaces.test.d.ts +2 -0
  227. package/dist/core/semantic/implicit-interfaces.test.d.ts.map +1 -0
  228. package/dist/core/semantic/implicit-interfaces.test.js +280 -0
  229. package/dist/core/semantic/implicit-interfaces.test.js.map +1 -0
  230. package/dist/core/semantic/imports-cases/basic-and-local.test.d.ts +6 -0
  231. package/dist/core/semantic/imports-cases/basic-and-local.test.d.ts.map +1 -0
  232. package/dist/core/semantic/imports-cases/basic-and-local.test.js +504 -0
  233. package/dist/core/semantic/imports-cases/basic-and-local.test.js.map +1 -0
  234. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.d.ts +6 -0
  235. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.d.ts.map +1 -0
  236. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.js +932 -0
  237. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.js.map +1 -0
  238. package/dist/core/semantic/imports.d.ts.map +1 -1
  239. package/dist/core/semantic/imports.js +158 -22
  240. package/dist/core/semantic/imports.js.map +1 -1
  241. package/dist/core/semantic/imports.test.d.ts +2 -5
  242. package/dist/core/semantic/imports.test.d.ts.map +1 -1
  243. package/dist/core/semantic/imports.test.js +2 -551
  244. package/dist/core/semantic/imports.test.js.map +1 -1
  245. package/dist/core/semantic/instanceof-predicate-refinements.d.ts +10 -0
  246. package/dist/core/semantic/instanceof-predicate-refinements.d.ts.map +1 -0
  247. package/dist/core/semantic/instanceof-predicate-refinements.js +189 -0
  248. package/dist/core/semantic/instanceof-predicate-refinements.js.map +1 -0
  249. package/dist/core/semantic/instanceof-targets.d.ts +10 -0
  250. package/dist/core/semantic/instanceof-targets.d.ts.map +1 -0
  251. package/dist/core/semantic/instanceof-targets.js +20 -0
  252. package/dist/core/semantic/instanceof-targets.js.map +1 -0
  253. package/dist/core/semantic/iteration-types.d.ts +11 -0
  254. package/dist/core/semantic/iteration-types.d.ts.map +1 -0
  255. package/dist/core/semantic/iteration-types.js +116 -0
  256. package/dist/core/semantic/iteration-types.js.map +1 -0
  257. package/dist/core/semantic/js-value-types.d.ts +5 -0
  258. package/dist/core/semantic/js-value-types.d.ts.map +1 -0
  259. package/dist/core/semantic/js-value-types.js +42 -0
  260. package/dist/core/semantic/js-value-types.js.map +1 -0
  261. package/dist/core/semantic/local-type-lookup.d.ts +8 -0
  262. package/dist/core/semantic/local-type-lookup.d.ts.map +1 -0
  263. package/dist/core/semantic/local-type-lookup.js +36 -0
  264. package/dist/core/semantic/local-type-lookup.js.map +1 -0
  265. package/dist/core/semantic/local-types.d.ts +1 -0
  266. package/dist/core/semantic/local-types.d.ts.map +1 -1
  267. package/dist/core/semantic/local-types.js +269 -0
  268. package/dist/core/semantic/local-types.js.map +1 -1
  269. package/dist/core/semantic/materialized-narrowing.d.ts +5 -0
  270. package/dist/core/semantic/materialized-narrowing.d.ts.map +1 -0
  271. package/dist/core/semantic/materialized-narrowing.js +361 -0
  272. package/dist/core/semantic/materialized-narrowing.js.map +1 -0
  273. package/dist/core/semantic/materialized-narrowing.test.d.ts +2 -0
  274. package/dist/core/semantic/materialized-narrowing.test.d.ts.map +1 -0
  275. package/dist/core/semantic/materialized-narrowing.test.js +321 -0
  276. package/dist/core/semantic/materialized-narrowing.test.js.map +1 -0
  277. package/dist/core/semantic/member-surfaces.d.ts +10 -0
  278. package/dist/core/semantic/member-surfaces.d.ts.map +1 -0
  279. package/dist/core/semantic/member-surfaces.js +108 -0
  280. package/dist/core/semantic/member-surfaces.js.map +1 -0
  281. package/dist/core/semantic/member-surfaces.test.d.ts +2 -0
  282. package/dist/core/semantic/member-surfaces.test.d.ts.map +1 -0
  283. package/dist/core/semantic/member-surfaces.test.js +105 -0
  284. package/dist/core/semantic/member-surfaces.test.js.map +1 -0
  285. package/dist/core/semantic/module-map.d.ts.map +1 -1
  286. package/dist/core/semantic/module-map.js +92 -2
  287. package/dist/core/semantic/module-map.js.map +1 -1
  288. package/dist/core/semantic/module-map.test.js +264 -0
  289. package/dist/core/semantic/module-map.test.js.map +1 -1
  290. package/dist/core/semantic/mutable-storage-detection.d.ts +10 -0
  291. package/dist/core/semantic/mutable-storage-detection.d.ts.map +1 -0
  292. package/dist/core/semantic/mutable-storage-detection.js +10 -0
  293. package/dist/core/semantic/mutable-storage-detection.js.map +1 -0
  294. package/dist/core/semantic/mutable-storage-expression-visitor.d.ts +12 -0
  295. package/dist/core/semantic/mutable-storage-expression-visitor.d.ts.map +1 -0
  296. package/dist/core/semantic/mutable-storage-expression-visitor.js +126 -0
  297. package/dist/core/semantic/mutable-storage-expression-visitor.js.map +1 -0
  298. package/dist/core/semantic/mutable-storage-helpers.d.ts +26 -0
  299. package/dist/core/semantic/mutable-storage-helpers.d.ts.map +1 -0
  300. package/dist/core/semantic/mutable-storage-helpers.js +203 -0
  301. package/dist/core/semantic/mutable-storage-helpers.js.map +1 -0
  302. package/dist/core/semantic/mutable-storage-statement-visitor.d.ts +5 -0
  303. package/dist/core/semantic/mutable-storage-statement-visitor.d.ts.map +1 -0
  304. package/dist/core/semantic/mutable-storage-statement-visitor.js +158 -0
  305. package/dist/core/semantic/mutable-storage-statement-visitor.js.map +1 -0
  306. package/dist/core/semantic/mutable-storage-visitors.d.ts +5 -0
  307. package/dist/core/semantic/mutable-storage-visitors.d.ts.map +1 -0
  308. package/dist/core/semantic/mutable-storage-visitors.js +17 -0
  309. package/dist/core/semantic/mutable-storage-visitors.js.map +1 -0
  310. package/dist/core/semantic/mutable-storage.d.ts +2 -9
  311. package/dist/core/semantic/mutable-storage.d.ts.map +1 -1
  312. package/dist/core/semantic/mutable-storage.js +2 -478
  313. package/dist/core/semantic/mutable-storage.js.map +1 -1
  314. package/dist/core/semantic/narrowed-expression-types.d.ts +7 -0
  315. package/dist/core/semantic/narrowed-expression-types.d.ts.map +1 -0
  316. package/dist/core/semantic/narrowed-expression-types.js +287 -0
  317. package/dist/core/semantic/narrowed-expression-types.js.map +1 -0
  318. package/dist/core/semantic/narrowed-expression-types.test.d.ts +2 -0
  319. package/dist/core/semantic/narrowed-expression-types.test.d.ts.map +1 -0
  320. package/dist/core/semantic/narrowed-expression-types.test.js +296 -0
  321. package/dist/core/semantic/narrowed-expression-types.test.js.map +1 -0
  322. package/dist/core/semantic/narrowed-union-resolution.d.ts +42 -0
  323. package/dist/core/semantic/narrowed-union-resolution.d.ts.map +1 -0
  324. package/dist/core/semantic/narrowed-union-resolution.js +162 -0
  325. package/dist/core/semantic/narrowed-union-resolution.js.map +1 -0
  326. package/dist/core/semantic/narrowing-builder-core.d.ts +46 -0
  327. package/dist/core/semantic/narrowing-builder-core.d.ts.map +1 -0
  328. package/dist/core/semantic/narrowing-builder-core.js +332 -0
  329. package/dist/core/semantic/narrowing-builder-core.js.map +1 -0
  330. package/dist/core/semantic/narrowing-builder-core.test.d.ts +2 -0
  331. package/dist/core/semantic/narrowing-builder-core.test.d.ts.map +1 -0
  332. package/dist/core/semantic/narrowing-builder-core.test.js +49 -0
  333. package/dist/core/semantic/narrowing-builder-core.test.js.map +1 -0
  334. package/dist/core/semantic/narrowing-builder-unions.d.ts +18 -0
  335. package/dist/core/semantic/narrowing-builder-unions.d.ts.map +1 -0
  336. package/dist/core/semantic/narrowing-builder-unions.js +336 -0
  337. package/dist/core/semantic/narrowing-builder-unions.js.map +1 -0
  338. package/dist/core/semantic/narrowing-builders.d.ts +10 -0
  339. package/dist/core/semantic/narrowing-builders.d.ts.map +1 -0
  340. package/dist/core/semantic/narrowing-builders.js +10 -0
  341. package/dist/core/semantic/narrowing-builders.js.map +1 -0
  342. package/dist/core/semantic/narrowing-keys.d.ts +6 -0
  343. package/dist/core/semantic/narrowing-keys.d.ts.map +1 -0
  344. package/dist/core/semantic/narrowing-keys.js +27 -0
  345. package/dist/core/semantic/narrowing-keys.js.map +1 -0
  346. package/dist/core/semantic/narrowing-refinements.d.ts +10 -0
  347. package/dist/core/semantic/narrowing-refinements.d.ts.map +1 -0
  348. package/dist/core/semantic/narrowing-refinements.js +10 -0
  349. package/dist/core/semantic/narrowing-refinements.js.map +1 -0
  350. package/dist/core/semantic/nullable-typeof-refinements.d.ts +13 -0
  351. package/dist/core/semantic/nullable-typeof-refinements.d.ts.map +1 -0
  352. package/dist/core/semantic/nullable-typeof-refinements.js +408 -0
  353. package/dist/core/semantic/nullable-typeof-refinements.js.map +1 -0
  354. package/dist/core/semantic/nullish-value-helpers.d.ts +64 -0
  355. package/dist/core/semantic/nullish-value-helpers.d.ts.map +1 -0
  356. package/dist/core/semantic/nullish-value-helpers.js +346 -0
  357. package/dist/core/semantic/nullish-value-helpers.js.map +1 -0
  358. package/dist/core/semantic/parameter-modifier-types.d.ts +3 -0
  359. package/dist/core/semantic/parameter-modifier-types.d.ts.map +1 -0
  360. package/dist/core/semantic/parameter-modifier-types.js +17 -0
  361. package/dist/core/semantic/parameter-modifier-types.js.map +1 -0
  362. package/dist/core/semantic/pattern-types.d.ts +59 -0
  363. package/dist/core/semantic/pattern-types.d.ts.map +1 -0
  364. package/dist/core/semantic/pattern-types.js +92 -0
  365. package/dist/core/semantic/pattern-types.js.map +1 -0
  366. package/dist/core/semantic/property-lookup-membership.d.ts +30 -0
  367. package/dist/core/semantic/property-lookup-membership.d.ts.map +1 -0
  368. package/dist/core/semantic/property-lookup-membership.js +176 -0
  369. package/dist/core/semantic/property-lookup-membership.js.map +1 -0
  370. package/dist/core/semantic/property-lookup-resolution.d.ts +52 -0
  371. package/dist/core/semantic/property-lookup-resolution.d.ts.map +1 -0
  372. package/dist/core/semantic/property-lookup-resolution.js +275 -0
  373. package/dist/core/semantic/property-lookup-resolution.js.map +1 -0
  374. package/dist/core/semantic/property-member-lookup.d.ts +10 -0
  375. package/dist/core/semantic/property-member-lookup.d.ts.map +1 -0
  376. package/dist/core/semantic/property-member-lookup.js +10 -0
  377. package/dist/core/semantic/property-member-lookup.js.map +1 -0
  378. package/dist/core/semantic/reference-type-identity.d.ts +10 -0
  379. package/dist/core/semantic/reference-type-identity.d.ts.map +1 -0
  380. package/dist/core/semantic/reference-type-identity.js +28 -0
  381. package/dist/core/semantic/reference-type-identity.js.map +1 -0
  382. package/dist/core/semantic/runtime-call-arities.d.ts +4 -0
  383. package/dist/core/semantic/runtime-call-arities.d.ts.map +1 -0
  384. package/dist/core/semantic/runtime-call-arities.js +104 -0
  385. package/dist/core/semantic/runtime-call-arities.js.map +1 -0
  386. package/dist/core/semantic/runtime-materialization-targets.d.ts +4 -0
  387. package/dist/core/semantic/runtime-materialization-targets.d.ts.map +1 -0
  388. package/dist/core/semantic/runtime-materialization-targets.js +69 -0
  389. package/dist/core/semantic/runtime-materialization-targets.js.map +1 -0
  390. package/dist/core/semantic/runtime-reification-helpers.d.ts +9 -0
  391. package/dist/core/semantic/runtime-reification-helpers.d.ts.map +1 -0
  392. package/dist/core/semantic/runtime-reification-helpers.js +99 -0
  393. package/dist/core/semantic/runtime-reification-helpers.js.map +1 -0
  394. package/dist/core/semantic/runtime-reification.d.ts +16 -0
  395. package/dist/core/semantic/runtime-reification.d.ts.map +1 -0
  396. package/dist/core/semantic/runtime-reification.js +609 -0
  397. package/dist/core/semantic/runtime-reification.js.map +1 -0
  398. package/dist/core/semantic/runtime-union-alias-identity.d.ts +5 -0
  399. package/dist/core/semantic/runtime-union-alias-identity.d.ts.map +1 -0
  400. package/dist/core/semantic/runtime-union-alias-identity.js +27 -0
  401. package/dist/core/semantic/runtime-union-alias-identity.js.map +1 -0
  402. package/dist/core/semantic/runtime-union-expansion.d.ts +5 -0
  403. package/dist/core/semantic/runtime-union-expansion.d.ts.map +1 -0
  404. package/dist/core/semantic/runtime-union-expansion.js +190 -0
  405. package/dist/core/semantic/runtime-union-expansion.js.map +1 -0
  406. package/dist/core/semantic/runtime-union-family-preservation.d.ts +5 -0
  407. package/dist/core/semantic/runtime-union-family-preservation.d.ts.map +1 -0
  408. package/dist/core/semantic/runtime-union-family-preservation.js +34 -0
  409. package/dist/core/semantic/runtime-union-family-preservation.js.map +1 -0
  410. package/dist/core/semantic/runtime-union-matching.d.ts +9 -0
  411. package/dist/core/semantic/runtime-union-matching.d.ts.map +1 -0
  412. package/dist/core/semantic/runtime-union-matching.js +121 -0
  413. package/dist/core/semantic/runtime-union-matching.js.map +1 -0
  414. package/dist/core/semantic/runtime-union-member-mapping.d.ts +12 -0
  415. package/dist/core/semantic/runtime-union-member-mapping.d.ts.map +1 -0
  416. package/dist/core/semantic/runtime-union-member-mapping.js +25 -0
  417. package/dist/core/semantic/runtime-union-member-mapping.js.map +1 -0
  418. package/dist/core/semantic/runtime-union-member-mapping.test.d.ts +2 -0
  419. package/dist/core/semantic/runtime-union-member-mapping.test.d.ts.map +1 -0
  420. package/dist/core/semantic/runtime-union-member-mapping.test.js +54 -0
  421. package/dist/core/semantic/runtime-union-member-mapping.test.js.map +1 -0
  422. package/dist/core/semantic/runtime-union-ordering.d.ts +4 -0
  423. package/dist/core/semantic/runtime-union-ordering.d.ts.map +1 -0
  424. package/dist/core/semantic/runtime-union-ordering.js +114 -0
  425. package/dist/core/semantic/runtime-union-ordering.js.map +1 -0
  426. package/dist/core/semantic/runtime-union-projection.d.ts +40 -0
  427. package/dist/core/semantic/runtime-union-projection.d.ts.map +1 -0
  428. package/dist/core/semantic/runtime-union-projection.js +150 -0
  429. package/dist/core/semantic/runtime-union-projection.js.map +1 -0
  430. package/dist/core/semantic/runtime-union-projection.test.d.ts +2 -0
  431. package/dist/core/semantic/runtime-union-projection.test.d.ts.map +1 -0
  432. package/dist/core/semantic/runtime-union-projection.test.js +211 -0
  433. package/dist/core/semantic/runtime-union-projection.test.js.map +1 -0
  434. package/dist/core/semantic/runtime-union-registry.d.ts +28 -0
  435. package/dist/core/semantic/runtime-union-registry.d.ts.map +1 -0
  436. package/dist/core/semantic/runtime-union-registry.js +301 -0
  437. package/dist/core/semantic/runtime-union-registry.js.map +1 -0
  438. package/dist/core/semantic/runtime-union-shared.d.ts +23 -0
  439. package/dist/core/semantic/runtime-union-shared.d.ts.map +1 -0
  440. package/dist/core/semantic/runtime-union-shared.js +29 -0
  441. package/dist/core/semantic/runtime-union-shared.js.map +1 -0
  442. package/dist/core/semantic/runtime-unions.d.ts +14 -0
  443. package/dist/core/semantic/runtime-unions.d.ts.map +1 -0
  444. package/dist/core/semantic/runtime-unions.js +330 -0
  445. package/dist/core/semantic/runtime-unions.js.map +1 -0
  446. package/dist/core/semantic/runtime-unions.test.d.ts +2 -0
  447. package/dist/core/semantic/runtime-unions.test.d.ts.map +1 -0
  448. package/dist/core/semantic/runtime-unions.test.js +922 -0
  449. package/dist/core/semantic/runtime-unions.test.js.map +1 -0
  450. package/dist/core/semantic/semantic-union-members.d.ts +46 -0
  451. package/dist/core/semantic/semantic-union-members.d.ts.map +1 -0
  452. package/dist/core/semantic/semantic-union-members.js +144 -0
  453. package/dist/core/semantic/semantic-union-members.js.map +1 -0
  454. package/dist/core/semantic/storage-erased-adaptation.d.ts +14 -0
  455. package/dist/core/semantic/storage-erased-adaptation.d.ts.map +1 -0
  456. package/dist/core/semantic/storage-erased-adaptation.js +191 -0
  457. package/dist/core/semantic/storage-erased-adaptation.js.map +1 -0
  458. package/dist/core/semantic/storage-erased-adaptation.test.d.ts +2 -0
  459. package/dist/core/semantic/storage-erased-adaptation.test.d.ts.map +1 -0
  460. package/dist/core/semantic/storage-erased-adaptation.test.js +271 -0
  461. package/dist/core/semantic/storage-erased-adaptation.test.js.map +1 -0
  462. package/dist/core/semantic/storage-types.d.ts +8 -0
  463. package/dist/core/semantic/storage-types.d.ts.map +1 -0
  464. package/dist/core/semantic/storage-types.js +344 -0
  465. package/dist/core/semantic/storage-types.js.map +1 -0
  466. package/dist/core/semantic/storage-types.test.d.ts +2 -0
  467. package/dist/core/semantic/storage-types.test.d.ts.map +1 -0
  468. package/dist/core/semantic/storage-types.test.js +438 -0
  469. package/dist/core/semantic/storage-types.test.js.map +1 -0
  470. package/dist/core/semantic/structural-resolution.d.ts +11 -0
  471. package/dist/core/semantic/structural-resolution.d.ts.map +1 -0
  472. package/dist/core/semantic/structural-resolution.js +11 -0
  473. package/dist/core/semantic/structural-resolution.js.map +1 -0
  474. package/dist/core/semantic/structural-shape-matching.d.ts +22 -0
  475. package/dist/core/semantic/structural-shape-matching.d.ts.map +1 -0
  476. package/dist/core/semantic/structural-shape-matching.js +255 -0
  477. package/dist/core/semantic/structural-shape-matching.js.map +1 -0
  478. package/dist/core/semantic/structural-view-types.d.ts +10 -0
  479. package/dist/core/semantic/structural-view-types.d.ts.map +1 -0
  480. package/dist/core/semantic/structural-view-types.js +46 -0
  481. package/dist/core/semantic/structural-view-types.js.map +1 -0
  482. package/dist/core/semantic/symbol-types.d.ts +80 -0
  483. package/dist/core/semantic/symbol-types.d.ts.map +1 -0
  484. package/dist/core/semantic/symbol-types.js +102 -0
  485. package/dist/core/semantic/symbol-types.js.map +1 -0
  486. package/dist/core/semantic/ternary-guards.d.ts +43 -0
  487. package/dist/core/semantic/ternary-guards.d.ts.map +1 -0
  488. package/dist/core/semantic/ternary-guards.js +232 -0
  489. package/dist/core/semantic/ternary-guards.js.map +1 -0
  490. package/dist/core/semantic/transparent-expressions.d.ts +6 -0
  491. package/dist/core/semantic/transparent-expressions.d.ts.map +1 -0
  492. package/dist/core/semantic/transparent-expressions.js +18 -0
  493. package/dist/core/semantic/transparent-expressions.js.map +1 -0
  494. package/dist/core/semantic/truthiness-evaluation.d.ts +58 -0
  495. package/dist/core/semantic/truthiness-evaluation.d.ts.map +1 -0
  496. package/dist/core/semantic/truthiness-evaluation.js +295 -0
  497. package/dist/core/semantic/truthiness-evaluation.js.map +1 -0
  498. package/dist/core/semantic/type-alias-index.d.ts.map +1 -1
  499. package/dist/core/semantic/type-alias-index.js +1 -11
  500. package/dist/core/semantic/type-alias-index.js.map +1 -1
  501. package/dist/core/semantic/type-compatibility.d.ts +1 -1
  502. package/dist/core/semantic/type-compatibility.d.ts.map +1 -1
  503. package/dist/core/semantic/type-compatibility.js +75 -15
  504. package/dist/core/semantic/type-compatibility.js.map +1 -1
  505. package/dist/core/semantic/type-equivalence.d.ts +4 -0
  506. package/dist/core/semantic/type-equivalence.d.ts.map +1 -0
  507. package/dist/core/semantic/type-equivalence.js +255 -0
  508. package/dist/core/semantic/type-equivalence.js.map +1 -0
  509. package/dist/core/semantic/type-equivalence.test.d.ts +2 -0
  510. package/dist/core/semantic/type-equivalence.test.d.ts.map +1 -0
  511. package/dist/core/semantic/type-equivalence.test.js +380 -0
  512. package/dist/core/semantic/type-equivalence.test.js.map +1 -0
  513. package/dist/core/semantic/type-param-substitution.d.ts +19 -0
  514. package/dist/core/semantic/type-param-substitution.d.ts.map +1 -0
  515. package/dist/core/semantic/type-param-substitution.js +219 -0
  516. package/dist/core/semantic/type-param-substitution.js.map +1 -0
  517. package/dist/core/semantic/type-resolution-cases/array-like-element.test.d.ts +2 -0
  518. package/dist/core/semantic/type-resolution-cases/array-like-element.test.d.ts.map +1 -0
  519. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js +82 -0
  520. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js.map +1 -0
  521. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.d.ts +2 -0
  522. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.d.ts.map +1 -0
  523. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.js +101 -0
  524. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.js.map +1 -0
  525. package/dist/core/semantic/type-resolution-cases/helpers.d.ts +8 -0
  526. package/dist/core/semantic/type-resolution-cases/helpers.d.ts.map +1 -0
  527. package/dist/core/semantic/type-resolution-cases/helpers.js +5 -0
  528. package/dist/core/semantic/type-resolution-cases/helpers.js.map +1 -0
  529. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts +2 -0
  530. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts.map +1 -0
  531. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js +98 -0
  532. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js.map +1 -0
  533. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.d.ts +2 -0
  534. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.d.ts.map +1 -0
  535. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.js +378 -0
  536. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.js.map +1 -0
  537. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.d.ts +2 -0
  538. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.d.ts.map +1 -0
  539. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.js +137 -0
  540. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.js.map +1 -0
  541. package/dist/core/semantic/type-resolution-cases/property-type.test.d.ts +2 -0
  542. package/dist/core/semantic/type-resolution-cases/property-type.test.d.ts.map +1 -0
  543. package/dist/core/semantic/type-resolution-cases/property-type.test.js +298 -0
  544. package/dist/core/semantic/type-resolution-cases/property-type.test.js.map +1 -0
  545. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.d.ts +2 -0
  546. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.d.ts.map +1 -0
  547. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.js +511 -0
  548. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.js.map +1 -0
  549. package/dist/core/semantic/type-resolution-cases/structural-target.test.d.ts +2 -0
  550. package/dist/core/semantic/type-resolution-cases/structural-target.test.d.ts.map +1 -0
  551. package/dist/core/semantic/type-resolution-cases/structural-target.test.js +80 -0
  552. package/dist/core/semantic/type-resolution-cases/structural-target.test.js.map +1 -0
  553. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.d.ts +2 -0
  554. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.d.ts.map +1 -0
  555. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.js +80 -0
  556. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.js.map +1 -0
  557. package/dist/core/semantic/type-resolution-cases/union-member-index.test.d.ts +2 -0
  558. package/dist/core/semantic/type-resolution-cases/union-member-index.test.d.ts.map +1 -0
  559. package/dist/core/semantic/type-resolution-cases/union-member-index.test.js +142 -0
  560. package/dist/core/semantic/type-resolution-cases/union-member-index.test.js.map +1 -0
  561. package/dist/core/semantic/type-resolution.d.ts +19 -132
  562. package/dist/core/semantic/type-resolution.d.ts.map +1 -1
  563. package/dist/core/semantic/type-resolution.js +19 -785
  564. package/dist/core/semantic/type-resolution.js.map +1 -1
  565. package/dist/core/semantic/type-resolution.test.d.ts +10 -4
  566. package/dist/core/semantic/type-resolution.test.d.ts.map +1 -1
  567. package/dist/core/semantic/type-resolution.test.js +10 -552
  568. package/dist/core/semantic/type-resolution.test.js.map +1 -1
  569. package/dist/core/semantic/type-substitution.d.ts +10 -0
  570. package/dist/core/semantic/type-substitution.d.ts.map +1 -0
  571. package/dist/core/semantic/type-substitution.js +167 -0
  572. package/dist/core/semantic/type-substitution.js.map +1 -0
  573. package/dist/core/semantic/union-member-matching.d.ts +10 -0
  574. package/dist/core/semantic/union-member-matching.d.ts.map +1 -0
  575. package/dist/core/semantic/union-member-matching.js +10 -0
  576. package/dist/core/semantic/union-member-matching.js.map +1 -0
  577. package/dist/core/semantic/union-predicate-matching.d.ts +40 -0
  578. package/dist/core/semantic/union-predicate-matching.d.ts.map +1 -0
  579. package/dist/core/semantic/union-predicate-matching.js +313 -0
  580. package/dist/core/semantic/union-predicate-matching.js.map +1 -0
  581. package/dist/core/semantic/union-semantics.d.ts +39 -0
  582. package/dist/core/semantic/union-semantics.d.ts.map +1 -0
  583. package/dist/core/semantic/union-semantics.js +48 -0
  584. package/dist/core/semantic/union-semantics.js.map +1 -0
  585. package/dist/core/semantic/union-semantics.test.d.ts +2 -0
  586. package/dist/core/semantic/union-semantics.test.d.ts.map +1 -0
  587. package/dist/core/semantic/union-semantics.test.js +109 -0
  588. package/dist/core/semantic/union-semantics.test.js.map +1 -0
  589. package/dist/core/semantic/union-typeof-matching.d.ts +13 -0
  590. package/dist/core/semantic/union-typeof-matching.d.ts.map +1 -0
  591. package/dist/core/semantic/union-typeof-matching.js +124 -0
  592. package/dist/core/semantic/union-typeof-matching.js.map +1 -0
  593. package/dist/core/semantic/unsafe.d.ts.map +1 -1
  594. package/dist/core/semantic/unsafe.js +23 -15
  595. package/dist/core/semantic/unsafe.js.map +1 -1
  596. package/dist/core/semantic/value-slot-types.d.ts +3 -0
  597. package/dist/core/semantic/value-slot-types.d.ts.map +1 -0
  598. package/dist/core/semantic/value-slot-types.js +8 -0
  599. package/dist/core/semantic/value-slot-types.js.map +1 -0
  600. package/dist/core/semantic/variable-type-resolution.d.ts +68 -0
  601. package/dist/core/semantic/variable-type-resolution.d.ts.map +1 -0
  602. package/dist/core/semantic/variable-type-resolution.js +250 -0
  603. package/dist/core/semantic/variable-type-resolution.js.map +1 -0
  604. package/dist/duplicate-type-suppression.d.ts +18 -0
  605. package/dist/duplicate-type-suppression.d.ts.map +1 -0
  606. package/dist/duplicate-type-suppression.js +249 -0
  607. package/dist/duplicate-type-suppression.js.map +1 -0
  608. package/dist/duplicate-type-suppression.test.d.ts +2 -0
  609. package/dist/duplicate-type-suppression.test.d.ts.map +1 -0
  610. package/dist/duplicate-type-suppression.test.js +44 -0
  611. package/dist/duplicate-type-suppression.test.js.map +1 -0
  612. package/dist/emitter-types/context.d.ts +3 -2
  613. package/dist/emitter-types/context.d.ts.map +1 -1
  614. package/dist/emitter-types/context.js +8 -2
  615. package/dist/emitter-types/context.js.map +1 -1
  616. package/dist/emitter-types/core.d.ts +122 -7
  617. package/dist/emitter-types/core.d.ts.map +1 -1
  618. package/dist/emitter.d.ts +4 -0
  619. package/dist/emitter.d.ts.map +1 -1
  620. package/dist/emitter.js +31 -305
  621. package/dist/emitter.js.map +1 -1
  622. package/dist/expression-emitter.d.ts.map +1 -1
  623. package/dist/expression-emitter.js +55 -1411
  624. package/dist/expression-emitter.js.map +1 -1
  625. package/dist/expressions/access-binding.d.ts +19 -0
  626. package/dist/expressions/access-binding.d.ts.map +1 -0
  627. package/dist/expressions/access-binding.js +286 -0
  628. package/dist/expressions/access-binding.js.map +1 -0
  629. package/dist/expressions/access-computed.d.ts +22 -0
  630. package/dist/expressions/access-computed.d.ts.map +1 -0
  631. package/dist/expressions/access-computed.js +339 -0
  632. package/dist/expressions/access-computed.js.map +1 -0
  633. package/dist/expressions/access-length.d.ts +20 -0
  634. package/dist/expressions/access-length.d.ts.map +1 -0
  635. package/dist/expressions/access-length.js +419 -0
  636. package/dist/expressions/access-length.js.map +1 -0
  637. package/dist/expressions/access-length.test.d.ts +2 -0
  638. package/dist/expressions/access-length.test.d.ts.map +1 -0
  639. package/dist/expressions/access-length.test.js +39 -0
  640. package/dist/expressions/access-length.test.js.map +1 -0
  641. package/dist/expressions/access-property.d.ts +23 -0
  642. package/dist/expressions/access-property.d.ts.map +1 -0
  643. package/dist/expressions/access-property.js +267 -0
  644. package/dist/expressions/access-property.js.map +1 -0
  645. package/dist/expressions/access-resolution-receivers.d.ts +27 -0
  646. package/dist/expressions/access-resolution-receivers.d.ts.map +1 -0
  647. package/dist/expressions/access-resolution-receivers.js +358 -0
  648. package/dist/expressions/access-resolution-receivers.js.map +1 -0
  649. package/dist/expressions/access-resolution-types.d.ts +29 -0
  650. package/dist/expressions/access-resolution-types.d.ts.map +1 -0
  651. package/dist/expressions/access-resolution-types.js +192 -0
  652. package/dist/expressions/access-resolution-types.js.map +1 -0
  653. package/dist/expressions/access-resolution.d.ts +10 -0
  654. package/dist/expressions/access-resolution.d.ts.map +1 -0
  655. package/dist/expressions/access-resolution.js +10 -0
  656. package/dist/expressions/access-resolution.js.map +1 -0
  657. package/dist/expressions/access.d.ts +8 -3
  658. package/dist/expressions/access.d.ts.map +1 -1
  659. package/dist/expressions/access.js +169 -603
  660. package/dist/expressions/access.js.map +1 -1
  661. package/dist/expressions/architecture-invariants.test.d.ts +2 -0
  662. package/dist/expressions/architecture-invariants.test.d.ts.map +1 -0
  663. package/dist/expressions/architecture-invariants.test.js +73 -0
  664. package/dist/expressions/architecture-invariants.test.js.map +1 -0
  665. package/dist/expressions/array-interop.d.ts +3 -0
  666. package/dist/expressions/array-interop.d.ts.map +1 -0
  667. package/dist/expressions/array-interop.js +14 -0
  668. package/dist/expressions/array-interop.js.map +1 -0
  669. package/dist/expressions/array-literal.d.ts +13 -0
  670. package/dist/expressions/array-literal.d.ts.map +1 -0
  671. package/dist/expressions/array-literal.js +373 -0
  672. package/dist/expressions/array-literal.js.map +1 -0
  673. package/dist/expressions/await-normalization.d.ts +6 -0
  674. package/dist/expressions/await-normalization.d.ts.map +1 -0
  675. package/dist/expressions/await-normalization.js +358 -0
  676. package/dist/expressions/await-normalization.js.map +1 -0
  677. package/dist/expressions/calls/call-analysis.d.ts +8 -6
  678. package/dist/expressions/calls/call-analysis.d.ts.map +1 -1
  679. package/dist/expressions/calls/call-analysis.js +120 -31
  680. package/dist/expressions/calls/call-analysis.js.map +1 -1
  681. package/dist/expressions/calls/call-analysis.test.js +2 -2
  682. package/dist/expressions/calls/call-analysis.test.js.map +1 -1
  683. package/dist/expressions/calls/call-arguments-emit.d.ts +16 -0
  684. package/dist/expressions/calls/call-arguments-emit.d.ts.map +1 -0
  685. package/dist/expressions/calls/call-arguments-emit.js +1818 -0
  686. package/dist/expressions/calls/call-arguments-emit.js.map +1 -0
  687. package/dist/expressions/calls/call-arguments-helpers.d.ts +22 -0
  688. package/dist/expressions/calls/call-arguments-helpers.d.ts.map +1 -0
  689. package/dist/expressions/calls/call-arguments-helpers.js +333 -0
  690. package/dist/expressions/calls/call-arguments-helpers.js.map +1 -0
  691. package/dist/expressions/calls/call-arguments.d.ts +10 -0
  692. package/dist/expressions/calls/call-arguments.d.ts.map +1 -0
  693. package/dist/expressions/calls/call-arguments.js +10 -0
  694. package/dist/expressions/calls/call-arguments.js.map +1 -0
  695. package/dist/expressions/calls/call-array-interop.d.ts +10 -0
  696. package/dist/expressions/calls/call-array-interop.d.ts.map +1 -0
  697. package/dist/expressions/calls/call-array-interop.js +10 -0
  698. package/dist/expressions/calls/call-array-interop.js.map +1 -0
  699. package/dist/expressions/calls/call-array-mutation.d.ts +20 -0
  700. package/dist/expressions/calls/call-array-mutation.d.ts.map +1 -0
  701. package/dist/expressions/calls/call-array-mutation.js +260 -0
  702. package/dist/expressions/calls/call-array-mutation.js.map +1 -0
  703. package/dist/expressions/calls/call-array-wrapper.d.ts +14 -0
  704. package/dist/expressions/calls/call-array-wrapper.d.ts.map +1 -0
  705. package/dist/expressions/calls/call-array-wrapper.js +118 -0
  706. package/dist/expressions/calls/call-array-wrapper.js.map +1 -0
  707. package/dist/expressions/calls/call-binding-resolution.d.ts +8 -0
  708. package/dist/expressions/calls/call-binding-resolution.d.ts.map +1 -0
  709. package/dist/expressions/calls/call-binding-resolution.js +12 -0
  710. package/dist/expressions/calls/call-binding-resolution.js.map +1 -0
  711. package/dist/expressions/calls/call-dynamic-import.d.ts +11 -0
  712. package/dist/expressions/calls/call-dynamic-import.d.ts.map +1 -0
  713. package/dist/expressions/calls/call-dynamic-import.js +148 -0
  714. package/dist/expressions/calls/call-dynamic-import.js.map +1 -0
  715. package/dist/expressions/calls/call-emitter.d.ts +9 -3
  716. package/dist/expressions/calls/call-emitter.d.ts.map +1 -1
  717. package/dist/expressions/calls/call-emitter.js +231 -1918
  718. package/dist/expressions/calls/call-emitter.js.map +1 -1
  719. package/dist/expressions/calls/call-emitter.test.d.ts +2 -0
  720. package/dist/expressions/calls/call-emitter.test.d.ts.map +1 -0
  721. package/dist/expressions/calls/call-emitter.test.js +407 -0
  722. package/dist/expressions/calls/call-emitter.test.js.map +1 -0
  723. package/dist/expressions/calls/call-extension-methods.d.ts +17 -0
  724. package/dist/expressions/calls/call-extension-methods.d.ts.map +1 -0
  725. package/dist/expressions/calls/call-extension-methods.js +191 -0
  726. package/dist/expressions/calls/call-extension-methods.js.map +1 -0
  727. package/dist/expressions/calls/call-json.d.ts +15 -0
  728. package/dist/expressions/calls/call-json.d.ts.map +1 -0
  729. package/dist/expressions/calls/call-json.js +212 -0
  730. package/dist/expressions/calls/call-json.js.map +1 -0
  731. package/dist/expressions/calls/call-promise-chains.d.ts +7 -0
  732. package/dist/expressions/calls/call-promise-chains.d.ts.map +1 -0
  733. package/dist/expressions/calls/call-promise-chains.js +411 -0
  734. package/dist/expressions/calls/call-promise-chains.js.map +1 -0
  735. package/dist/expressions/calls/call-promise-ir-types.d.ts +11 -0
  736. package/dist/expressions/calls/call-promise-ir-types.d.ts.map +1 -0
  737. package/dist/expressions/calls/call-promise-ir-types.js +219 -0
  738. package/dist/expressions/calls/call-promise-ir-types.js.map +1 -0
  739. package/dist/expressions/calls/call-promise-normalization.d.ts +11 -0
  740. package/dist/expressions/calls/call-promise-normalization.d.ts.map +1 -0
  741. package/dist/expressions/calls/call-promise-normalization.js +179 -0
  742. package/dist/expressions/calls/call-promise-normalization.js.map +1 -0
  743. package/dist/expressions/calls/call-promise-static.d.ts +7 -0
  744. package/dist/expressions/calls/call-promise-static.d.ts.map +1 -0
  745. package/dist/expressions/calls/call-promise-static.js +188 -0
  746. package/dist/expressions/calls/call-promise-static.js.map +1 -0
  747. package/dist/expressions/calls/call-promise-task-types.d.ts +9 -0
  748. package/dist/expressions/calls/call-promise-task-types.d.ts.map +1 -0
  749. package/dist/expressions/calls/call-promise-task-types.js +88 -0
  750. package/dist/expressions/calls/call-promise-task-types.js.map +1 -0
  751. package/dist/expressions/calls/call-promise.d.ts +11 -0
  752. package/dist/expressions/calls/call-promise.d.ts.map +1 -0
  753. package/dist/expressions/calls/call-promise.js +11 -0
  754. package/dist/expressions/calls/call-promise.js.map +1 -0
  755. package/dist/expressions/calls/call-runtime-union-guards.d.ts +7 -0
  756. package/dist/expressions/calls/call-runtime-union-guards.d.ts.map +1 -0
  757. package/dist/expressions/calls/call-runtime-union-guards.js +131 -0
  758. package/dist/expressions/calls/call-runtime-union-guards.js.map +1 -0
  759. package/dist/expressions/calls/call-symbol.d.ts +7 -0
  760. package/dist/expressions/calls/call-symbol.d.ts.map +1 -0
  761. package/dist/expressions/calls/call-symbol.js +26 -0
  762. package/dist/expressions/calls/call-symbol.js.map +1 -0
  763. package/dist/expressions/calls/new-emitter-collections.d.ts +31 -0
  764. package/dist/expressions/calls/new-emitter-collections.d.ts.map +1 -0
  765. package/dist/expressions/calls/new-emitter-collections.js +310 -0
  766. package/dist/expressions/calls/new-emitter-collections.js.map +1 -0
  767. package/dist/expressions/calls/new-emitter-promise.d.ts +10 -0
  768. package/dist/expressions/calls/new-emitter-promise.d.ts.map +1 -0
  769. package/dist/expressions/calls/new-emitter-promise.js +437 -0
  770. package/dist/expressions/calls/new-emitter-promise.js.map +1 -0
  771. package/dist/expressions/calls/new-emitter.d.ts.map +1 -1
  772. package/dist/expressions/calls/new-emitter.js +28 -557
  773. package/dist/expressions/calls/new-emitter.js.map +1 -1
  774. package/dist/expressions/calls/runtime-expected-type-preference.d.ts +4 -0
  775. package/dist/expressions/calls/runtime-expected-type-preference.d.ts.map +1 -0
  776. package/dist/expressions/calls/runtime-expected-type-preference.js +61 -0
  777. package/dist/expressions/calls/runtime-expected-type-preference.js.map +1 -0
  778. package/dist/expressions/collections.d.ts +4 -21
  779. package/dist/expressions/collections.d.ts.map +1 -1
  780. package/dist/expressions/collections.js +3 -959
  781. package/dist/expressions/collections.js.map +1 -1
  782. package/dist/expressions/dictionary-literal.d.ts +20 -0
  783. package/dist/expressions/dictionary-literal.d.ts.map +1 -0
  784. package/dist/expressions/dictionary-literal.js +214 -0
  785. package/dist/expressions/dictionary-literal.js.map +1 -0
  786. package/dist/expressions/dictionary-safe-access.d.ts +4 -0
  787. package/dist/expressions/dictionary-safe-access.d.ts.map +1 -0
  788. package/dist/expressions/dictionary-safe-access.js +86 -0
  789. package/dist/expressions/dictionary-safe-access.js.map +1 -0
  790. package/dist/expressions/direct-storage-types.d.ts +10 -0
  791. package/dist/expressions/direct-storage-types.d.ts.map +1 -0
  792. package/dist/expressions/direct-storage-types.js +441 -0
  793. package/dist/expressions/direct-storage-types.js.map +1 -0
  794. package/dist/expressions/exact-comparison.d.ts +17 -0
  795. package/dist/expressions/exact-comparison.d.ts.map +1 -0
  796. package/dist/expressions/exact-comparison.js +240 -0
  797. package/dist/expressions/exact-comparison.js.map +1 -0
  798. package/dist/expressions/exact-global-bindings.d.ts +6 -0
  799. package/dist/expressions/exact-global-bindings.d.ts.map +1 -0
  800. package/dist/expressions/exact-global-bindings.js +15 -0
  801. package/dist/expressions/exact-global-bindings.js.map +1 -0
  802. package/dist/expressions/expected-type-adaptation.d.ts +55 -0
  803. package/dist/expressions/expected-type-adaptation.d.ts.map +1 -0
  804. package/dist/expressions/expected-type-adaptation.js +918 -0
  805. package/dist/expressions/expected-type-adaptation.js.map +1 -0
  806. package/dist/expressions/expected-type-adaptation.test.d.ts +2 -0
  807. package/dist/expressions/expected-type-adaptation.test.d.ts.map +1 -0
  808. package/dist/expressions/expected-type-adaptation.test.js +1363 -0
  809. package/dist/expressions/expected-type-adaptation.test.js.map +1 -0
  810. package/dist/expressions/functions.d.ts +6 -15
  811. package/dist/expressions/functions.d.ts.map +1 -1
  812. package/dist/expressions/functions.js +6 -213
  813. package/dist/expressions/functions.js.map +1 -1
  814. package/dist/expressions/identifier-storage.d.ts +43 -0
  815. package/dist/expressions/identifier-storage.d.ts.map +1 -0
  816. package/dist/expressions/identifier-storage.js +478 -0
  817. package/dist/expressions/identifier-storage.js.map +1 -0
  818. package/dist/expressions/identifiers.d.ts.map +1 -1
  819. package/dist/expressions/identifiers.js +126 -11
  820. package/dist/expressions/identifiers.js.map +1 -1
  821. package/dist/expressions/index-cases/alias-carrier-widening.test.d.ts +2 -0
  822. package/dist/expressions/index-cases/alias-carrier-widening.test.d.ts.map +1 -0
  823. package/dist/expressions/index-cases/alias-carrier-widening.test.js +347 -0
  824. package/dist/expressions/index-cases/alias-carrier-widening.test.js.map +1 -0
  825. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.d.ts +2 -0
  826. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.d.ts.map +1 -0
  827. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js +356 -0
  828. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js.map +1 -0
  829. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.d.ts +2 -0
  830. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.d.ts.map +1 -0
  831. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js +233 -0
  832. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js.map +1 -0
  833. package/dist/expressions/index-cases/basic-literals-and-calls.test.d.ts +2 -0
  834. package/dist/expressions/index-cases/basic-literals-and-calls.test.d.ts.map +1 -0
  835. package/dist/expressions/index-cases/basic-literals-and-calls.test.js +550 -0
  836. package/dist/expressions/index-cases/basic-literals-and-calls.test.js.map +1 -0
  837. package/dist/expressions/index-cases/defaults-and-char-context.test.d.ts +2 -0
  838. package/dist/expressions/index-cases/defaults-and-char-context.test.d.ts.map +1 -0
  839. package/dist/expressions/index-cases/defaults-and-char-context.test.js +951 -0
  840. package/dist/expressions/index-cases/defaults-and-char-context.test.js.map +1 -0
  841. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.d.ts +2 -0
  842. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.d.ts.map +1 -0
  843. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js +533 -0
  844. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js.map +1 -0
  845. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.d.ts +2 -0
  846. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.d.ts.map +1 -0
  847. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js +336 -0
  848. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js.map +1 -0
  849. package/dist/expressions/index-cases/fluent-and-ef-operators.test.d.ts +2 -0
  850. package/dist/expressions/index-cases/fluent-and-ef-operators.test.d.ts.map +1 -0
  851. package/dist/expressions/index-cases/fluent-and-ef-operators.test.js +352 -0
  852. package/dist/expressions/index-cases/fluent-and-ef-operators.test.js.map +1 -0
  853. package/dist/expressions/index-cases/helpers.d.ts +13 -0
  854. package/dist/expressions/index-cases/helpers.d.ts.map +1 -0
  855. package/dist/expressions/index-cases/helpers.js +27 -0
  856. package/dist/expressions/index-cases/helpers.js.map +1 -0
  857. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.d.ts +2 -0
  858. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.d.ts.map +1 -0
  859. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.js +429 -0
  860. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.js.map +1 -0
  861. package/dist/expressions/index-cases/nullable-and-comparisons.test.d.ts +2 -0
  862. package/dist/expressions/index-cases/nullable-and-comparisons.test.d.ts.map +1 -0
  863. package/dist/expressions/index-cases/nullable-and-comparisons.test.js +423 -0
  864. package/dist/expressions/index-cases/nullable-and-comparisons.test.js.map +1 -0
  865. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.d.ts +2 -0
  866. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.d.ts.map +1 -0
  867. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js +482 -0
  868. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js.map +1 -0
  869. package/dist/expressions/index-cases/runtime-union-reification-a.test.d.ts +2 -0
  870. package/dist/expressions/index-cases/runtime-union-reification-a.test.d.ts.map +1 -0
  871. package/dist/expressions/index-cases/runtime-union-reification-a.test.js +454 -0
  872. package/dist/expressions/index-cases/runtime-union-reification-a.test.js.map +1 -0
  873. package/dist/expressions/index-cases/runtime-union-reification-b.test.d.ts +2 -0
  874. package/dist/expressions/index-cases/runtime-union-reification-b.test.d.ts.map +1 -0
  875. package/dist/expressions/index-cases/runtime-union-reification-b.test.js +852 -0
  876. package/dist/expressions/index-cases/runtime-union-reification-b.test.js.map +1 -0
  877. package/dist/expressions/index-cases/spreads-and-member-bindings.test.d.ts +2 -0
  878. package/dist/expressions/index-cases/spreads-and-member-bindings.test.d.ts.map +1 -0
  879. package/dist/expressions/index-cases/spreads-and-member-bindings.test.js +616 -0
  880. package/dist/expressions/index-cases/spreads-and-member-bindings.test.js.map +1 -0
  881. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.d.ts +2 -0
  882. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.d.ts.map +1 -0
  883. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js +304 -0
  884. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js.map +1 -0
  885. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.d.ts +2 -0
  886. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.d.ts.map +1 -0
  887. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js +369 -0
  888. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js.map +1 -0
  889. package/dist/expressions/index-cases/tuple-rest-and-unions.test.d.ts +2 -0
  890. package/dist/expressions/index-cases/tuple-rest-and-unions.test.d.ts.map +1 -0
  891. package/dist/expressions/index-cases/tuple-rest-and-unions.test.js +392 -0
  892. package/dist/expressions/index-cases/tuple-rest-and-unions.test.js.map +1 -0
  893. package/dist/expressions/index.test.d.ts +17 -5
  894. package/dist/expressions/index.test.d.ts.map +1 -1
  895. package/dist/expressions/index.test.js +17 -2835
  896. package/dist/expressions/index.test.js.map +1 -1
  897. package/dist/expressions/invoked-lambda.d.ts +12 -0
  898. package/dist/expressions/invoked-lambda.d.ts.map +1 -0
  899. package/dist/expressions/invoked-lambda.js +69 -0
  900. package/dist/expressions/invoked-lambda.js.map +1 -0
  901. package/dist/expressions/lambda-body.d.ts +23 -0
  902. package/dist/expressions/lambda-body.d.ts.map +1 -0
  903. package/dist/expressions/lambda-body.js +421 -0
  904. package/dist/expressions/lambda-body.js.map +1 -0
  905. package/dist/expressions/lambda-parameters.d.ts +32 -0
  906. package/dist/expressions/lambda-parameters.d.ts.map +1 -0
  907. package/dist/expressions/lambda-parameters.js +279 -0
  908. package/dist/expressions/lambda-parameters.js.map +1 -0
  909. package/dist/expressions/literals.d.ts.map +1 -1
  910. package/dist/expressions/literals.js +18 -3
  911. package/dist/expressions/literals.js.map +1 -1
  912. package/dist/expressions/literals.test.js +48 -0
  913. package/dist/expressions/literals.test.js.map +1 -1
  914. package/dist/expressions/object-helpers.d.ts +22 -0
  915. package/dist/expressions/object-helpers.d.ts.map +1 -0
  916. package/dist/expressions/object-helpers.js +98 -0
  917. package/dist/expressions/object-helpers.js.map +1 -0
  918. package/dist/expressions/object-literal-spreads.d.ts +20 -0
  919. package/dist/expressions/object-literal-spreads.d.ts.map +1 -0
  920. package/dist/expressions/object-literal-spreads.js +188 -0
  921. package/dist/expressions/object-literal-spreads.js.map +1 -0
  922. package/dist/expressions/object-literal.d.ts +18 -0
  923. package/dist/expressions/object-literal.d.ts.map +1 -0
  924. package/dist/expressions/object-literal.js +178 -0
  925. package/dist/expressions/object-literal.js.map +1 -0
  926. package/dist/expressions/operators/assignment-emitter.d.ts.map +1 -1
  927. package/dist/expressions/operators/assignment-emitter.js +78 -27
  928. package/dist/expressions/operators/assignment-emitter.js.map +1 -1
  929. package/dist/expressions/operators/binary-dispatch.d.ts +37 -0
  930. package/dist/expressions/operators/binary-dispatch.d.ts.map +1 -0
  931. package/dist/expressions/operators/binary-dispatch.js +449 -0
  932. package/dist/expressions/operators/binary-dispatch.js.map +1 -0
  933. package/dist/expressions/operators/binary-emitter.d.ts +6 -29
  934. package/dist/expressions/operators/binary-emitter.d.ts.map +1 -1
  935. package/dist/expressions/operators/binary-emitter.js +6 -419
  936. package/dist/expressions/operators/binary-emitter.js.map +1 -1
  937. package/dist/expressions/operators/binary-helpers.d.ts +17 -0
  938. package/dist/expressions/operators/binary-helpers.d.ts.map +1 -0
  939. package/dist/expressions/operators/binary-helpers.js +119 -0
  940. package/dist/expressions/operators/binary-helpers.js.map +1 -0
  941. package/dist/expressions/operators/binary-runtime-union-comparison.d.ts +7 -0
  942. package/dist/expressions/operators/binary-runtime-union-comparison.d.ts.map +1 -0
  943. package/dist/expressions/operators/binary-runtime-union-comparison.js +150 -0
  944. package/dist/expressions/operators/binary-runtime-union-comparison.js.map +1 -0
  945. package/dist/expressions/operators/binary-special-ops.d.ts +29 -0
  946. package/dist/expressions/operators/binary-special-ops.d.ts.map +1 -0
  947. package/dist/expressions/operators/binary-special-ops.js +468 -0
  948. package/dist/expressions/operators/binary-special-ops.js.map +1 -0
  949. package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -1
  950. package/dist/expressions/operators/conditional-emitter.js +221 -216
  951. package/dist/expressions/operators/conditional-emitter.js.map +1 -1
  952. package/dist/expressions/operators/helpers.d.ts +10 -0
  953. package/dist/expressions/operators/helpers.d.ts.map +1 -1
  954. package/dist/expressions/operators/helpers.js +30 -0
  955. package/dist/expressions/operators/helpers.js.map +1 -1
  956. package/dist/expressions/operators/logical-emitter.d.ts +2 -2
  957. package/dist/expressions/operators/logical-emitter.d.ts.map +1 -1
  958. package/dist/expressions/operators/logical-emitter.js +293 -10
  959. package/dist/expressions/operators/logical-emitter.js.map +1 -1
  960. package/dist/expressions/operators/unary-emitter.d.ts.map +1 -1
  961. package/dist/expressions/operators/unary-emitter.js +6 -21
  962. package/dist/expressions/operators/unary-emitter.js.map +1 -1
  963. package/dist/expressions/operators/write-targets.d.ts +5 -0
  964. package/dist/expressions/operators/write-targets.d.ts.map +1 -0
  965. package/dist/expressions/operators/write-targets.js +65 -0
  966. package/dist/expressions/operators/write-targets.js.map +1 -0
  967. package/dist/expressions/other.d.ts.map +1 -1
  968. package/dist/expressions/other.js +17 -50
  969. package/dist/expressions/other.js.map +1 -1
  970. package/dist/expressions/post-emission-adaptation.d.ts +19 -0
  971. package/dist/expressions/post-emission-adaptation.d.ts.map +1 -0
  972. package/dist/expressions/post-emission-adaptation.js +939 -0
  973. package/dist/expressions/post-emission-adaptation.js.map +1 -0
  974. package/dist/expressions/runtime-union-adaptation-projection.d.ts +12 -0
  975. package/dist/expressions/runtime-union-adaptation-projection.d.ts.map +1 -0
  976. package/dist/expressions/runtime-union-adaptation-projection.js +182 -0
  977. package/dist/expressions/runtime-union-adaptation-projection.js.map +1 -0
  978. package/dist/expressions/runtime-union-adaptation-upcast.d.ts +11 -0
  979. package/dist/expressions/runtime-union-adaptation-upcast.d.ts.map +1 -0
  980. package/dist/expressions/runtime-union-adaptation-upcast.js +722 -0
  981. package/dist/expressions/runtime-union-adaptation-upcast.js.map +1 -0
  982. package/dist/expressions/runtime-union-adaptation.d.ts +10 -0
  983. package/dist/expressions/runtime-union-adaptation.d.ts.map +1 -0
  984. package/dist/expressions/runtime-union-adaptation.js +10 -0
  985. package/dist/expressions/runtime-union-adaptation.js.map +1 -0
  986. package/dist/expressions/structural-adaptation-types.d.ts +12 -0
  987. package/dist/expressions/structural-adaptation-types.d.ts.map +1 -0
  988. package/dist/expressions/structural-adaptation-types.js +3 -0
  989. package/dist/expressions/structural-adaptation-types.js.map +1 -0
  990. package/dist/expressions/structural-adaptation.d.ts +16 -0
  991. package/dist/expressions/structural-adaptation.d.ts.map +1 -0
  992. package/dist/expressions/structural-adaptation.js +14 -0
  993. package/dist/expressions/structural-adaptation.js.map +1 -0
  994. package/dist/expressions/structural-anonymous-targets.d.ts +4 -0
  995. package/dist/expressions/structural-anonymous-targets.d.ts.map +1 -0
  996. package/dist/expressions/structural-anonymous-targets.js +156 -0
  997. package/dist/expressions/structural-anonymous-targets.js.map +1 -0
  998. package/dist/expressions/structural-collection-adaptation.d.ts +7 -0
  999. package/dist/expressions/structural-collection-adaptation.d.ts.map +1 -0
  1000. package/dist/expressions/structural-collection-adaptation.js +682 -0
  1001. package/dist/expressions/structural-collection-adaptation.js.map +1 -0
  1002. package/dist/expressions/structural-object-adaptation.d.ts +6 -0
  1003. package/dist/expressions/structural-object-adaptation.d.ts.map +1 -0
  1004. package/dist/expressions/structural-object-adaptation.js +213 -0
  1005. package/dist/expressions/structural-object-adaptation.js.map +1 -0
  1006. package/dist/expressions/structural-property-model.d.ts +6 -0
  1007. package/dist/expressions/structural-property-model.d.ts.map +1 -0
  1008. package/dist/expressions/structural-property-model.js +304 -0
  1009. package/dist/expressions/structural-property-model.js.map +1 -0
  1010. package/dist/expressions/structural-type-shapes.d.ts +19 -0
  1011. package/dist/expressions/structural-type-shapes.d.ts.map +1 -0
  1012. package/dist/expressions/structural-type-shapes.js +318 -0
  1013. package/dist/expressions/structural-type-shapes.js.map +1 -0
  1014. package/dist/expressions/structural-type-shapes.test.d.ts +2 -0
  1015. package/dist/expressions/structural-type-shapes.test.d.ts.map +1 -0
  1016. package/dist/expressions/structural-type-shapes.test.js +60 -0
  1017. package/dist/expressions/structural-type-shapes.test.js.map +1 -0
  1018. package/dist/expressions/type-assertion-emitters.d.ts +50 -0
  1019. package/dist/expressions/type-assertion-emitters.d.ts.map +1 -0
  1020. package/dist/expressions/type-assertion-emitters.js +675 -0
  1021. package/dist/expressions/type-assertion-emitters.js.map +1 -0
  1022. package/dist/fixture-regression-mirrors.test.d.ts +2 -0
  1023. package/dist/fixture-regression-mirrors.test.d.ts.map +1 -0
  1024. package/dist/fixture-regression-mirrors.test.js +580 -0
  1025. package/dist/fixture-regression-mirrors.test.js.map +1 -0
  1026. package/dist/generated-files.d.ts +19 -0
  1027. package/dist/generated-files.d.ts.map +1 -0
  1028. package/dist/generated-files.js +519 -0
  1029. package/dist/generated-files.js.map +1 -0
  1030. package/dist/generated-files.test.d.ts +2 -0
  1031. package/dist/generated-files.test.d.ts.map +1 -0
  1032. package/dist/generated-files.test.js +103 -0
  1033. package/dist/generated-files.test.js.map +1 -0
  1034. package/dist/generator-cases/bidirectional-core.test.d.ts +6 -0
  1035. package/dist/generator-cases/bidirectional-core.test.d.ts.map +1 -0
  1036. package/dist/generator-cases/bidirectional-core.test.js +272 -0
  1037. package/dist/generator-cases/bidirectional-core.test.js.map +1 -0
  1038. package/dist/generator-cases/bidirectional-features.test.d.ts +6 -0
  1039. package/dist/generator-cases/bidirectional-features.test.d.ts.map +1 -0
  1040. package/dist/generator-cases/bidirectional-features.test.js +360 -0
  1041. package/dist/generator-cases/bidirectional-features.test.js.map +1 -0
  1042. package/dist/generator-cases/simple-generators.test.d.ts +6 -0
  1043. package/dist/generator-cases/simple-generators.test.d.ts.map +1 -0
  1044. package/dist/generator-cases/simple-generators.test.js +227 -0
  1045. package/dist/generator-cases/simple-generators.test.js.map +1 -0
  1046. package/dist/generator-exchange.d.ts +3 -2
  1047. package/dist/generator-exchange.d.ts.map +1 -1
  1048. package/dist/generator-exchange.js +46 -15
  1049. package/dist/generator-exchange.js.map +1 -1
  1050. package/dist/generator-wrapper-builders.d.ts +10 -0
  1051. package/dist/generator-wrapper-builders.d.ts.map +1 -0
  1052. package/dist/generator-wrapper-builders.js +288 -0
  1053. package/dist/generator-wrapper-builders.js.map +1 -0
  1054. package/dist/generator-wrapper.d.ts +16 -5
  1055. package/dist/generator-wrapper.d.ts.map +1 -1
  1056. package/dist/generator-wrapper.js +47 -288
  1057. package/dist/generator-wrapper.js.map +1 -1
  1058. package/dist/generator.test.d.ts +3 -5
  1059. package/dist/generator.test.d.ts.map +1 -1
  1060. package/dist/generator.test.js +3 -766
  1061. package/dist/generator.test.js.map +1 -1
  1062. package/dist/golden-tests/config-parser.d.ts.map +1 -1
  1063. package/dist/golden-tests/config-parser.js +7 -0
  1064. package/dist/golden-tests/config-parser.js.map +1 -1
  1065. package/dist/golden-tests/discovery.js +1 -0
  1066. package/dist/golden-tests/discovery.js.map +1 -1
  1067. package/dist/golden-tests/runner.d.ts.map +1 -1
  1068. package/dist/golden-tests/runner.js +12 -40
  1069. package/dist/golden-tests/runner.js.map +1 -1
  1070. package/dist/golden-tests/types.d.ts +2 -0
  1071. package/dist/golden-tests/types.d.ts.map +1 -1
  1072. package/dist/hierarchical-bindings.test.js +6 -9
  1073. package/dist/hierarchical-bindings.test.js.map +1 -1
  1074. package/dist/integration-cases/arrow-and-generics-a.test.d.ts +2 -0
  1075. package/dist/integration-cases/arrow-and-generics-a.test.d.ts.map +1 -0
  1076. package/dist/integration-cases/arrow-and-generics-a.test.js +695 -0
  1077. package/dist/integration-cases/arrow-and-generics-a.test.js.map +1 -0
  1078. package/dist/integration-cases/arrow-and-generics-b.test.d.ts +2 -0
  1079. package/dist/integration-cases/arrow-and-generics-b.test.d.ts.map +1 -0
  1080. package/dist/integration-cases/arrow-and-generics-b.test.js +218 -0
  1081. package/dist/integration-cases/arrow-and-generics-b.test.js.map +1 -0
  1082. package/dist/integration-cases/await-and-intrinsics.test.d.ts +2 -0
  1083. package/dist/integration-cases/await-and-intrinsics.test.d.ts.map +1 -0
  1084. package/dist/integration-cases/await-and-intrinsics.test.js +237 -0
  1085. package/dist/integration-cases/await-and-intrinsics.test.js.map +1 -0
  1086. package/dist/integration-cases/clr-iterable-overloads.test.d.ts +2 -0
  1087. package/dist/integration-cases/clr-iterable-overloads.test.d.ts.map +1 -0
  1088. package/dist/integration-cases/clr-iterable-overloads.test.js +446 -0
  1089. package/dist/integration-cases/clr-iterable-overloads.test.js.map +1 -0
  1090. package/dist/integration-cases/full-module-and-promises.test.d.ts +2 -0
  1091. package/dist/integration-cases/full-module-and-promises.test.d.ts.map +1 -0
  1092. package/dist/integration-cases/full-module-and-promises.test.js +472 -0
  1093. package/dist/integration-cases/full-module-and-promises.test.js.map +1 -0
  1094. package/dist/integration-cases/helpers.d.ts +7 -0
  1095. package/dist/integration-cases/helpers.d.ts.map +1 -0
  1096. package/dist/integration-cases/helpers.js +348 -0
  1097. package/dist/integration-cases/helpers.js.map +1 -0
  1098. package/dist/integration-cases/object-literals-and-channels.test.d.ts +2 -0
  1099. package/dist/integration-cases/object-literals-and-channels.test.d.ts.map +1 -0
  1100. package/dist/integration-cases/object-literals-and-channels.test.js +72 -0
  1101. package/dist/integration-cases/object-literals-and-channels.test.js.map +1 -0
  1102. package/dist/integration-cases/regression-coverage-a.test.d.ts +2 -0
  1103. package/dist/integration-cases/regression-coverage-a.test.d.ts.map +1 -0
  1104. package/dist/integration-cases/regression-coverage-a.test.js +533 -0
  1105. package/dist/integration-cases/regression-coverage-a.test.js.map +1 -0
  1106. package/dist/integration-cases/regression-coverage-b.test.d.ts +2 -0
  1107. package/dist/integration-cases/regression-coverage-b.test.d.ts.map +1 -0
  1108. package/dist/integration-cases/regression-coverage-b.test.js +806 -0
  1109. package/dist/integration-cases/regression-coverage-b.test.js.map +1 -0
  1110. package/dist/integration-cases/regression-coverage-c.test.d.ts +2 -0
  1111. package/dist/integration-cases/regression-coverage-c.test.d.ts.map +1 -0
  1112. package/dist/integration-cases/regression-coverage-c.test.js +4139 -0
  1113. package/dist/integration-cases/regression-coverage-c.test.js.map +1 -0
  1114. package/dist/integration.test.d.ts +9 -5
  1115. package/dist/integration.test.d.ts.map +1 -1
  1116. package/dist/integration.test.js +9 -1223
  1117. package/dist/integration.test.js.map +1 -1
  1118. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.d.ts +5 -0
  1119. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.d.ts.map +1 -0
  1120. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.js +93 -0
  1121. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.js.map +1 -0
  1122. package/dist/invariants/numeric-proof-contract-cases/helpers.d.ts +14 -0
  1123. package/dist/invariants/numeric-proof-contract-cases/helpers.d.ts.map +1 -0
  1124. package/dist/invariants/numeric-proof-contract-cases/helpers.js +158 -0
  1125. package/dist/invariants/numeric-proof-contract-cases/helpers.js.map +1 -0
  1126. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.d.ts +5 -0
  1127. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.d.ts.map +1 -0
  1128. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.js +242 -0
  1129. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.js.map +1 -0
  1130. package/dist/invariants/numeric-proof-contract.test.d.ts +2 -18
  1131. package/dist/invariants/numeric-proof-contract.test.d.ts.map +1 -1
  1132. package/dist/invariants/numeric-proof-contract.test.js +2 -510
  1133. package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
  1134. package/dist/json-aot-generic.test.js +320 -5
  1135. package/dist/json-aot-generic.test.js.map +1 -1
  1136. package/dist/naming-policy.d.ts.map +1 -1
  1137. package/dist/naming-policy.js +19 -0
  1138. package/dist/naming-policy.js.map +1 -1
  1139. package/dist/patterns/local-lowering.d.ts +27 -0
  1140. package/dist/patterns/local-lowering.d.ts.map +1 -0
  1141. package/dist/patterns/local-lowering.js +296 -0
  1142. package/dist/patterns/local-lowering.js.map +1 -0
  1143. package/dist/patterns/static-assignment-lowering.d.ts +11 -0
  1144. package/dist/patterns/static-assignment-lowering.d.ts.map +1 -0
  1145. package/dist/patterns/static-assignment-lowering.js +11 -0
  1146. package/dist/patterns/static-assignment-lowering.js.map +1 -0
  1147. package/dist/patterns/static-lowering-assignments.d.ts +16 -0
  1148. package/dist/patterns/static-lowering-assignments.d.ts.map +1 -0
  1149. package/dist/patterns/static-lowering-assignments.js +269 -0
  1150. package/dist/patterns/static-lowering-assignments.js.map +1 -0
  1151. package/dist/patterns/static-lowering-members.d.ts +15 -0
  1152. package/dist/patterns/static-lowering-members.d.ts.map +1 -0
  1153. package/dist/patterns/static-lowering-members.js +231 -0
  1154. package/dist/patterns/static-lowering-members.js.map +1 -0
  1155. package/dist/patterns-cases/array-and-object.test.d.ts +2 -0
  1156. package/dist/patterns-cases/array-and-object.test.d.ts.map +1 -0
  1157. package/dist/patterns-cases/array-and-object.test.js +370 -0
  1158. package/dist/patterns-cases/array-and-object.test.js.map +1 -0
  1159. package/dist/patterns-cases/assignments-and-complex.test.d.ts +2 -0
  1160. package/dist/patterns-cases/assignments-and-complex.test.d.ts.map +1 -0
  1161. package/dist/patterns-cases/assignments-and-complex.test.js +361 -0
  1162. package/dist/patterns-cases/assignments-and-complex.test.js.map +1 -0
  1163. package/dist/patterns-cases/edge-cases.test.d.ts +2 -0
  1164. package/dist/patterns-cases/edge-cases.test.d.ts.map +1 -0
  1165. package/dist/patterns-cases/edge-cases.test.js +133 -0
  1166. package/dist/patterns-cases/edge-cases.test.js.map +1 -0
  1167. package/dist/patterns-cases/helpers.d.ts +6 -0
  1168. package/dist/patterns-cases/helpers.d.ts.map +1 -0
  1169. package/dist/patterns-cases/helpers.js +33 -0
  1170. package/dist/patterns-cases/helpers.js.map +1 -0
  1171. package/dist/patterns-cases/loops-and-parameters.test.d.ts +2 -0
  1172. package/dist/patterns-cases/loops-and-parameters.test.d.ts.map +1 -0
  1173. package/dist/patterns-cases/loops-and-parameters.test.js +275 -0
  1174. package/dist/patterns-cases/loops-and-parameters.test.js.map +1 -0
  1175. package/dist/patterns-cases/methods-and-semantic-infra.test.d.ts +2 -0
  1176. package/dist/patterns-cases/methods-and-semantic-infra.test.d.ts.map +1 -0
  1177. package/dist/patterns-cases/methods-and-semantic-infra.test.js +438 -0
  1178. package/dist/patterns-cases/methods-and-semantic-infra.test.js.map +1 -0
  1179. package/dist/patterns.d.ts +5 -20
  1180. package/dist/patterns.d.ts.map +1 -1
  1181. package/dist/patterns.js +3 -809
  1182. package/dist/patterns.js.map +1 -1
  1183. package/dist/patterns.test.d.ts +5 -14
  1184. package/dist/patterns.test.d.ts.map +1 -1
  1185. package/dist/patterns.test.js +5 -1341
  1186. package/dist/patterns.test.js.map +1 -1
  1187. package/dist/runtime-union-cases/helpers.d.ts +7 -0
  1188. package/dist/runtime-union-cases/helpers.d.ts.map +1 -0
  1189. package/dist/runtime-union-cases/helpers.js +17 -0
  1190. package/dist/runtime-union-cases/helpers.js.map +1 -0
  1191. package/dist/specialization/generic-functions-cases/basics-and-structural.test.d.ts +6 -0
  1192. package/dist/specialization/generic-functions-cases/basics-and-structural.test.d.ts.map +1 -0
  1193. package/dist/specialization/generic-functions-cases/basics-and-structural.test.js +357 -0
  1194. package/dist/specialization/generic-functions-cases/basics-and-structural.test.js.map +1 -0
  1195. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.d.ts +6 -0
  1196. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.d.ts.map +1 -0
  1197. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.js +304 -0
  1198. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.js.map +1 -0
  1199. package/dist/specialization/generic-functions.test.d.ts +2 -5
  1200. package/dist/specialization/generic-functions.test.d.ts.map +1 -1
  1201. package/dist/specialization/generic-functions.test.js +2 -650
  1202. package/dist/specialization/generic-functions.test.js.map +1 -1
  1203. package/dist/specialization/helpers.d.ts.map +1 -1
  1204. package/dist/specialization/helpers.js +2 -16
  1205. package/dist/specialization/helpers.js.map +1 -1
  1206. package/dist/specialization/interfaces.test.js +58 -0
  1207. package/dist/specialization/interfaces.test.js.map +1 -1
  1208. package/dist/specialization/naming.d.ts.map +1 -1
  1209. package/dist/specialization/naming.js +9 -2
  1210. package/dist/specialization/naming.js.map +1 -1
  1211. package/dist/statements/block-emitters/block-and-return.d.ts +10 -0
  1212. package/dist/statements/block-emitters/block-and-return.d.ts.map +1 -0
  1213. package/dist/statements/block-emitters/block-and-return.js +132 -0
  1214. package/dist/statements/block-emitters/block-and-return.js.map +1 -0
  1215. package/dist/statements/block-emitters/expression-statements.d.ts +7 -0
  1216. package/dist/statements/block-emitters/expression-statements.d.ts.map +1 -0
  1217. package/dist/statements/block-emitters/expression-statements.js +72 -0
  1218. package/dist/statements/block-emitters/expression-statements.js.map +1 -0
  1219. package/dist/statements/block-emitters/yield-statements.d.ts +13 -0
  1220. package/dist/statements/block-emitters/yield-statements.d.ts.map +1 -0
  1221. package/dist/statements/block-emitters/yield-statements.js +217 -0
  1222. package/dist/statements/block-emitters/yield-statements.js.map +1 -0
  1223. package/dist/statements/blocks.d.ts +3 -86
  1224. package/dist/statements/blocks.d.ts.map +1 -1
  1225. package/dist/statements/blocks.js +3 -443
  1226. package/dist/statements/blocks.js.map +1 -1
  1227. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  1228. package/dist/statements/classes/members/constructors.js +105 -13
  1229. package/dist/statements/classes/members/constructors.js.map +1 -1
  1230. package/dist/statements/classes/members/methods.d.ts +1 -1
  1231. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  1232. package/dist/statements/classes/members/methods.js +329 -76
  1233. package/dist/statements/classes/members/methods.js.map +1 -1
  1234. package/dist/statements/classes/members/orchestrator.d.ts +3 -3
  1235. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  1236. package/dist/statements/classes/members/orchestrator.js +10 -4
  1237. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  1238. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  1239. package/dist/statements/classes/members/properties.js +29 -5
  1240. package/dist/statements/classes/members/properties.js.map +1 -1
  1241. package/dist/statements/classes/members/shadowing.test.js +3 -2
  1242. package/dist/statements/classes/members/shadowing.test.js.map +1 -1
  1243. package/dist/statements/classes/parameters.d.ts +9 -1
  1244. package/dist/statements/classes/parameters.d.ts.map +1 -1
  1245. package/dist/statements/classes/parameters.js +86 -6
  1246. package/dist/statements/classes/parameters.js.map +1 -1
  1247. package/dist/statements/classes/properties.d.ts.map +1 -1
  1248. package/dist/statements/classes/properties.js +2 -1
  1249. package/dist/statements/classes/properties.js.map +1 -1
  1250. package/dist/statements/control/conditionals/branch-context.d.ts +58 -0
  1251. package/dist/statements/control/conditionals/branch-context.d.ts.map +1 -0
  1252. package/dist/statements/control/conditionals/branch-context.js +530 -0
  1253. package/dist/statements/control/conditionals/branch-context.js.map +1 -0
  1254. package/dist/statements/control/conditionals/branch-context.test.d.ts +2 -0
  1255. package/dist/statements/control/conditionals/branch-context.test.d.ts.map +1 -0
  1256. package/dist/statements/control/conditionals/branch-context.test.js +34 -0
  1257. package/dist/statements/control/conditionals/branch-context.test.js.map +1 -0
  1258. package/dist/statements/control/conditionals/guard-analysis.d.ts +8 -208
  1259. package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -1
  1260. package/dist/statements/control/conditionals/guard-analysis.js +8 -763
  1261. package/dist/statements/control/conditionals/guard-analysis.js.map +1 -1
  1262. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts +20 -0
  1263. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts.map +1 -0
  1264. package/dist/statements/control/conditionals/guard-detectors-discriminant.js +214 -0
  1265. package/dist/statements/control/conditionals/guard-detectors-discriminant.js.map +1 -0
  1266. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts +32 -0
  1267. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts.map +1 -0
  1268. package/dist/statements/control/conditionals/guard-detectors-structural.js +302 -0
  1269. package/dist/statements/control/conditionals/guard-detectors-structural.js.map +1 -0
  1270. package/dist/statements/control/conditionals/guard-detectors.d.ts +11 -0
  1271. package/dist/statements/control/conditionals/guard-detectors.d.ts.map +1 -0
  1272. package/dist/statements/control/conditionals/guard-detectors.js +11 -0
  1273. package/dist/statements/control/conditionals/guard-detectors.js.map +1 -0
  1274. package/dist/statements/control/conditionals/guard-extraction.d.ts +30 -0
  1275. package/dist/statements/control/conditionals/guard-extraction.d.ts.map +1 -0
  1276. package/dist/statements/control/conditionals/guard-extraction.js +304 -0
  1277. package/dist/statements/control/conditionals/guard-extraction.js.map +1 -0
  1278. package/dist/statements/control/conditionals/guard-types.d.ts +214 -0
  1279. package/dist/statements/control/conditionals/guard-types.d.ts.map +1 -0
  1280. package/dist/statements/control/conditionals/guard-types.js +242 -0
  1281. package/dist/statements/control/conditionals/guard-types.js.map +1 -0
  1282. package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts +28 -0
  1283. package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts.map +1 -0
  1284. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js +261 -0
  1285. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js.map +1 -0
  1286. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts +24 -0
  1287. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts.map +1 -0
  1288. package/dist/statements/control/conditionals/if-emit-predicate-guards.js +165 -0
  1289. package/dist/statements/control/conditionals/if-emit-predicate-guards.js.map +1 -0
  1290. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts +24 -0
  1291. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts.map +1 -0
  1292. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js +391 -0
  1293. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js.map +1 -0
  1294. package/dist/statements/control/conditionals/if-emit-type-guards.d.ts +10 -0
  1295. package/dist/statements/control/conditionals/if-emit-type-guards.d.ts.map +1 -0
  1296. package/dist/statements/control/conditionals/if-emit-type-guards.js +10 -0
  1297. package/dist/statements/control/conditionals/if-emit-type-guards.js.map +1 -0
  1298. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts +23 -0
  1299. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts.map +1 -0
  1300. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js +264 -0
  1301. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js.map +1 -0
  1302. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts +10 -0
  1303. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts.map +1 -0
  1304. package/dist/statements/control/conditionals/if-emit-union-guards.js +10 -0
  1305. package/dist/statements/control/conditionals/if-emit-union-guards.js.map +1 -0
  1306. package/dist/statements/control/conditionals/if-emitter.d.ts +6 -3
  1307. package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -1
  1308. package/dist/statements/control/conditionals/if-emitter.js +99 -916
  1309. package/dist/statements/control/conditionals/if-emitter.js.map +1 -1
  1310. package/dist/statements/control/exceptions.d.ts.map +1 -1
  1311. package/dist/statements/control/exceptions.js +19 -2
  1312. package/dist/statements/control/exceptions.js.map +1 -1
  1313. package/dist/statements/control/loop-helpers.d.ts +13 -0
  1314. package/dist/statements/control/loop-helpers.d.ts.map +1 -0
  1315. package/dist/statements/control/loop-helpers.js +75 -0
  1316. package/dist/statements/control/loop-helpers.js.map +1 -0
  1317. package/dist/statements/control/loops.d.ts.map +1 -1
  1318. package/dist/statements/control/loops.js +85 -169
  1319. package/dist/statements/control/loops.js.map +1 -1
  1320. package/dist/statements/declarations/class-emitter-helpers.d.ts +17 -0
  1321. package/dist/statements/declarations/class-emitter-helpers.d.ts.map +1 -0
  1322. package/dist/statements/declarations/class-emitter-helpers.js +126 -0
  1323. package/dist/statements/declarations/class-emitter-helpers.js.map +1 -0
  1324. package/dist/statements/declarations/classes.d.ts.map +1 -1
  1325. package/dist/statements/declarations/classes.js +102 -27
  1326. package/dist/statements/declarations/classes.js.map +1 -1
  1327. package/dist/statements/declarations/function-local-emitter.d.ts +7 -0
  1328. package/dist/statements/declarations/function-local-emitter.d.ts.map +1 -0
  1329. package/dist/statements/declarations/function-local-emitter.js +363 -0
  1330. package/dist/statements/declarations/function-local-emitter.js.map +1 -0
  1331. package/dist/statements/declarations/function-module-emitter.d.ts +7 -0
  1332. package/dist/statements/declarations/function-module-emitter.d.ts.map +1 -0
  1333. package/dist/statements/declarations/function-module-emitter.js +372 -0
  1334. package/dist/statements/declarations/function-module-emitter.js.map +1 -0
  1335. package/dist/statements/declarations/function-shared.d.ts +43 -0
  1336. package/dist/statements/declarations/function-shared.d.ts.map +1 -0
  1337. package/dist/statements/declarations/function-shared.js +246 -0
  1338. package/dist/statements/declarations/function-shared.js.map +1 -0
  1339. package/dist/statements/declarations/functions.d.ts +2 -27
  1340. package/dist/statements/declarations/functions.d.ts.map +1 -1
  1341. package/dist/statements/declarations/functions.js +2 -709
  1342. package/dist/statements/declarations/functions.js.map +1 -1
  1343. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  1344. package/dist/statements/declarations/interfaces.js +25 -9
  1345. package/dist/statements/declarations/interfaces.js.map +1 -1
  1346. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  1347. package/dist/statements/declarations/type-aliases.js +3 -4
  1348. package/dist/statements/declarations/type-aliases.js.map +1 -1
  1349. package/dist/statements/declarations/variable-local-type.d.ts +36 -0
  1350. package/dist/statements/declarations/variable-local-type.d.ts.map +1 -0
  1351. package/dist/statements/declarations/variable-local-type.js +122 -0
  1352. package/dist/statements/declarations/variable-local-type.js.map +1 -0
  1353. package/dist/statements/declarations/variable-static-arrow.d.ts +47 -0
  1354. package/dist/statements/declarations/variable-static-arrow.d.ts.map +1 -0
  1355. package/dist/statements/declarations/variable-static-arrow.js +363 -0
  1356. package/dist/statements/declarations/variable-static-arrow.js.map +1 -0
  1357. package/dist/statements/declarations/variable-type-helpers.d.ts +86 -0
  1358. package/dist/statements/declarations/variable-type-helpers.d.ts.map +1 -0
  1359. package/dist/statements/declarations/variable-type-helpers.js +242 -0
  1360. package/dist/statements/declarations/variable-type-helpers.js.map +1 -0
  1361. package/dist/statements/declarations/variable-type-resolution.d.ts +11 -0
  1362. package/dist/statements/declarations/variable-type-resolution.d.ts.map +1 -0
  1363. package/dist/statements/declarations/variable-type-resolution.js +11 -0
  1364. package/dist/statements/declarations/variable-type-resolution.js.map +1 -0
  1365. package/dist/statements/declarations/variables.d.ts +5 -1
  1366. package/dist/statements/declarations/variables.d.ts.map +1 -1
  1367. package/dist/statements/declarations/variables.js +116 -596
  1368. package/dist/statements/declarations/variables.js.map +1 -1
  1369. package/dist/statements/index.test.d.ts +10 -5
  1370. package/dist/statements/index.test.d.ts.map +1 -1
  1371. package/dist/statements/index.test.js +10 -1969
  1372. package/dist/statements/index.test.js.map +1 -1
  1373. package/dist/statements/parameter-defaults.d.ts +17 -0
  1374. package/dist/statements/parameter-defaults.d.ts.map +1 -0
  1375. package/dist/statements/parameter-defaults.js +122 -0
  1376. package/dist/statements/parameter-defaults.js.map +1 -0
  1377. package/dist/statements/statement-cases/async-returns.test.d.ts +2 -0
  1378. package/dist/statements/statement-cases/async-returns.test.d.ts.map +1 -0
  1379. package/dist/statements/statement-cases/async-returns.test.js +311 -0
  1380. package/dist/statements/statement-cases/async-returns.test.js.map +1 -0
  1381. package/dist/statements/statement-cases/flow-and-void.test.d.ts +2 -0
  1382. package/dist/statements/statement-cases/flow-and-void.test.d.ts.map +1 -0
  1383. package/dist/statements/statement-cases/flow-and-void.test.js +405 -0
  1384. package/dist/statements/statement-cases/flow-and-void.test.js.map +1 -0
  1385. package/dist/statements/statement-cases/helpers.d.ts +6 -0
  1386. package/dist/statements/statement-cases/helpers.d.ts.map +1 -0
  1387. package/dist/statements/statement-cases/helpers.js +4 -0
  1388. package/dist/statements/statement-cases/helpers.js.map +1 -0
  1389. package/dist/statements/statement-cases/if-and-instanceof-guards.test.d.ts +2 -0
  1390. package/dist/statements/statement-cases/if-and-instanceof-guards.test.d.ts.map +1 -0
  1391. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js +826 -0
  1392. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js.map +1 -0
  1393. package/dist/statements/statement-cases/loops.test.d.ts +2 -0
  1394. package/dist/statements/statement-cases/loops.test.d.ts.map +1 -0
  1395. package/dist/statements/statement-cases/loops.test.js +433 -0
  1396. package/dist/statements/statement-cases/loops.test.js.map +1 -0
  1397. package/dist/statements/statement-cases/scopes-and-storage.test.d.ts +2 -0
  1398. package/dist/statements/statement-cases/scopes-and-storage.test.d.ts.map +1 -0
  1399. package/dist/statements/statement-cases/scopes-and-storage.test.js +216 -0
  1400. package/dist/statements/statement-cases/scopes-and-storage.test.js.map +1 -0
  1401. package/dist/statements/statement-cases/union-guards-basic.test.d.ts +2 -0
  1402. package/dist/statements/statement-cases/union-guards-basic.test.d.ts.map +1 -0
  1403. package/dist/statements/statement-cases/union-guards-basic.test.js +235 -0
  1404. package/dist/statements/statement-cases/union-guards-basic.test.js.map +1 -0
  1405. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.d.ts +2 -0
  1406. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.d.ts.map +1 -0
  1407. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js +265 -0
  1408. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js.map +1 -0
  1409. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.d.ts +2 -0
  1410. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.d.ts.map +1 -0
  1411. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js +630 -0
  1412. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js.map +1 -0
  1413. package/dist/statements/statement-cases/union-guards-remapped-a.test.d.ts +2 -0
  1414. package/dist/statements/statement-cases/union-guards-remapped-a.test.d.ts.map +1 -0
  1415. package/dist/statements/statement-cases/union-guards-remapped-a.test.js +382 -0
  1416. package/dist/statements/statement-cases/union-guards-remapped-a.test.js.map +1 -0
  1417. package/dist/statements/statement-cases/union-guards-remapped-b.test.d.ts +2 -0
  1418. package/dist/statements/statement-cases/union-guards-remapped-b.test.d.ts.map +1 -0
  1419. package/dist/statements/statement-cases/union-guards-remapped-b.test.js +397 -0
  1420. package/dist/statements/statement-cases/union-guards-remapped-b.test.js.map +1 -0
  1421. package/dist/type-assertion.test.js +258 -10
  1422. package/dist/type-assertion.test.js.map +1 -1
  1423. package/dist/types/arrays.d.ts.map +1 -1
  1424. package/dist/types/arrays.js +10 -1
  1425. package/dist/types/arrays.js.map +1 -1
  1426. package/dist/types/emitter.d.ts.map +1 -1
  1427. package/dist/types/emitter.js +129 -24
  1428. package/dist/types/emitter.js.map +1 -1
  1429. package/dist/types/index.test.js +205 -1
  1430. package/dist/types/index.test.js.map +1 -1
  1431. package/dist/types/objects.d.ts +2 -2
  1432. package/dist/types/objects.d.ts.map +1 -1
  1433. package/dist/types/objects.js +2 -2
  1434. package/dist/types/objects.js.map +1 -1
  1435. package/dist/types/parameters.d.ts.map +1 -1
  1436. package/dist/types/parameters.js +88 -18
  1437. package/dist/types/parameters.js.map +1 -1
  1438. package/dist/types/reference-lookup.d.ts +16 -0
  1439. package/dist/types/reference-lookup.d.ts.map +1 -0
  1440. package/dist/types/reference-lookup.js +133 -0
  1441. package/dist/types/reference-lookup.js.map +1 -0
  1442. package/dist/types/reference-structural-signatures.d.ts +10 -0
  1443. package/dist/types/reference-structural-signatures.d.ts.map +1 -0
  1444. package/dist/types/reference-structural-signatures.js +310 -0
  1445. package/dist/types/reference-structural-signatures.js.map +1 -0
  1446. package/dist/types/references-cases/array-and-cross-module.test.d.ts +2 -0
  1447. package/dist/types/references-cases/array-and-cross-module.test.d.ts.map +1 -0
  1448. package/dist/types/references-cases/array-and-cross-module.test.js +150 -0
  1449. package/dist/types/references-cases/array-and-cross-module.test.js.map +1 -0
  1450. package/dist/types/references-cases/bindings-and-local.test.d.ts +2 -0
  1451. package/dist/types/references-cases/bindings-and-local.test.d.ts.map +1 -0
  1452. package/dist/types/references-cases/bindings-and-local.test.js +368 -0
  1453. package/dist/types/references-cases/bindings-and-local.test.js.map +1 -0
  1454. package/dist/types/references-cases/helpers.d.ts +14 -0
  1455. package/dist/types/references-cases/helpers.d.ts.map +1 -0
  1456. package/dist/types/references-cases/helpers.js +39 -0
  1457. package/dist/types/references-cases/helpers.js.map +1 -0
  1458. package/dist/types/references-cases/polymorphic-and-recursive.test.d.ts +2 -0
  1459. package/dist/types/references-cases/polymorphic-and-recursive.test.d.ts.map +1 -0
  1460. package/dist/types/references-cases/polymorphic-and-recursive.test.js +387 -0
  1461. package/dist/types/references-cases/polymorphic-and-recursive.test.js.map +1 -0
  1462. package/dist/types/references-cases/primitive-and-builtins.test.d.ts +2 -0
  1463. package/dist/types/references-cases/primitive-and-builtins.test.d.ts.map +1 -0
  1464. package/dist/types/references-cases/primitive-and-builtins.test.js +116 -0
  1465. package/dist/types/references-cases/primitive-and-builtins.test.js.map +1 -0
  1466. package/dist/types/references-cases/resolved-and-imported.test.d.ts +2 -0
  1467. package/dist/types/references-cases/resolved-and-imported.test.d.ts.map +1 -0
  1468. package/dist/types/references-cases/resolved-and-imported.test.js +669 -0
  1469. package/dist/types/references-cases/resolved-and-imported.test.js.map +1 -0
  1470. package/dist/types/references.d.ts.map +1 -1
  1471. package/dist/types/references.js +250 -154
  1472. package/dist/types/references.js.map +1 -1
  1473. package/dist/types/references.test.d.ts +5 -10
  1474. package/dist/types/references.test.d.ts.map +1 -1
  1475. package/dist/types/references.test.js +5 -730
  1476. package/dist/types/references.test.js.map +1 -1
  1477. package/dist/types/unions-cases/basic-and-ordering.test.d.ts +6 -0
  1478. package/dist/types/unions-cases/basic-and-ordering.test.d.ts.map +1 -0
  1479. package/dist/types/unions-cases/basic-and-ordering.test.js +322 -0
  1480. package/dist/types/unions-cases/basic-and-ordering.test.js.map +1 -0
  1481. package/dist/types/unions-cases/large-and-fallback.test.d.ts +6 -0
  1482. package/dist/types/unions-cases/large-and-fallback.test.d.ts.map +1 -0
  1483. package/dist/types/unions-cases/large-and-fallback.test.js +246 -0
  1484. package/dist/types/unions-cases/large-and-fallback.test.js.map +1 -0
  1485. package/dist/types/unions-cases/multi-surface.test.d.ts +6 -0
  1486. package/dist/types/unions-cases/multi-surface.test.d.ts.map +1 -0
  1487. package/dist/types/unions-cases/multi-surface.test.js +268 -0
  1488. package/dist/types/unions-cases/multi-surface.test.js.map +1 -0
  1489. package/dist/types/unions.d.ts +1 -1
  1490. package/dist/types/unions.d.ts.map +1 -1
  1491. package/dist/types/unions.js +60 -65
  1492. package/dist/types/unions.js.map +1 -1
  1493. package/dist/types/unions.test.d.ts +3 -5
  1494. package/dist/types/unions.test.d.ts.map +1 -1
  1495. package/dist/types/unions.test.js +3 -413
  1496. package/dist/types/unions.test.js.map +1 -1
  1497. package/package.json +4 -4
@@ -4,12 +4,6 @@
4
4
  *
5
5
  * Primary entry point is emitExpressionAst which returns [CSharpExpressionAst, EmitterContext].
6
6
  */
7
- import { emitTypeAst } from "./type-emitter.js";
8
- import { substituteTypeArgs, resolveTypeAlias, stripNullish, getPropertyType, getAllPropertySignatures, resolveLocalTypeInfo, } from "./core/semantic/type-resolution.js";
9
- import { identifierExpression, identifierType, nullLiteral, stringLiteral, } from "./core/format/backend-ast/builders.js";
10
- import { getIdentifierTypeName } from "./core/format/backend-ast/utils.js";
11
- import { allocateLocalName } from "./core/format/local-names.js";
12
- import { emitCSharpName } from "./naming-policy.js";
13
7
  // Import expression emitters from specialized modules
14
8
  import { emitLiteral } from "./expressions/literals.js";
15
9
  import { emitIdentifier } from "./expressions/identifiers.js";
@@ -20,1379 +14,12 @@ import { emitNew } from "./expressions/calls/new-emitter.js";
20
14
  import { emitBinary, emitLogical, emitUnary, emitUpdate, emitAssignment, emitConditional, } from "./expressions/operators.js";
21
15
  import { emitFunctionExpression, emitArrowFunction, } from "./expressions/functions.js";
22
16
  import { emitTemplateLiteral, emitSpread, emitAwait, } from "./expressions/other.js";
23
- const hasNullishBranch = (type) => {
24
- if (!type || type.kind !== "unionType")
25
- return false;
26
- return type.types.some((member) => member.kind === "primitiveType" &&
27
- (member.name === "null" || member.name === "undefined"));
28
- };
29
- const buildDelegateType = (parameterTypes, returnType) => identifierType("global::System.Func", [...parameterTypes, returnType]);
30
- const collectLocalStructuralProperties = (info) => {
31
- switch (info.kind) {
32
- case "interface": {
33
- if (info.members.some((member) => member.kind === "methodSignature")) {
34
- return undefined;
35
- }
36
- const props = [];
37
- for (const member of info.members) {
38
- if (member.kind !== "propertySignature")
39
- continue;
40
- props.push({
41
- name: member.name,
42
- type: member.type,
43
- isOptional: member.isOptional,
44
- });
45
- }
46
- return props;
47
- }
48
- case "class": {
49
- if (info.members.some((member) => member.kind === "methodDeclaration")) {
50
- return undefined;
51
- }
52
- const props = [];
53
- for (const member of info.members) {
54
- if (member.kind !== "propertyDeclaration")
55
- continue;
56
- if (!member.type)
57
- return undefined;
58
- props.push({
59
- name: member.name,
60
- type: member.type,
61
- isOptional: false,
62
- });
63
- }
64
- return props;
65
- }
66
- case "typeAlias": {
67
- const aliasType = info.type;
68
- if (aliasType.kind !== "objectType")
69
- return undefined;
70
- if (aliasType.members.some((member) => member.kind === "methodSignature")) {
71
- return undefined;
72
- }
73
- return aliasType.members
74
- .filter((member) => member.kind === "propertySignature")
75
- .map((member) => ({
76
- name: member.name,
77
- type: member.type,
78
- isOptional: member.isOptional,
79
- }));
80
- }
81
- default:
82
- return undefined;
83
- }
84
- };
85
- const parseEmitterClrTypeString = (clrType) => {
86
- if (clrType === "System.Void" || clrType === "void") {
87
- return { kind: "voidType" };
88
- }
89
- const primitiveMap = {
90
- "System.String": { kind: "primitiveType", name: "string" },
91
- string: { kind: "primitiveType", name: "string" },
92
- "System.Int32": { kind: "primitiveType", name: "int" },
93
- int: { kind: "primitiveType", name: "int" },
94
- "System.Double": { kind: "primitiveType", name: "number" },
95
- double: { kind: "primitiveType", name: "number" },
96
- "System.Boolean": { kind: "primitiveType", name: "boolean" },
97
- bool: { kind: "primitiveType", name: "boolean" },
98
- "System.Char": { kind: "primitiveType", name: "char" },
99
- char: { kind: "primitiveType", name: "char" },
100
- "System.Int64": { kind: "referenceType", name: "long" },
101
- long: { kind: "referenceType", name: "long" },
102
- "System.Object": { kind: "referenceType", name: "object" },
103
- object: { kind: "referenceType", name: "object" },
104
- };
105
- const primitive = primitiveMap[clrType];
106
- if (primitive)
107
- return primitive;
108
- if (clrType.endsWith("[]")) {
109
- return {
110
- kind: "arrayType",
111
- elementType: parseEmitterClrTypeString(clrType.slice(0, -2)),
112
- };
113
- }
114
- if (clrType.endsWith("*")) {
115
- return parseEmitterClrTypeString(clrType.slice(0, -1));
116
- }
117
- if (clrType.startsWith("System.Nullable`1")) {
118
- const innerMatch = clrType.match(/System\.Nullable`1\[\[([^\]]+)\]\]/);
119
- if (innerMatch?.[1]) {
120
- return {
121
- kind: "unionType",
122
- types: [
123
- parseEmitterClrTypeString(innerMatch[1]),
124
- { kind: "primitiveType", name: "undefined" },
125
- ],
126
- };
127
- }
128
- }
129
- if (/^T\d*$/.test(clrType) || /^T[A-Z][a-zA-Z]*$/.test(clrType)) {
130
- return { kind: "typeParameterType", name: clrType };
131
- }
132
- const underscoreInstantiationMatch = clrType.match(/^(.+?)_(\d+)\[\[(.+)\]\]$/);
133
- if (underscoreInstantiationMatch?.[1] &&
134
- underscoreInstantiationMatch[2] &&
135
- underscoreInstantiationMatch[3]) {
136
- const baseName = underscoreInstantiationMatch[1];
137
- const arity = Number.parseInt(underscoreInstantiationMatch[2], 10);
138
- const args = splitEmitterTypeArguments(underscoreInstantiationMatch[3]);
139
- return {
140
- kind: "referenceType",
141
- name: `${baseName}_${arity}`,
142
- typeArguments: args.length === arity
143
- ? args.map((arg) => parseEmitterClrTypeString(arg.trim()))
144
- : undefined,
145
- resolvedClrType: clrType,
146
- };
147
- }
148
- const genericMatch = clrType.match(/^(.+)`(\d+)(?:\[\[(.+)\]\])?$/);
149
- if (genericMatch?.[1] && genericMatch[2]) {
150
- const baseName = genericMatch[1];
151
- const arity = Number.parseInt(genericMatch[2], 10);
152
- const typeArguments = genericMatch[3]
153
- ? splitEmitterTypeArguments(genericMatch[3]).map((arg) => parseEmitterClrTypeString(arg.trim()))
154
- : Array.from({ length: arity }, (_, index) => ({
155
- kind: "typeParameterType",
156
- name: index === 0 ? "T" : `T${index + 1}`,
157
- }));
158
- return {
159
- kind: "referenceType",
160
- name: baseName,
161
- typeArguments,
162
- resolvedClrType: clrType,
163
- };
164
- }
165
- return {
166
- kind: "referenceType",
167
- name: clrType,
168
- resolvedClrType: clrType,
169
- };
170
- };
171
- const splitEmitterTypeArguments = (text) => {
172
- const parts = [];
173
- let depth = 0;
174
- let current = "";
175
- for (const char of text) {
176
- if (char === "[") {
177
- depth++;
178
- current += char;
179
- continue;
180
- }
181
- if (char === "]") {
182
- depth--;
183
- current += char;
184
- continue;
185
- }
186
- if (char === "," && depth === 0) {
187
- parts.push(current.trim());
188
- current = "";
189
- continue;
190
- }
191
- current += char;
192
- }
193
- if (current.trim()) {
194
- parts.push(current.trim());
195
- }
196
- return parts;
197
- };
198
- const addUndefinedToBindingType = (type) => {
199
- if (type.kind === "unionType" &&
200
- type.types.some((candidate) => candidate.kind === "primitiveType" && candidate.name === "undefined")) {
201
- return type;
202
- }
203
- return {
204
- kind: "unionType",
205
- types: [type, { kind: "primitiveType", name: "undefined" }],
206
- };
207
- };
208
- const parseBindingPropertyType = (normalizedSignature) => {
209
- if (!normalizedSignature) {
210
- return { kind: "unknownType" };
211
- }
212
- const indexerMatch = normalizedSignature.match(/\|\[[^\]]*\]:([^|]+)\|/);
213
- if (indexerMatch?.[1]) {
214
- return parseEmitterClrTypeString(indexerMatch[1]);
215
- }
216
- const propertyMatch = normalizedSignature.match(/\|:([^|]+)\|/);
217
- if (propertyMatch?.[1]) {
218
- return parseEmitterClrTypeString(propertyMatch[1]);
219
- }
220
- const fieldParts = normalizedSignature.split("|");
221
- if (fieldParts.length >= 2 && fieldParts[1]) {
222
- return parseEmitterClrTypeString(fieldParts[1]);
223
- }
224
- return { kind: "unknownType" };
225
- };
226
- const collectBindingStructuralProperties = (type, context) => {
227
- const registry = context.bindingsRegistry;
228
- if (!registry || registry.size === 0) {
229
- return undefined;
230
- }
231
- const candidates = new Set();
232
- const add = (value) => {
233
- if (value && value.length > 0) {
234
- candidates.add(value);
235
- if (value.includes(".")) {
236
- candidates.add(value.split(".").pop() ?? value);
237
- }
238
- }
239
- };
240
- add(type.name);
241
- add(type.resolvedClrType);
242
- add(type.typeId?.tsName);
243
- add(type.typeId?.clrName);
244
- for (const candidate of candidates) {
245
- const binding = registry.get(candidate);
246
- if (!binding)
247
- continue;
248
- if (binding.members.some((member) => member.kind === "method")) {
249
- return undefined;
250
- }
251
- const props = binding.members
252
- .filter((member) => member.kind === "property")
253
- .map((member) => ({
254
- name: member.alias,
255
- type: member.semanticType !== undefined
256
- ? member.semanticOptional === true
257
- ? addUndefinedToBindingType(member.semanticType)
258
- : member.semanticType
259
- : parseBindingPropertyType(member.signature),
260
- isOptional: member.semanticOptional === true,
261
- }));
262
- if (props.length > 0) {
263
- return props;
264
- }
265
- }
266
- return undefined;
267
- };
268
- const collectStructuralProperties = (type, context) => {
269
- if (!type)
270
- return undefined;
271
- const resolved = resolveTypeAlias(stripNullish(type), context);
272
- if (resolved.kind === "objectType") {
273
- if (resolved.members.some((member) => member.kind === "methodSignature")) {
274
- return undefined;
275
- }
276
- return resolved.members
277
- .filter((member) => member.kind === "propertySignature")
278
- .map((member) => ({
279
- name: member.name,
280
- type: member.type,
281
- isOptional: member.isOptional,
282
- }));
283
- }
284
- if (resolved.kind !== "referenceType") {
285
- return undefined;
286
- }
287
- const inheritedInterfaceProps = getAllPropertySignatures(resolved, context);
288
- if (inheritedInterfaceProps && inheritedInterfaceProps.length > 0) {
289
- return inheritedInterfaceProps.map((member) => ({
290
- name: member.name,
291
- type: member.type,
292
- isOptional: member.isOptional,
293
- }));
294
- }
295
- const localInfo = resolveLocalTypeInfo(resolved, context)?.info;
296
- if (localInfo) {
297
- return collectLocalStructuralProperties(localInfo);
298
- }
299
- if (resolved.structuralMembers && resolved.structuralMembers.length > 0) {
300
- if (resolved.structuralMembers.some((member) => member.kind === "methodSignature")) {
301
- return undefined;
302
- }
303
- return resolved.structuralMembers
304
- .filter((member) => member.kind === "propertySignature")
305
- .map((member) => ({
306
- name: member.name,
307
- type: member.type,
308
- isOptional: member.isOptional,
309
- }));
310
- }
311
- return collectBindingStructuralProperties(resolved, context);
312
- };
313
- const resolveAnonymousStructuralReferenceType = (type, context) => {
314
- const resolved = resolveTypeAlias(stripNullish(type), context);
315
- if (resolved.kind !== "objectType")
316
- return undefined;
317
- const propertyNames = resolved.members
318
- .filter((member) => member.kind === "propertySignature")
319
- .map((member) => member.name)
320
- .sort();
321
- if (propertyNames.length === 0)
322
- return undefined;
323
- const candidateMaps = [];
324
- if (context.localTypes) {
325
- candidateMaps.push(context.localTypes);
326
- }
327
- if (context.options.moduleMap) {
328
- for (const module of context.options.moduleMap.values()) {
329
- if (module.localTypes) {
330
- candidateMaps.push(module.localTypes);
331
- }
332
- }
333
- }
334
- const matches = new Set();
335
- for (const localTypes of candidateMaps) {
336
- for (const [typeName, info] of localTypes.entries()) {
337
- if (info.kind !== "class" || !typeName.startsWith("__Anon_"))
338
- continue;
339
- const candidateProps = info.members
340
- .filter((member) => member.kind === "propertyDeclaration")
341
- .map((member) => member.name)
342
- .sort();
343
- if (candidateProps.length === propertyNames.length &&
344
- candidateProps.every((name, index) => name === propertyNames[index])) {
345
- matches.add(typeName);
346
- }
347
- }
348
- }
349
- if (matches.size !== 1)
350
- return undefined;
351
- const onlyMatch = [...matches][0];
352
- return onlyMatch
353
- ? { kind: "referenceType", name: onlyMatch }
354
- : undefined;
355
- };
356
- const isSameNominalType = (sourceType, targetType, context) => {
357
- if (!sourceType || !targetType)
358
- return false;
359
- const sourceBase = stripNullish(sourceType);
360
- const targetBase = stripNullish(targetType);
361
- if (sourceBase.kind === "referenceType" &&
362
- targetBase.kind === "referenceType") {
363
- if (sourceBase.name === targetBase.name) {
364
- return true;
365
- }
366
- if (sourceBase.typeId?.stableId !== undefined &&
367
- sourceBase.typeId.stableId === targetBase.typeId?.stableId) {
368
- return true;
369
- }
370
- if (sourceBase.resolvedClrType !== undefined &&
371
- sourceBase.resolvedClrType === targetBase.resolvedClrType) {
372
- return true;
373
- }
374
- }
375
- const sourceResolved = resolveTypeAlias(sourceBase, context);
376
- const targetResolved = resolveTypeAlias(targetBase, context);
377
- if (sourceResolved.kind !== "referenceType" ||
378
- targetResolved.kind !== "referenceType") {
379
- return false;
380
- }
381
- return (sourceResolved.name === targetResolved.name ||
382
- (sourceResolved.resolvedClrType !== undefined &&
383
- sourceResolved.resolvedClrType === targetResolved.resolvedClrType));
384
- };
385
- const buildStructuralSourceAccess = (sourceExpression, sourceType, propertyName, context) => {
386
- const resolvedSource = resolveTypeAlias(stripNullish(sourceType), context);
387
- if (resolvedSource.kind === "dictionaryType") {
388
- return {
389
- kind: "elementAccessExpression",
390
- expression: sourceExpression,
391
- arguments: [stringLiteral(propertyName)],
392
- };
393
- }
394
- return {
395
- kind: "memberAccessExpression",
396
- expression: sourceExpression,
397
- memberName: emitCSharpName(propertyName, "properties", context),
398
- };
399
- };
400
- const isDirectlyReusableExpression = (expression) => expression.kind === "identifierExpression" ||
401
- expression.kind === "memberAccessExpression" ||
402
- expression.kind === "elementAccessExpression";
403
- const getArrayElementType = (type, context) => {
404
- if (!type)
405
- return undefined;
406
- const resolved = resolveTypeAlias(stripNullish(type), context);
407
- if (resolved.kind === "arrayType")
408
- return resolved.elementType;
409
- if (resolved.kind === "tupleType") {
410
- if (resolved.elementTypes.length === 1)
411
- return resolved.elementTypes[0];
412
- return undefined;
413
- }
414
- if (resolved.kind === "referenceType" &&
415
- (resolved.name === "Array" ||
416
- resolved.name === "ReadonlyArray" ||
417
- resolved.name === "JSArray") &&
418
- resolved.typeArguments?.length === 1) {
419
- return resolved.typeArguments[0];
420
- }
421
- return undefined;
422
- };
423
- const getDictionaryValueType = (type, context) => {
424
- if (!type)
425
- return undefined;
426
- const resolved = resolveTypeAlias(stripNullish(type), context);
427
- if (resolved.kind !== "dictionaryType")
428
- return undefined;
429
- return resolved.valueType;
430
- };
431
- const tryAdaptStructuralExpressionAst = (emittedAst, sourceType, context, expectedType) => {
432
- if (!expectedType || !sourceType)
433
- return undefined;
434
- if (isSameNominalType(sourceType, expectedType, context)) {
435
- return undefined;
436
- }
437
- const strippedExpectedType = stripNullish(expectedType);
438
- const anonymousStructuralTarget = resolveAnonymousStructuralReferenceType(expectedType, context);
439
- const targetStructuralType = anonymousStructuralTarget ??
440
- resolveTypeAlias(strippedExpectedType, context);
441
- const targetEmissionType = anonymousStructuralTarget ??
442
- (strippedExpectedType.kind === "referenceType"
443
- ? strippedExpectedType
444
- : undefined);
445
- const targetProps = collectStructuralProperties(targetStructuralType, context);
446
- if (targetProps && targetProps.length > 0) {
447
- if (!targetEmissionType && targetStructuralType.kind === "objectType") {
448
- return undefined;
449
- }
450
- const sourceProps = collectStructuralProperties(sourceType, context);
451
- if (!sourceProps || sourceProps.length === 0)
452
- return undefined;
453
- const sourcePropNames = new Set(sourceProps.map((prop) => prop.name));
454
- const materializedProps = targetProps.filter((prop) => prop.isOptional || sourcePropNames.has(prop.name));
455
- if (materializedProps.length === 0)
456
- return undefined;
457
- for (const prop of targetProps) {
458
- if (!prop.isOptional && !sourcePropNames.has(prop.name)) {
459
- return undefined;
460
- }
461
- if (!sourcePropNames.has(prop.name))
462
- continue;
463
- if (!getPropertyType(sourceType, prop.name, context)) {
464
- return undefined;
465
- }
466
- }
467
- let currentContext = context;
468
- const [targetTypeAst, withType] = emitTypeAst(targetEmissionType ?? targetStructuralType, currentContext);
469
- currentContext = withType;
470
- const safeTargetTypeAst = targetTypeAst.kind === "nullableType"
471
- ? targetTypeAst.underlyingType
472
- : targetTypeAst;
473
- const sourcePropMap = new Map(sourceProps.map((prop) => [prop.name, prop]));
474
- const buildInitializer = (sourceExpression, initContext) => {
475
- let currentInitContext = initContext;
476
- const assignments = materializedProps
477
- .filter((prop) => sourcePropNames.has(prop.name))
478
- .map((prop) => {
479
- const sourceProp = sourcePropMap.get(prop.name);
480
- const sourceAccess = buildStructuralSourceAccess(sourceExpression, sourceType, prop.name, currentInitContext);
481
- const [adaptedValueAst, adaptedValueContext] = tryAdaptStructuralExpressionAst(sourceAccess, sourceProp?.type, currentInitContext, prop.type) ?? [sourceAccess, currentInitContext];
482
- currentInitContext = adaptedValueContext;
483
- return {
484
- kind: "assignmentExpression",
485
- operatorToken: "=",
486
- left: {
487
- kind: "identifierExpression",
488
- identifier: emitCSharpName(prop.name, "properties", currentInitContext),
489
- },
490
- right: adaptedValueAst,
491
- };
492
- });
493
- return [
494
- {
495
- kind: "objectCreationExpression",
496
- type: safeTargetTypeAst,
497
- arguments: [],
498
- initializer: assignments,
499
- },
500
- currentInitContext,
501
- ];
502
- };
503
- const sourceMayBeNullish = hasNullishBranch(sourceType);
504
- if (emittedAst.kind === "identifierExpression") {
505
- const [initializer, initializerContext] = buildInitializer(emittedAst, currentContext);
506
- if (!sourceMayBeNullish) {
507
- return [initializer, initializerContext];
508
- }
509
- return [
510
- {
511
- kind: "conditionalExpression",
512
- condition: {
513
- kind: "binaryExpression",
514
- operatorToken: "==",
515
- left: emittedAst,
516
- right: nullLiteral(),
517
- },
518
- whenTrue: {
519
- kind: "defaultExpression",
520
- type: safeTargetTypeAst,
521
- },
522
- whenFalse: initializer,
523
- },
524
- initializerContext,
525
- ];
526
- }
527
- const temp = allocateLocalName("__struct", currentContext);
528
- currentContext = temp.context;
529
- const tempIdentifier = {
530
- kind: "identifierExpression",
531
- identifier: temp.emittedName,
532
- };
533
- const statements = [
534
- {
535
- kind: "localDeclarationStatement",
536
- modifiers: [],
537
- type: { kind: "varType" },
538
- declarators: [{ name: temp.emittedName, initializer: emittedAst }],
539
- },
540
- ];
541
- if (sourceMayBeNullish) {
542
- statements.push({
543
- kind: "ifStatement",
544
- condition: {
545
- kind: "binaryExpression",
546
- operatorToken: "==",
547
- left: tempIdentifier,
548
- right: nullLiteral(),
549
- },
550
- thenStatement: {
551
- kind: "blockStatement",
552
- statements: [
553
- {
554
- kind: "returnStatement",
555
- expression: {
556
- kind: "defaultExpression",
557
- type: safeTargetTypeAst,
558
- },
559
- },
560
- ],
561
- },
562
- });
563
- }
564
- const [initializer, initializerContext] = buildInitializer(tempIdentifier, currentContext);
565
- currentContext = initializerContext;
566
- statements.push({
567
- kind: "returnStatement",
568
- expression: initializer,
569
- });
570
- const lambdaAst = {
571
- kind: "lambdaExpression",
572
- isAsync: false,
573
- parameters: [],
574
- body: {
575
- kind: "blockStatement",
576
- statements,
577
- },
578
- };
579
- return [
580
- {
581
- kind: "invocationExpression",
582
- expression: {
583
- kind: "parenthesizedExpression",
584
- expression: {
585
- kind: "castExpression",
586
- type: buildDelegateType([], safeTargetTypeAst),
587
- expression: {
588
- kind: "parenthesizedExpression",
589
- expression: lambdaAst,
590
- },
591
- },
592
- },
593
- arguments: [],
594
- },
595
- currentContext,
596
- ];
597
- }
598
- const targetElementType = getArrayElementType(expectedType, context);
599
- const sourceElementType = getArrayElementType(sourceType, context);
600
- if (targetElementType && sourceElementType) {
601
- const item = allocateLocalName("__item", context);
602
- let currentContext = item.context;
603
- const itemIdentifier = {
604
- kind: "identifierExpression",
605
- identifier: item.emittedName,
606
- };
607
- const [adaptedElementAst, adaptedContext] = tryAdaptStructuralExpressionAst(itemIdentifier, sourceElementType, currentContext, targetElementType) ?? [undefined, currentContext];
608
- currentContext = adaptedContext;
609
- if (adaptedElementAst !== undefined) {
610
- const selectAst = {
611
- kind: "invocationExpression",
612
- expression: {
613
- ...identifierExpression("global::System.Linq.Enumerable.Select"),
614
- },
615
- arguments: [
616
- emittedAst,
617
- {
618
- kind: "lambdaExpression",
619
- isAsync: false,
620
- parameters: [{ name: item.emittedName }],
621
- body: adaptedElementAst,
622
- },
623
- ],
624
- };
625
- const toArrayAst = {
626
- kind: "invocationExpression",
627
- expression: {
628
- ...identifierExpression("global::System.Linq.Enumerable.ToArray"),
629
- },
630
- arguments: [selectAst],
631
- };
632
- if (!hasNullishBranch(sourceType)) {
633
- return [toArrayAst, currentContext];
634
- }
635
- if (isDirectlyReusableExpression(emittedAst)) {
636
- return [
637
- {
638
- kind: "conditionalExpression",
639
- condition: {
640
- kind: "binaryExpression",
641
- operatorToken: "==",
642
- left: emittedAst,
643
- right: nullLiteral(),
644
- },
645
- whenTrue: { kind: "defaultExpression" },
646
- whenFalse: toArrayAst,
647
- },
648
- currentContext,
649
- ];
650
- }
651
- }
652
- }
653
- const targetValueType = getDictionaryValueType(expectedType, context);
654
- const sourceValueType = getDictionaryValueType(sourceType, context);
655
- if (targetValueType && sourceValueType) {
656
- let currentContext = context;
657
- const [targetValueTypeAst, valueTypeContext] = emitTypeAst(targetValueType, currentContext);
658
- currentContext = valueTypeContext;
659
- const dictTypeAst = identifierType("global::System.Collections.Generic.Dictionary", [{ kind: "predefinedType", keyword: "string" }, targetValueTypeAst]);
660
- const sourceTemp = allocateLocalName("__dict", currentContext);
661
- currentContext = sourceTemp.context;
662
- const entryTemp = allocateLocalName("__entry", currentContext);
663
- currentContext = entryTemp.context;
664
- const resultTemp = allocateLocalName("__result", currentContext);
665
- currentContext = resultTemp.context;
666
- const entryValueAst = {
667
- kind: "memberAccessExpression",
668
- expression: {
669
- kind: "identifierExpression",
670
- identifier: entryTemp.emittedName,
671
- },
672
- memberName: "Value",
673
- };
674
- const [adaptedValueAst, adaptedContext] = tryAdaptStructuralExpressionAst(entryValueAst, sourceValueType, currentContext, targetValueType) ?? [undefined, currentContext];
675
- currentContext = adaptedContext;
676
- if (adaptedValueAst !== undefined) {
677
- const statements = [
678
- {
679
- kind: "localDeclarationStatement",
680
- modifiers: [],
681
- type: { kind: "varType" },
682
- declarators: [
683
- {
684
- name: sourceTemp.emittedName,
685
- initializer: emittedAst,
686
- },
687
- ],
688
- },
689
- {
690
- kind: "ifStatement",
691
- condition: {
692
- kind: "binaryExpression",
693
- operatorToken: "==",
694
- left: {
695
- kind: "identifierExpression",
696
- identifier: sourceTemp.emittedName,
697
- },
698
- right: nullLiteral(),
699
- },
700
- thenStatement: {
701
- kind: "blockStatement",
702
- statements: [
703
- {
704
- kind: "returnStatement",
705
- expression: { kind: "defaultExpression", type: dictTypeAst },
706
- },
707
- ],
708
- },
709
- },
710
- {
711
- kind: "localDeclarationStatement",
712
- modifiers: [],
713
- type: { kind: "varType" },
714
- declarators: [
715
- {
716
- name: resultTemp.emittedName,
717
- initializer: {
718
- kind: "objectCreationExpression",
719
- type: dictTypeAst,
720
- arguments: [],
721
- },
722
- },
723
- ],
724
- },
725
- {
726
- kind: "foreachStatement",
727
- isAwait: false,
728
- type: { kind: "varType" },
729
- identifier: entryTemp.emittedName,
730
- expression: {
731
- kind: "identifierExpression",
732
- identifier: sourceTemp.emittedName,
733
- },
734
- body: {
735
- kind: "blockStatement",
736
- statements: [
737
- {
738
- kind: "expressionStatement",
739
- expression: {
740
- kind: "assignmentExpression",
741
- operatorToken: "=",
742
- left: {
743
- kind: "elementAccessExpression",
744
- expression: {
745
- kind: "identifierExpression",
746
- identifier: resultTemp.emittedName,
747
- },
748
- arguments: [
749
- {
750
- kind: "memberAccessExpression",
751
- expression: {
752
- kind: "identifierExpression",
753
- identifier: entryTemp.emittedName,
754
- },
755
- memberName: "Key",
756
- },
757
- ],
758
- },
759
- right: adaptedValueAst,
760
- },
761
- },
762
- ],
763
- },
764
- },
765
- {
766
- kind: "returnStatement",
767
- expression: {
768
- kind: "identifierExpression",
769
- identifier: resultTemp.emittedName,
770
- },
771
- },
772
- ];
773
- return [
774
- {
775
- kind: "invocationExpression",
776
- expression: {
777
- kind: "parenthesizedExpression",
778
- expression: {
779
- kind: "castExpression",
780
- type: buildDelegateType([], dictTypeAst),
781
- expression: {
782
- kind: "parenthesizedExpression",
783
- expression: {
784
- kind: "lambdaExpression",
785
- isAsync: false,
786
- parameters: [],
787
- body: {
788
- kind: "blockStatement",
789
- statements,
790
- },
791
- },
792
- },
793
- },
794
- },
795
- arguments: [],
796
- },
797
- currentContext,
798
- ];
799
- }
800
- }
801
- return undefined;
802
- };
803
- const getBareTypeParameterName = (type, context) => {
804
- if (type.kind === "typeParameterType")
805
- return type.name;
806
- if (type.kind === "referenceType" &&
807
- (context.typeParameters?.has(type.name) ?? false) &&
808
- (!type.typeArguments || type.typeArguments.length === 0)) {
809
- return type.name;
810
- }
811
- return undefined;
812
- };
813
- const getUnconstrainedNullishTypeParamName = (type, context) => {
814
- if (type.kind !== "unionType")
815
- return undefined;
816
- const nonNullTypes = type.types.filter((t) => !(t.kind === "primitiveType" &&
817
- (t.name === "null" || t.name === "undefined")));
818
- if (nonNullTypes.length !== 1)
819
- return undefined;
820
- const nonNull = nonNullTypes[0];
821
- if (!nonNull)
822
- return undefined;
823
- const typeParamName = getBareTypeParameterName(nonNull, context);
824
- if (!typeParamName)
825
- return undefined;
826
- const constraintKind = context.typeParamConstraints?.get(typeParamName) ?? "unconstrained";
827
- return constraintKind === "unconstrained" ? typeParamName : undefined;
828
- };
829
- const maybeCastNullishTypeParamAst = (expr, ast, context, expectedType) => {
830
- if (!expectedType)
831
- return [ast, context];
832
- if (!expr.inferredType)
833
- return [ast, context];
834
- const expectedTypeParam = getBareTypeParameterName(expectedType, context);
835
- if (!expectedTypeParam)
836
- return [ast, context];
837
- const unionTypeParam = getUnconstrainedNullishTypeParamName(expr.inferredType, context);
838
- if (!unionTypeParam)
839
- return [ast, context];
840
- if (unionTypeParam !== expectedTypeParam)
841
- return [ast, context];
842
- const [typeAst, newContext] = emitTypeAst(expectedType, context);
843
- return [
844
- {
845
- kind: "castExpression",
846
- type: typeAst,
847
- expression: ast,
848
- },
849
- newContext,
850
- ];
851
- };
852
- const getNullableUnionBaseType = (type) => {
853
- if (type.kind !== "unionType")
854
- return undefined;
855
- const nonNullTypes = type.types.filter((t) => !(t.kind === "primitiveType" &&
856
- (t.name === "null" || t.name === "undefined")));
857
- if (nonNullTypes.length !== 1)
858
- return undefined;
859
- return nonNullTypes[0];
860
- };
861
- const isNonNullableValueType = (type) => {
862
- if (type.kind === "primitiveType") {
863
- return (type.name === "number" ||
864
- type.name === "int" ||
865
- type.name === "boolean" ||
866
- type.name === "char");
867
- }
868
- if (type.kind === "referenceType") {
869
- return (type.name === "sbyte" ||
870
- type.name === "short" ||
871
- type.name === "int" ||
872
- type.name === "long" ||
873
- type.name === "nint" ||
874
- type.name === "int128" ||
875
- type.name === "byte" ||
876
- type.name === "ushort" ||
877
- type.name === "uint" ||
878
- type.name === "ulong" ||
879
- type.name === "nuint" ||
880
- type.name === "uint128" ||
881
- type.name === "half" ||
882
- type.name === "float" ||
883
- type.name === "double" ||
884
- type.name === "decimal" ||
885
- type.name === "bool" ||
886
- type.name === "char");
887
- }
888
- return false;
889
- };
890
- const isSameTypeForNullableUnwrap = (base, expected) => {
891
- if (base.kind !== expected.kind)
892
- return false;
893
- if (base.kind === "primitiveType" && expected.kind === "primitiveType") {
894
- return base.name === expected.name;
895
- }
896
- if (base.kind === "referenceType" && expected.kind === "referenceType") {
897
- return (base.name === expected.name &&
898
- (base.typeArguments?.length ?? 0) === 0 &&
899
- (expected.typeArguments?.length ?? 0) === 0);
900
- }
901
- return false;
902
- };
903
- const maybeUnwrapNullableValueTypeAst = (expr, ast, context, expectedType) => {
904
- if (!expectedType)
905
- return [ast, context];
906
- if (!expr.inferredType)
907
- return [ast, context];
908
- // Only unwrap direct nullable values.
909
- if (expr.kind !== "identifier" && expr.kind !== "memberAccess") {
910
- return [ast, context];
911
- }
912
- const getMemberAccessNarrowKey = (m) => {
913
- if (m.isComputed)
914
- return undefined;
915
- if (typeof m.property !== "string")
916
- return undefined;
917
- const obj = m.object;
918
- if (obj.kind === "identifier")
919
- return `${obj.name}.${m.property}`;
920
- if (obj.kind === "memberAccess") {
921
- const prefix = getMemberAccessNarrowKey(obj);
922
- return prefix ? `${prefix}.${m.property}` : undefined;
923
- }
924
- return undefined;
925
- };
926
- if (context.narrowedBindings &&
927
- ((expr.kind === "identifier" && context.narrowedBindings.has(expr.name)) ||
928
- (expr.kind === "memberAccess" &&
929
- (() => {
930
- const key = getMemberAccessNarrowKey(expr);
931
- return key ? context.narrowedBindings.has(key) : false;
932
- })()))) {
933
- return [ast, context];
934
- }
935
- const nullableBase = getNullableUnionBaseType(expr.inferredType);
936
- if (!nullableBase)
937
- return [ast, context];
938
- if (!isNonNullableValueType(expectedType))
939
- return [ast, context];
940
- if (!isSameTypeForNullableUnwrap(nullableBase, expectedType)) {
941
- return [ast, context];
942
- }
943
- // Append .Value
944
- return [
945
- {
946
- kind: "memberAccessExpression",
947
- expression: ast,
948
- memberName: "Value",
949
- },
950
- context,
951
- ];
952
- };
953
- const normalizeComparableType = (type, context) => resolveTypeAlias(stripNullish(type), context);
954
- const areIrTypesEquivalent = (left, right, context) => {
955
- const a = normalizeComparableType(left, context);
956
- const b = normalizeComparableType(right, context);
957
- if (a.kind !== b.kind)
958
- return false;
959
- switch (a.kind) {
960
- case "primitiveType":
961
- return a.name === b.name;
962
- case "literalType":
963
- return a.value === b.value;
964
- case "referenceType": {
965
- const rb = b;
966
- if (a.name !== rb.name)
967
- return false;
968
- const aArgs = a.typeArguments ?? [];
969
- const bArgs = rb.typeArguments ?? [];
970
- if (aArgs.length !== bArgs.length)
971
- return false;
972
- for (let i = 0; i < aArgs.length; i++) {
973
- const aa = aArgs[i];
974
- const bb = bArgs[i];
975
- if (!aa || !bb || !areIrTypesEquivalent(aa, bb, context))
976
- return false;
977
- }
978
- return true;
979
- }
980
- case "arrayType":
981
- return areIrTypesEquivalent(a.elementType, b.elementType, context);
982
- case "dictionaryType":
983
- return (areIrTypesEquivalent(a.keyType, b.keyType, context) &&
984
- areIrTypesEquivalent(a.valueType, b.valueType, context));
985
- case "tupleType": {
986
- const rb = b;
987
- if (a.elementTypes.length !== rb.elementTypes.length)
988
- return false;
989
- for (let i = 0; i < a.elementTypes.length; i++) {
990
- const ae = a.elementTypes[i];
991
- const be = rb.elementTypes[i];
992
- if (!ae || !be || !areIrTypesEquivalent(ae, be, context))
993
- return false;
994
- }
995
- return true;
996
- }
997
- case "functionType": {
998
- const rb = b;
999
- if (a.parameters.length !== rb.parameters.length)
1000
- return false;
1001
- for (let i = 0; i < a.parameters.length; i++) {
1002
- const ap = a.parameters[i];
1003
- const bp = rb.parameters[i];
1004
- if (!ap || !bp)
1005
- return false;
1006
- if (!ap.type && !bp.type)
1007
- continue;
1008
- if (!ap.type || !bp.type)
1009
- return false;
1010
- if (!areIrTypesEquivalent(ap.type, bp.type, context))
1011
- return false;
1012
- }
1013
- return areIrTypesEquivalent(a.returnType, rb.returnType, context);
1014
- }
1015
- case "unionType":
1016
- case "intersectionType": {
1017
- const rb = b;
1018
- if (a.types.length !== rb.types.length)
1019
- return false;
1020
- const used = new Set();
1021
- for (const at of a.types) {
1022
- if (!at)
1023
- return false;
1024
- let matched = false;
1025
- for (let i = 0; i < rb.types.length; i++) {
1026
- if (used.has(i))
1027
- continue;
1028
- const bt = rb.types[i];
1029
- if (!bt)
1030
- continue;
1031
- if (areIrTypesEquivalent(at, bt, context)) {
1032
- used.add(i);
1033
- matched = true;
1034
- break;
1035
- }
1036
- }
1037
- if (!matched)
1038
- return false;
1039
- }
1040
- return true;
1041
- }
1042
- case "typeParameterType":
1043
- return a.name === b.name;
1044
- case "voidType":
1045
- case "anyType":
1046
- case "unknownType":
1047
- case "neverType":
1048
- return true;
1049
- case "objectType": {
1050
- const rb = b;
1051
- if (a.members.length !== rb.members.length)
1052
- return false;
1053
- for (let i = 0; i < a.members.length; i++) {
1054
- const am = a.members[i];
1055
- const bm = rb.members[i];
1056
- if (!am || !bm || am.kind !== bm.kind)
1057
- return false;
1058
- if (am.kind === "propertySignature" &&
1059
- bm.kind === "propertySignature") {
1060
- if (am.name !== bm.name)
1061
- return false;
1062
- if (!areIrTypesEquivalent(am.type, bm.type, context))
1063
- return false;
1064
- continue;
1065
- }
1066
- if (am.kind === "methodSignature" && bm.kind === "methodSignature") {
1067
- if (am.name !== bm.name)
1068
- return false;
1069
- if (am.parameters.length !== bm.parameters.length)
1070
- return false;
1071
- for (let j = 0; j < am.parameters.length; j++) {
1072
- const ap = am.parameters[j];
1073
- const bp = bm.parameters[j];
1074
- if (!ap || !bp)
1075
- return false;
1076
- if (!ap.type || !bp.type)
1077
- return false;
1078
- if (!areIrTypesEquivalent(ap.type, bp.type, context))
1079
- return false;
1080
- }
1081
- if (!am.returnType || !bm.returnType)
1082
- return false;
1083
- if (!areIrTypesEquivalent(am.returnType, bm.returnType, context))
1084
- return false;
1085
- continue;
1086
- }
1087
- return false;
1088
- }
1089
- return true;
1090
- }
1091
- }
1092
- };
1093
- const maybeUpcastDictionaryUnionValueAst = (expr, ast, context, expectedType) => {
1094
- if (!expectedType || !expr.inferredType)
1095
- return [ast, context];
1096
- const expected = normalizeComparableType(expectedType, context);
1097
- const actual = normalizeComparableType(expr.inferredType, context);
1098
- if (expected.kind !== "dictionaryType" || actual.kind !== "dictionaryType") {
1099
- return [ast, context];
1100
- }
1101
- if (!areIrTypesEquivalent(expected.keyType, actual.keyType, context)) {
1102
- return [ast, context];
1103
- }
1104
- const expectedValue = normalizeComparableType(expected.valueType, context);
1105
- if (expectedValue.kind !== "unionType")
1106
- return [ast, context];
1107
- const actualValue = normalizeComparableType(actual.valueType, context);
1108
- if (areIrTypesEquivalent(expectedValue, actualValue, context)) {
1109
- return [ast, context];
1110
- }
1111
- let matchingMemberIndex = -1;
1112
- for (let i = 0; i < expectedValue.types.length; i++) {
1113
- const member = expectedValue.types[i];
1114
- if (!member)
1115
- continue;
1116
- if (areIrTypesEquivalent(member, actualValue, context)) {
1117
- matchingMemberIndex = i + 1;
1118
- break;
1119
- }
1120
- }
1121
- if (matchingMemberIndex === -1)
1122
- return [ast, context];
1123
- const [unionValueTypeAst, ctx1] = emitTypeAst(expected.valueType, context);
1124
- const kvpId = "kvp";
1125
- const keySelector = {
1126
- kind: "lambdaExpression",
1127
- isAsync: false,
1128
- parameters: [{ name: kvpId }],
1129
- body: {
1130
- kind: "memberAccessExpression",
1131
- expression: { kind: "identifierExpression", identifier: kvpId },
1132
- memberName: "Key",
1133
- },
1134
- };
1135
- const valueSelector = {
1136
- kind: "lambdaExpression",
1137
- isAsync: false,
1138
- parameters: [{ name: kvpId }],
1139
- body: {
1140
- kind: "invocationExpression",
1141
- expression: {
1142
- kind: "memberAccessExpression",
1143
- expression: {
1144
- kind: "typeReferenceExpression",
1145
- type: unionValueTypeAst,
1146
- },
1147
- memberName: `From${matchingMemberIndex}`,
1148
- },
1149
- arguments: [
1150
- {
1151
- kind: "memberAccessExpression",
1152
- expression: { kind: "identifierExpression", identifier: kvpId },
1153
- memberName: "Value",
1154
- },
1155
- ],
1156
- },
1157
- };
1158
- const converted = {
1159
- kind: "invocationExpression",
1160
- expression: {
1161
- kind: "memberAccessExpression",
1162
- expression: {
1163
- ...identifierExpression("global::System.Linq.Enumerable"),
1164
- },
1165
- memberName: "ToDictionary",
1166
- },
1167
- arguments: [ast, keySelector, valueSelector],
1168
- };
1169
- return [converted, ctx1];
1170
- };
1171
- const isCharIrType = (type, context) => {
1172
- if (!type)
1173
- return false;
1174
- const resolved = resolveTypeAlias(stripNullish(type), context);
1175
- return ((resolved.kind === "primitiveType" && resolved.name === "char") ||
1176
- (resolved.kind === "referenceType" && resolved.name === "char"));
1177
- };
1178
- const expectsStringIrType = (type, context) => {
1179
- if (!type)
1180
- return false;
1181
- const resolved = resolveTypeAlias(stripNullish(type), context);
1182
- return ((resolved.kind === "primitiveType" && resolved.name === "string") ||
1183
- (resolved.kind === "referenceType" &&
1184
- (resolved.name === "string" || resolved.name === "String")));
1185
- };
1186
- const isParameterlessToStringInvocation = (ast) => ast.kind === "invocationExpression" &&
1187
- ast.arguments.length === 0 &&
1188
- ast.expression.kind === "memberAccessExpression" &&
1189
- ast.expression.memberName === "ToString";
1190
- const maybeConvertCharToStringAst = (expr, ast, context, expectedType) => {
1191
- if (!expectsStringIrType(expectedType, context))
1192
- return [ast, context];
1193
- if (!isCharIrType(expr.inferredType, context))
1194
- return [ast, context];
1195
- if (isParameterlessToStringInvocation(ast))
1196
- return [ast, context];
1197
- return [
1198
- {
1199
- kind: "invocationExpression",
1200
- expression: {
1201
- kind: "memberAccessExpression",
1202
- expression: ast,
1203
- memberName: "ToString",
1204
- },
1205
- arguments: [],
1206
- },
1207
- context,
1208
- ];
1209
- };
1210
- /**
1211
- * Emit a numeric narrowing expression as CSharpExpressionAst.
1212
- */
1213
- const emitNumericNarrowing = (expr, context) => {
1214
- if (expr.proof !== undefined) {
1215
- if (expr.proof.source.type === "literal") {
1216
- const [innerAst, newContext] = emitExpressionAst(expr.expression, context, expr.inferredType);
1217
- return [innerAst, newContext];
1218
- }
1219
- const [innerAst, ctx1] = emitExpressionAst(expr.expression, context);
1220
- const [typeAst, ctx2] = emitTypeAst(expr.inferredType, ctx1);
1221
- return [
1222
- {
1223
- kind: "castExpression",
1224
- type: typeAst,
1225
- expression: innerAst,
1226
- },
1227
- ctx2,
1228
- ];
1229
- }
1230
- throw new Error(`Internal error: numericNarrowing without proof reached emitter. ` +
1231
- `Target: ${expr.targetKind}, Expression kind: ${expr.expression.kind}. ` +
1232
- `This indicates a bug in the numeric proof pass - it should have ` +
1233
- `emitted a diagnostic and aborted compilation.`);
1234
- };
1235
- /**
1236
- * Emit a type assertion expression as CSharpExpressionAst.
1237
- *
1238
- * TypeScript `x as T` becomes C# `(T)x` (throwing cast).
1239
- */
1240
- const emitTypeAssertion = (expr, context) => {
1241
- const [innerAst, ctx1] = emitExpressionAst(expr.expression, context, expr.targetType);
1242
- const resolveLocalTypeAliases = (target) => {
1243
- if (target.kind === "referenceType" && ctx1.localTypes) {
1244
- const typeInfo = ctx1.localTypes.get(target.name);
1245
- if (typeInfo?.kind === "typeAlias") {
1246
- const substituted = target.typeArguments && target.typeArguments.length > 0
1247
- ? substituteTypeArgs(typeInfo.type, typeInfo.typeParameters, target.typeArguments)
1248
- : typeInfo.type;
1249
- return resolveLocalTypeAliases(substituted);
1250
- }
1251
- }
1252
- return target;
1253
- };
1254
- const shouldEraseTypeAssertion = (target) => {
1255
- const resolved = resolveLocalTypeAliases(target);
1256
- if (resolved.kind === "unknownType") {
1257
- return true;
1258
- }
1259
- if (resolved.kind === "referenceType" && resolved.typeArguments?.length) {
1260
- const importBinding = ctx1.importBindings?.get(resolved.name);
1261
- const clrName = importBinding?.kind === "type"
1262
- ? (getIdentifierTypeName(importBinding.typeAst) ?? "")
1263
- : "";
1264
- if (clrName.endsWith(".ExtensionMethods")) {
1265
- return true;
1266
- }
1267
- }
1268
- if (resolved.kind === "intersectionType") {
1269
- return resolved.types.some((t) => t.kind === "referenceType" && t.name.startsWith("__Ext_"));
1270
- }
1271
- return false;
1272
- };
1273
- if (shouldEraseTypeAssertion(expr.targetType)) {
1274
- return [innerAst, ctx1];
1275
- }
1276
- const resolveRuntimeCastTarget = (target, ctx) => {
1277
- if (target.kind === "referenceType" && ctx.localTypes) {
1278
- const typeInfo = ctx.localTypes.get(target.name);
1279
- if (typeInfo?.kind === "typeAlias") {
1280
- if (typeInfo.type.kind !== "objectType") {
1281
- const substituted = target.typeArguments && target.typeArguments.length > 0
1282
- ? substituteTypeArgs(typeInfo.type, typeInfo.typeParameters, target.typeArguments)
1283
- : typeInfo.type;
1284
- return resolveRuntimeCastTarget(substituted, ctx);
1285
- }
1286
- return target;
1287
- }
1288
- }
1289
- if (target.kind === "referenceType" && target.typeArguments?.length) {
1290
- const importBinding = ctx.importBindings?.get(target.name);
1291
- const clrName = importBinding?.kind === "type"
1292
- ? (getIdentifierTypeName(importBinding.typeAst) ?? "")
1293
- : "";
1294
- if (clrName.endsWith(".ExtensionMethods")) {
1295
- const shape = target.typeArguments[0];
1296
- if (shape)
1297
- return resolveRuntimeCastTarget(shape, ctx);
1298
- }
1299
- }
1300
- if (target.kind === "intersectionType") {
1301
- for (const part of target.types) {
1302
- const resolved = resolveRuntimeCastTarget(part, ctx);
1303
- if (resolved.kind !== "intersectionType" &&
1304
- resolved.kind !== "objectType") {
1305
- return resolved;
1306
- }
1307
- }
1308
- const fallback = target.types[0];
1309
- return fallback ? resolveRuntimeCastTarget(fallback, ctx) : target;
1310
- }
1311
- return target;
1312
- };
1313
- const runtimeTarget = resolveRuntimeCastTarget(expr.targetType, ctx1);
1314
- const [typeAst, ctx2] = emitTypeAst(runtimeTarget, ctx1);
1315
- return [
1316
- {
1317
- kind: "castExpression",
1318
- type: typeAst,
1319
- expression: innerAst,
1320
- },
1321
- ctx2,
1322
- ];
1323
- };
1324
- /**
1325
- * Emit an asinterface expression as CSharpExpressionAst.
1326
- */
1327
- const emitAsInterface = (expr, context, expectedType) => {
1328
- const expected = expectedType ?? expr.targetType;
1329
- return emitExpressionAst(expr.expression, context, expected);
1330
- };
1331
- /**
1332
- * Emit a trycast expression as CSharpExpressionAst.
1333
- *
1334
- * TypeScript `trycast<T>(x)` becomes C# `x as T` (safe cast).
1335
- */
1336
- const emitTryCast = (expr, context) => {
1337
- const [innerAst, ctx1] = emitExpressionAst(expr.expression, context);
1338
- const [typeAst, ctx2] = emitTypeAst(expr.targetType, ctx1);
1339
- return [
1340
- {
1341
- kind: "asExpression",
1342
- expression: innerAst,
1343
- type: typeAst,
1344
- },
1345
- ctx2,
1346
- ];
1347
- };
1348
- /**
1349
- * Emit a stackalloc expression as CSharpExpressionAst.
1350
- */
1351
- const emitStackAlloc = (expr, context) => {
1352
- const [elementTypeAst, ctx1] = emitTypeAst(expr.elementType, context);
1353
- const [sizeAst, ctx2] = emitExpressionAst(expr.size, ctx1, {
1354
- kind: "primitiveType",
1355
- name: "int",
1356
- });
1357
- return [
1358
- {
1359
- kind: "stackAllocArrayCreationExpression",
1360
- elementType: elementTypeAst,
1361
- sizeExpression: sizeAst,
1362
- },
1363
- ctx2,
1364
- ];
1365
- };
1366
- /**
1367
- * Emit a defaultof expression as CSharpExpressionAst.
1368
- */
1369
- const emitDefaultOf = (expr, context) => {
1370
- const [typeAst, ctx1] = emitTypeAst(expr.targetType, context);
1371
- return [
1372
- {
1373
- kind: "defaultExpression",
1374
- type: typeAst,
1375
- },
1376
- ctx1,
1377
- ];
1378
- };
1379
- /**
1380
- * Emit a nameof expression as a compile-time string literal using the authored TS name.
1381
- */
1382
- const emitNameOf = (expr, context) => [stringLiteral(expr.name), context];
1383
- /**
1384
- * Emit a sizeof expression as C# sizeof(T).
1385
- */
1386
- const emitSizeOf = (expr, context) => {
1387
- const [typeAst, ctx1] = emitTypeAst(expr.targetType, context);
1388
- return [
1389
- {
1390
- kind: "sizeOfExpression",
1391
- type: typeAst,
1392
- },
1393
- ctx1,
1394
- ];
1395
- };
17
+ // Import from split modules
18
+ import { emitNumericNarrowing, emitTypeAssertion, emitAsInterface, emitTryCast, emitStackAlloc, emitDefaultOf, emitNameOf, emitSizeOf, } from "./expressions/type-assertion-emitters.js";
19
+ import { adaptEmittedExpressionAst } from "./expressions/expected-type-adaptation.js";
20
+ import { simplifyRedundantObjectBridgeCastsAst } from "./expressions/post-emission-adaptation.js";
21
+ import { unwrapTransparentExpression } from "./core/semantic/transparent-expressions.js";
22
+ import { resolveEffectiveExpressionType } from "./core/semantic/narrowed-expression-types.js";
1396
23
  /**
1397
24
  * Emit a C# expression AST from an IR expression.
1398
25
  * Primary entry point for expression emission.
@@ -1402,44 +29,52 @@ const emitSizeOf = (expr, context) => {
1402
29
  * @param expectedType Optional expected type for contextual typing
1403
30
  */
1404
31
  export const emitExpressionAst = (expr, context, expectedType) => {
32
+ const normalizedExpr = (() => {
33
+ const transparent = unwrapTransparentExpression(expr);
34
+ return transparent !== expr &&
35
+ transparent.kind === "identifier" &&
36
+ context.promiseResolveValueTypes?.has(transparent.name) === true
37
+ ? transparent
38
+ : expr;
39
+ })();
1405
40
  const [ast, newContext] = (() => {
1406
- switch (expr.kind) {
41
+ switch (normalizedExpr.kind) {
1407
42
  case "literal":
1408
- return emitLiteral(expr, context, expectedType);
43
+ return emitLiteral(normalizedExpr, context, expectedType);
1409
44
  case "identifier":
1410
- return emitIdentifier(expr, context, expectedType);
45
+ return emitIdentifier(normalizedExpr, context, expectedType);
1411
46
  case "array":
1412
- return emitArray(expr, context, expectedType);
47
+ return emitArray(normalizedExpr, context, expectedType);
1413
48
  case "object":
1414
- return emitObject(expr, context, expectedType);
49
+ return emitObject(normalizedExpr, context, expectedType);
1415
50
  case "memberAccess":
1416
- return emitMemberAccess(expr, context, "value", expectedType);
51
+ return emitMemberAccess(normalizedExpr, context, "value", expectedType);
1417
52
  case "call":
1418
- return emitCall(expr, context);
53
+ return emitCall(normalizedExpr, context, expectedType);
1419
54
  case "new":
1420
- return emitNew(expr, context);
55
+ return emitNew(normalizedExpr, context);
1421
56
  case "binary":
1422
- return emitBinary(expr, context, expectedType);
57
+ return emitBinary(normalizedExpr, context, expectedType);
1423
58
  case "logical":
1424
- return emitLogical(expr, context);
59
+ return emitLogical(normalizedExpr, context, expectedType);
1425
60
  case "unary":
1426
- return emitUnary(expr, context, expectedType);
61
+ return emitUnary(normalizedExpr, context, expectedType);
1427
62
  case "update":
1428
- return emitUpdate(expr, context);
63
+ return emitUpdate(normalizedExpr, context);
1429
64
  case "assignment":
1430
- return emitAssignment(expr, context);
65
+ return emitAssignment(normalizedExpr, context);
1431
66
  case "conditional":
1432
- return emitConditional(expr, context, expectedType);
67
+ return emitConditional(normalizedExpr, context, expectedType);
1433
68
  case "functionExpression":
1434
- return emitFunctionExpression(expr, context);
69
+ return emitFunctionExpression(normalizedExpr, context, expectedType);
1435
70
  case "arrowFunction":
1436
- return emitArrowFunction(expr, context);
71
+ return emitArrowFunction(normalizedExpr, context, expectedType);
1437
72
  case "templateLiteral":
1438
- return emitTemplateLiteral(expr, context);
73
+ return emitTemplateLiteral(normalizedExpr, context);
1439
74
  case "spread":
1440
- return emitSpread(expr, context);
75
+ return emitSpread(normalizedExpr, context);
1441
76
  case "await":
1442
- return emitAwait(expr, context);
77
+ return emitAwait(normalizedExpr, context);
1443
78
  case "this":
1444
79
  return [
1445
80
  {
@@ -1449,30 +84,39 @@ export const emitExpressionAst = (expr, context, expectedType) => {
1449
84
  context,
1450
85
  ];
1451
86
  case "numericNarrowing":
1452
- return emitNumericNarrowing(expr, context);
87
+ return emitNumericNarrowing(normalizedExpr, context);
1453
88
  case "asinterface":
1454
- return emitAsInterface(expr, context, expectedType);
89
+ return emitAsInterface(normalizedExpr, context, expectedType);
1455
90
  case "typeAssertion":
1456
- return emitTypeAssertion(expr, context);
91
+ return emitTypeAssertion(normalizedExpr, context, expectedType);
1457
92
  case "trycast":
1458
- return emitTryCast(expr, context);
93
+ return emitTryCast(normalizedExpr, context);
1459
94
  case "stackalloc":
1460
- return emitStackAlloc(expr, context);
95
+ return emitStackAlloc(normalizedExpr, context);
1461
96
  case "defaultof":
1462
- return emitDefaultOf(expr, context);
97
+ return emitDefaultOf(normalizedExpr, context);
1463
98
  case "nameof":
1464
- return emitNameOf(expr, context);
99
+ return emitNameOf(normalizedExpr, context);
1465
100
  case "sizeof":
1466
- return emitSizeOf(expr, context);
101
+ return emitSizeOf(normalizedExpr, context);
1467
102
  default:
1468
103
  throw new Error(`Unhandled IR expression kind: ${String(expr.kind)}`);
1469
104
  }
1470
105
  })();
1471
- const [castedAst, castedContext] = maybeCastNullishTypeParamAst(expr, ast, newContext, expectedType);
1472
- const [dictUpcastAst, dictUpcastContext] = maybeUpcastDictionaryUnionValueAst(expr, castedAst, castedContext, expectedType);
1473
- const [materializedAst, materializedContext] = tryAdaptStructuralExpressionAst(dictUpcastAst, expr.inferredType, dictUpcastContext, expectedType) ?? [dictUpcastAst, dictUpcastContext];
1474
- const [stringAdjustedAst, stringAdjustedContext] = maybeConvertCharToStringAst(expr, materializedAst, materializedContext, expectedType);
1475
- return maybeUnwrapNullableValueTypeAst(expr, stringAdjustedAst, stringAdjustedContext, expectedType);
106
+ const [adaptedAst, adaptedContext] = adaptEmittedExpressionAst({
107
+ expr: normalizedExpr,
108
+ valueAst: ast,
109
+ context: newContext,
110
+ expectedType,
111
+ });
112
+ const effectiveActualType = normalizedExpr.kind === "typeAssertion"
113
+ ? normalizedExpr.targetType
114
+ : (resolveEffectiveExpressionType(normalizedExpr, adaptedContext) ??
115
+ normalizedExpr.inferredType);
116
+ return [
117
+ simplifyRedundantObjectBridgeCastsAst(adaptedAst, effectiveActualType, adaptedContext, expectedType),
118
+ adaptedContext,
119
+ ];
1476
120
  };
1477
121
  // Re-export commonly used functions from barrel
1478
122
  export { generateSpecializedName } from "./expressions/identifiers.js";