@tsonic/emitter 0.0.76 → 0.0.78

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 (709) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/array.test.js +8 -4
  3. package/dist/array.test.js.map +1 -1
  4. package/dist/core/format/backend-ast/invariants.test.js +5 -0
  5. package/dist/core/format/backend-ast/invariants.test.js.map +1 -1
  6. package/dist/core/format/backend-ast/printer-colon-detection.d.ts.map +1 -1
  7. package/dist/core/format/backend-ast/printer-colon-detection.js +2 -0
  8. package/dist/core/format/backend-ast/printer-colon-detection.js.map +1 -1
  9. package/dist/core/format/backend-ast/printer-expressions.d.ts.map +1 -1
  10. package/dist/core/format/backend-ast/printer-expressions.js +4 -0
  11. package/dist/core/format/backend-ast/printer-expressions.js.map +1 -1
  12. package/dist/core/format/backend-ast/printer-precedence.d.ts.map +1 -1
  13. package/dist/core/format/backend-ast/printer-precedence.js +1 -0
  14. package/dist/core/format/backend-ast/printer-precedence.js.map +1 -1
  15. package/dist/core/format/backend-ast/types/expression-ast.d.ts +5 -1
  16. package/dist/core/format/backend-ast/types/expression-ast.d.ts.map +1 -1
  17. package/dist/core/format/backend-ast/utils.d.ts +3 -0
  18. package/dist/core/format/backend-ast/utils.d.ts.map +1 -1
  19. package/dist/core/format/backend-ast/utils.js +39 -0
  20. package/dist/core/format/backend-ast/utils.js.map +1 -1
  21. package/dist/core/format/backend-ast/utils.test.js +13 -1
  22. package/dist/core/format/backend-ast/utils.test.js.map +1 -1
  23. package/dist/core/format/local-names.d.ts.map +1 -1
  24. package/dist/core/format/local-names.js +3 -2
  25. package/dist/core/format/local-names.js.map +1 -1
  26. package/dist/core/format/local-names.test.js +7 -6
  27. package/dist/core/format/local-names.test.js.map +1 -1
  28. package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -1
  29. package/dist/core/format/module-emitter/orchestrator.js +3 -1
  30. package/dist/core/format/module-emitter/orchestrator.js.map +1 -1
  31. package/dist/core/format/module-emitter/static-container.d.ts.map +1 -1
  32. package/dist/core/format/module-emitter/static-container.js +2 -4
  33. package/dist/core/format/module-emitter/static-container.js.map +1 -1
  34. package/dist/core/module-emitter-cases/class-and-recursion.test.js +4 -1
  35. package/dist/core/module-emitter-cases/class-and-recursion.test.js.map +1 -1
  36. package/dist/core/module-emitter-cases/static-containers.test.js +113 -2
  37. package/dist/core/module-emitter-cases/static-containers.test.js.map +1 -1
  38. package/dist/core/semantic/adapt-result.d.ts +20 -0
  39. package/dist/core/semantic/adapt-result.d.ts.map +1 -0
  40. package/dist/core/semantic/adapt-result.js +30 -0
  41. package/dist/core/semantic/adapt-result.js.map +1 -0
  42. package/dist/core/semantic/array-expected-types.d.ts.map +1 -1
  43. package/dist/core/semantic/array-expected-types.js +1 -1
  44. package/dist/core/semantic/array-expected-types.js.map +1 -1
  45. package/dist/core/semantic/assignment-flow.d.ts.map +1 -1
  46. package/dist/core/semantic/assignment-flow.js +28 -4
  47. package/dist/core/semantic/assignment-flow.js.map +1 -1
  48. package/dist/core/semantic/async-wrapper-types.d.ts +1 -0
  49. package/dist/core/semantic/async-wrapper-types.d.ts.map +1 -1
  50. package/dist/core/semantic/async-wrapper-types.js +19 -1
  51. package/dist/core/semantic/async-wrapper-types.js.map +1 -1
  52. package/dist/core/semantic/boolean-condition-main.d.ts.map +1 -1
  53. package/dist/core/semantic/boolean-condition-main.js +6 -2
  54. package/dist/core/semantic/boolean-condition-main.js.map +1 -1
  55. package/dist/core/semantic/boolean-context.test.js +2 -1
  56. package/dist/core/semantic/boolean-context.test.js.map +1 -1
  57. package/dist/core/semantic/broad-array-storage.d.ts.map +1 -1
  58. package/dist/core/semantic/broad-array-storage.js +2 -5
  59. package/dist/core/semantic/broad-array-storage.js.map +1 -1
  60. package/dist/core/semantic/broad-object-types.d.ts +1 -0
  61. package/dist/core/semantic/broad-object-types.d.ts.map +1 -1
  62. package/dist/core/semantic/broad-object-types.js +39 -0
  63. package/dist/core/semantic/broad-object-types.js.map +1 -1
  64. package/dist/core/semantic/clr-type-identity.d.ts +1 -2
  65. package/dist/core/semantic/clr-type-identity.d.ts.map +1 -1
  66. package/dist/core/semantic/clr-type-identity.js +3 -65
  67. package/dist/core/semantic/clr-type-identity.js.map +1 -1
  68. package/dist/core/semantic/comparable-types.d.ts.map +1 -1
  69. package/dist/core/semantic/comparable-types.js +61 -27
  70. package/dist/core/semantic/comparable-types.js.map +1 -1
  71. package/dist/core/semantic/comparable-types.test.js.map +1 -1
  72. package/dist/core/semantic/deterministic-type-keys.d.ts.map +1 -1
  73. package/dist/core/semantic/deterministic-type-keys.js +90 -37
  74. package/dist/core/semantic/deterministic-type-keys.js.map +1 -1
  75. package/dist/core/semantic/deterministic-type-keys.test.d.ts +2 -0
  76. package/dist/core/semantic/deterministic-type-keys.test.d.ts.map +1 -0
  77. package/dist/core/semantic/deterministic-type-keys.test.js +38 -0
  78. package/dist/core/semantic/deterministic-type-keys.test.js.map +1 -0
  79. package/dist/core/semantic/direct-storage-ir-types.d.ts +1 -1
  80. package/dist/core/semantic/direct-storage-ir-types.d.ts.map +1 -1
  81. package/dist/core/semantic/direct-storage-ir-types.js +12 -3
  82. package/dist/core/semantic/direct-storage-ir-types.js.map +1 -1
  83. package/dist/core/semantic/direct-value-surfaces.d.ts.map +1 -1
  84. package/dist/core/semantic/direct-value-surfaces.js +166 -6
  85. package/dist/core/semantic/direct-value-surfaces.js.map +1 -1
  86. package/dist/core/semantic/direct-value-surfaces.test.js +69 -6
  87. package/dist/core/semantic/direct-value-surfaces.test.js.map +1 -1
  88. package/dist/core/semantic/expected-type-matching.d.ts.map +1 -1
  89. package/dist/core/semantic/expected-type-matching.js +4 -5
  90. package/dist/core/semantic/expected-type-matching.js.map +1 -1
  91. package/dist/core/semantic/implicit-interfaces.d.ts.map +1 -1
  92. package/dist/core/semantic/implicit-interfaces.js.map +1 -1
  93. package/dist/core/semantic/imports-cases/basic-and-local.test.js +8 -8
  94. package/dist/core/semantic/imports-cases/basic-and-local.test.js.map +1 -1
  95. package/dist/core/semantic/imports.js +3 -2
  96. package/dist/core/semantic/imports.js.map +1 -1
  97. package/dist/core/semantic/index.d.ts +1 -1
  98. package/dist/core/semantic/index.d.ts.map +1 -1
  99. package/dist/core/semantic/index.js +1 -1
  100. package/dist/core/semantic/index.js.map +1 -1
  101. package/dist/core/semantic/instanceof-predicate-refinements.d.ts.map +1 -1
  102. package/dist/core/semantic/instanceof-predicate-refinements.js +2 -10
  103. package/dist/core/semantic/instanceof-predicate-refinements.js.map +1 -1
  104. package/dist/core/semantic/materialized-narrowing.d.ts +1 -0
  105. package/dist/core/semantic/materialized-narrowing.d.ts.map +1 -1
  106. package/dist/core/semantic/materialized-narrowing.js +170 -34
  107. package/dist/core/semantic/materialized-narrowing.js.map +1 -1
  108. package/dist/core/semantic/materialized-narrowing.test.js +24 -6
  109. package/dist/core/semantic/materialized-narrowing.test.js.map +1 -1
  110. package/dist/core/semantic/module-map.d.ts.map +1 -1
  111. package/dist/core/semantic/module-map.js +4 -6
  112. package/dist/core/semantic/module-map.js.map +1 -1
  113. package/dist/core/semantic/module-type-collisions.d.ts +7 -0
  114. package/dist/core/semantic/module-type-collisions.d.ts.map +1 -0
  115. package/dist/core/semantic/module-type-collisions.js +24 -0
  116. package/dist/core/semantic/module-type-collisions.js.map +1 -0
  117. package/dist/core/semantic/mutable-storage-helpers.d.ts +1 -1
  118. package/dist/core/semantic/mutable-storage-helpers.d.ts.map +1 -1
  119. package/dist/core/semantic/mutable-storage-helpers.js +5 -12
  120. package/dist/core/semantic/mutable-storage-helpers.js.map +1 -1
  121. package/dist/core/semantic/naming-collisions.d.ts.map +1 -1
  122. package/dist/core/semantic/naming-collisions.js +13 -3
  123. package/dist/core/semantic/naming-collisions.js.map +1 -1
  124. package/dist/core/semantic/narrowed-expression-types.d.ts +3 -1
  125. package/dist/core/semantic/narrowed-expression-types.d.ts.map +1 -1
  126. package/dist/core/semantic/narrowed-expression-types.js +139 -17
  127. package/dist/core/semantic/narrowed-expression-types.js.map +1 -1
  128. package/dist/core/semantic/narrowed-union-resolution.d.ts.map +1 -1
  129. package/dist/core/semantic/narrowed-union-resolution.js +14 -3
  130. package/dist/core/semantic/narrowed-union-resolution.js.map +1 -1
  131. package/dist/core/semantic/narrowing-builder-core.d.ts +3 -2
  132. package/dist/core/semantic/narrowing-builder-core.d.ts.map +1 -1
  133. package/dist/core/semantic/narrowing-builder-core.js +85 -126
  134. package/dist/core/semantic/narrowing-builder-core.js.map +1 -1
  135. package/dist/core/semantic/narrowing-builder-core.test.js +3 -2
  136. package/dist/core/semantic/narrowing-builder-core.test.js.map +1 -1
  137. package/dist/core/semantic/narrowing-builder-unions.d.ts.map +1 -1
  138. package/dist/core/semantic/narrowing-builder-unions.js +43 -7
  139. package/dist/core/semantic/narrowing-builder-unions.js.map +1 -1
  140. package/dist/core/semantic/narrowing-builders.d.ts +1 -1
  141. package/dist/core/semantic/narrowing-builders.d.ts.map +1 -1
  142. package/dist/core/semantic/narrowing-builders.js +1 -1
  143. package/dist/core/semantic/narrowing-builders.js.map +1 -1
  144. package/dist/core/semantic/narrowing-refinements.d.ts +1 -1
  145. package/dist/core/semantic/narrowing-refinements.d.ts.map +1 -1
  146. package/dist/core/semantic/narrowing-refinements.js +1 -1
  147. package/dist/core/semantic/narrowing-refinements.js.map +1 -1
  148. package/dist/core/semantic/nullable-typeof-refinements.d.ts +1 -5
  149. package/dist/core/semantic/nullable-typeof-refinements.d.ts.map +1 -1
  150. package/dist/core/semantic/nullable-typeof-refinements.js +136 -88
  151. package/dist/core/semantic/nullable-typeof-refinements.js.map +1 -1
  152. package/dist/core/semantic/nullish-value-helpers.d.ts +1 -1
  153. package/dist/core/semantic/nullish-value-helpers.d.ts.map +1 -1
  154. package/dist/core/semantic/nullish-value-helpers.js +18 -9
  155. package/dist/core/semantic/nullish-value-helpers.js.map +1 -1
  156. package/dist/core/semantic/runtime-materialization-targets.js +1 -1
  157. package/dist/core/semantic/runtime-materialization-targets.js.map +1 -1
  158. package/dist/core/semantic/runtime-reification.d.ts +1 -0
  159. package/dist/core/semantic/runtime-reification.d.ts.map +1 -1
  160. package/dist/core/semantic/runtime-reification.js +141 -35
  161. package/dist/core/semantic/runtime-reification.js.map +1 -1
  162. package/dist/core/semantic/runtime-union-family-preservation.js +1 -1
  163. package/dist/core/semantic/runtime-union-family-preservation.js.map +1 -1
  164. package/dist/core/semantic/runtime-union-frame.d.ts +6 -0
  165. package/dist/core/semantic/runtime-union-frame.d.ts.map +1 -0
  166. package/dist/core/semantic/runtime-union-frame.js +130 -0
  167. package/dist/core/semantic/runtime-union-frame.js.map +1 -0
  168. package/dist/core/semantic/runtime-union-matching.d.ts.map +1 -1
  169. package/dist/core/semantic/runtime-union-matching.js +13 -0
  170. package/dist/core/semantic/runtime-union-matching.js.map +1 -1
  171. package/dist/core/semantic/runtime-union-member-mapping.test.js +1 -1
  172. package/dist/core/semantic/runtime-union-member-mapping.test.js.map +1 -1
  173. package/dist/core/semantic/runtime-union-ordering.d.ts.map +1 -1
  174. package/dist/core/semantic/runtime-union-ordering.js +10 -22
  175. package/dist/core/semantic/runtime-union-ordering.js.map +1 -1
  176. package/dist/core/semantic/runtime-union-projection.d.ts.map +1 -1
  177. package/dist/core/semantic/runtime-union-projection.js +23 -7
  178. package/dist/core/semantic/runtime-union-projection.js.map +1 -1
  179. package/dist/core/semantic/runtime-union-projection.test.js +19 -1
  180. package/dist/core/semantic/runtime-union-projection.test.js.map +1 -1
  181. package/dist/core/semantic/runtime-union-registry.js +13 -13
  182. package/dist/core/semantic/runtime-union-registry.js.map +1 -1
  183. package/dist/core/semantic/runtime-unions.d.ts +3 -4
  184. package/dist/core/semantic/runtime-unions.d.ts.map +1 -1
  185. package/dist/core/semantic/runtime-unions.js +46 -145
  186. package/dist/core/semantic/runtime-unions.js.map +1 -1
  187. package/dist/core/semantic/runtime-unions.test.js +12 -7
  188. package/dist/core/semantic/runtime-unions.test.js.map +1 -1
  189. package/dist/core/semantic/semantic-union-members.d.ts.map +1 -1
  190. package/dist/core/semantic/semantic-union-members.js +1 -1
  191. package/dist/core/semantic/semantic-union-members.js.map +1 -1
  192. package/dist/core/semantic/storage-erased-adaptation.d.ts.map +1 -1
  193. package/dist/core/semantic/storage-erased-adaptation.js +8 -11
  194. package/dist/core/semantic/storage-erased-adaptation.js.map +1 -1
  195. package/dist/core/semantic/storage-erased-adaptation.test.js +4 -1
  196. package/dist/core/semantic/storage-erased-adaptation.test.js.map +1 -1
  197. package/dist/core/semantic/storage-types.d.ts +3 -0
  198. package/dist/core/semantic/storage-types.d.ts.map +1 -1
  199. package/dist/core/semantic/storage-types.js +17 -4
  200. package/dist/core/semantic/storage-types.js.map +1 -1
  201. package/dist/core/semantic/structural-shape-matching.d.ts +5 -1
  202. package/dist/core/semantic/structural-shape-matching.d.ts.map +1 -1
  203. package/dist/core/semantic/structural-shape-matching.js +29 -4
  204. package/dist/core/semantic/structural-shape-matching.js.map +1 -1
  205. package/dist/core/semantic/surface-member-semantics.d.ts +14 -0
  206. package/dist/core/semantic/surface-member-semantics.d.ts.map +1 -0
  207. package/dist/core/semantic/surface-member-semantics.js +41 -0
  208. package/dist/core/semantic/surface-member-semantics.js.map +1 -0
  209. package/dist/core/semantic/symbol-types.d.ts +2 -9
  210. package/dist/core/semantic/symbol-types.d.ts.map +1 -1
  211. package/dist/core/semantic/symbol-types.js +7 -11
  212. package/dist/core/semantic/symbol-types.js.map +1 -1
  213. package/dist/core/semantic/ternary-guards.d.ts +1 -1
  214. package/dist/core/semantic/ternary-guards.d.ts.map +1 -1
  215. package/dist/core/semantic/ternary-guards.js +2 -1
  216. package/dist/core/semantic/ternary-guards.js.map +1 -1
  217. package/dist/core/semantic/truthiness-evaluation.d.ts.map +1 -1
  218. package/dist/core/semantic/truthiness-evaluation.js +3 -3
  219. package/dist/core/semantic/truthiness-evaluation.js.map +1 -1
  220. package/dist/core/semantic/type-compatibility.d.ts +4 -2
  221. package/dist/core/semantic/type-compatibility.d.ts.map +1 -1
  222. package/dist/core/semantic/type-compatibility.js +62 -2
  223. package/dist/core/semantic/type-compatibility.js.map +1 -1
  224. package/dist/core/semantic/type-domains.d.ts +17 -0
  225. package/dist/core/semantic/type-domains.d.ts.map +1 -0
  226. package/dist/core/semantic/type-domains.js +7 -0
  227. package/dist/core/semantic/type-domains.js.map +1 -0
  228. package/dist/core/semantic/type-equivalence.d.ts.map +1 -1
  229. package/dist/core/semantic/type-equivalence.js +12 -7
  230. package/dist/core/semantic/type-equivalence.js.map +1 -1
  231. package/dist/core/semantic/type-equivalence.test.js +34 -0
  232. package/dist/core/semantic/type-equivalence.test.js.map +1 -1
  233. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js +13 -4
  234. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js.map +1 -1
  235. package/dist/core/semantic/type-resolution-cases/helpers.d.ts +2 -2
  236. package/dist/core/semantic/type-resolution-cases/helpers.d.ts.map +1 -1
  237. package/dist/core/semantic/type-resolution-cases/helpers.js +2 -2
  238. package/dist/core/semantic/type-resolution-cases/helpers.js.map +1 -1
  239. package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.d.ts +2 -0
  240. package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.d.ts.map +1 -0
  241. package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.js +36 -0
  242. package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.js.map +1 -0
  243. package/dist/core/semantic/type-resolution.test.d.ts +1 -1
  244. package/dist/core/semantic/type-resolution.test.d.ts.map +1 -1
  245. package/dist/core/semantic/type-resolution.test.js +1 -1
  246. package/dist/core/semantic/type-resolution.test.js.map +1 -1
  247. package/dist/core/semantic/type-substitution.d.ts.map +1 -1
  248. package/dist/core/semantic/type-substitution.js +2 -1
  249. package/dist/core/semantic/type-substitution.js.map +1 -1
  250. package/dist/core/semantic/typeof-comparison.d.ts +14 -0
  251. package/dist/core/semantic/typeof-comparison.d.ts.map +1 -0
  252. package/dist/core/semantic/typeof-comparison.js +47 -0
  253. package/dist/core/semantic/typeof-comparison.js.map +1 -0
  254. package/dist/core/semantic/union-predicate-matching.d.ts.map +1 -1
  255. package/dist/core/semantic/union-predicate-matching.js +1 -1
  256. package/dist/core/semantic/union-predicate-matching.js.map +1 -1
  257. package/dist/core/semantic/union-semantics.js +1 -1
  258. package/dist/core/semantic/union-semantics.js.map +1 -1
  259. package/dist/core/semantic/union-typeof-matching.d.ts.map +1 -1
  260. package/dist/core/semantic/union-typeof-matching.js +72 -22
  261. package/dist/core/semantic/union-typeof-matching.js.map +1 -1
  262. package/dist/core/semantic/variable-type-resolution.d.ts +1 -0
  263. package/dist/core/semantic/variable-type-resolution.d.ts.map +1 -1
  264. package/dist/core/semantic/variable-type-resolution.js +62 -6
  265. package/dist/core/semantic/variable-type-resolution.js.map +1 -1
  266. package/dist/duplicate-type-suppression.d.ts.map +1 -1
  267. package/dist/duplicate-type-suppression.js.map +1 -1
  268. package/dist/emitter-types/context.d.ts +1 -0
  269. package/dist/emitter-types/context.d.ts.map +1 -1
  270. package/dist/emitter-types/context.js +13 -1
  271. package/dist/emitter-types/context.js.map +1 -1
  272. package/dist/emitter-types/core.d.ts +10 -9
  273. package/dist/emitter-types/core.d.ts.map +1 -1
  274. package/dist/emitter-types/fqn.d.ts +0 -1
  275. package/dist/emitter-types/fqn.d.ts.map +1 -1
  276. package/dist/emitter-types/fqn.js +0 -1
  277. package/dist/emitter-types/fqn.js.map +1 -1
  278. package/dist/emitter-types/index.d.ts +1 -1
  279. package/dist/emitter-types/index.d.ts.map +1 -1
  280. package/dist/emitter-types/index.js +1 -1
  281. package/dist/emitter-types/index.js.map +1 -1
  282. package/dist/emitter.d.ts +3 -3
  283. package/dist/emitter.d.ts.map +1 -1
  284. package/dist/emitter.js +1 -7
  285. package/dist/emitter.js.map +1 -1
  286. package/dist/expression-emitter.d.ts.map +1 -1
  287. package/dist/expression-emitter.js +7 -2
  288. package/dist/expression-emitter.js.map +1 -1
  289. package/dist/expressions/access-binding.d.ts.map +1 -1
  290. package/dist/expressions/access-binding.js +38 -66
  291. package/dist/expressions/access-binding.js.map +1 -1
  292. package/dist/expressions/access-computed.d.ts.map +1 -1
  293. package/dist/expressions/access-computed.js +10 -15
  294. package/dist/expressions/access-computed.js.map +1 -1
  295. package/dist/expressions/access-function-length.d.ts +13 -0
  296. package/dist/expressions/access-function-length.d.ts.map +1 -0
  297. package/dist/expressions/access-function-length.js +115 -0
  298. package/dist/expressions/access-function-length.js.map +1 -0
  299. package/dist/expressions/access-length.d.ts +5 -11
  300. package/dist/expressions/access-length.d.ts.map +1 -1
  301. package/dist/expressions/access-length.js +18 -242
  302. package/dist/expressions/access-length.js.map +1 -1
  303. package/dist/expressions/access-length.test.js +17 -0
  304. package/dist/expressions/access-length.test.js.map +1 -1
  305. package/dist/expressions/access-property.d.ts +1 -2
  306. package/dist/expressions/access-property.d.ts.map +1 -1
  307. package/dist/expressions/access-property.js +20 -94
  308. package/dist/expressions/access-property.js.map +1 -1
  309. package/dist/expressions/access-resolution-receivers.d.ts.map +1 -1
  310. package/dist/expressions/access-resolution-receivers.js +24 -17
  311. package/dist/expressions/access-resolution-receivers.js.map +1 -1
  312. package/dist/expressions/access-resolution-types.d.ts.map +1 -1
  313. package/dist/expressions/access-resolution-types.js +7 -0
  314. package/dist/expressions/access-resolution-types.js.map +1 -1
  315. package/dist/expressions/access.d.ts +2 -2
  316. package/dist/expressions/access.d.ts.map +1 -1
  317. package/dist/expressions/access.js +11 -22
  318. package/dist/expressions/access.js.map +1 -1
  319. package/dist/expressions/architecture-invariants.test.js +112 -0
  320. package/dist/expressions/architecture-invariants.test.js.map +1 -1
  321. package/dist/expressions/await-normalization.d.ts.map +1 -1
  322. package/dist/expressions/await-normalization.js +53 -13
  323. package/dist/expressions/await-normalization.js.map +1 -1
  324. package/dist/expressions/awaitable-adaptation.d.ts +15 -0
  325. package/dist/expressions/awaitable-adaptation.d.ts.map +1 -0
  326. package/dist/expressions/awaitable-adaptation.js +174 -0
  327. package/dist/expressions/awaitable-adaptation.js.map +1 -0
  328. package/dist/expressions/calls/call-analysis.d.ts +0 -1
  329. package/dist/expressions/calls/call-analysis.d.ts.map +1 -1
  330. package/dist/expressions/calls/call-analysis.js +0 -7
  331. package/dist/expressions/calls/call-analysis.js.map +1 -1
  332. package/dist/expressions/calls/call-arguments-emit.d.ts.map +1 -1
  333. package/dist/expressions/calls/call-arguments-emit.js +236 -35
  334. package/dist/expressions/calls/call-arguments-emit.js.map +1 -1
  335. package/dist/expressions/calls/call-arguments-helpers.d.ts.map +1 -1
  336. package/dist/expressions/calls/call-arguments-helpers.js +2 -2
  337. package/dist/expressions/calls/call-arguments-helpers.js.map +1 -1
  338. package/dist/expressions/calls/call-array-interop.d.ts +1 -1
  339. package/dist/expressions/calls/call-array-interop.d.ts.map +1 -1
  340. package/dist/expressions/calls/call-array-interop.js +1 -1
  341. package/dist/expressions/calls/call-array-interop.js.map +1 -1
  342. package/dist/expressions/calls/call-array-mutation.d.ts +0 -1
  343. package/dist/expressions/calls/call-array-mutation.d.ts.map +1 -1
  344. package/dist/expressions/calls/call-array-mutation.js +9 -36
  345. package/dist/expressions/calls/call-array-mutation.js.map +1 -1
  346. package/dist/expressions/calls/call-array-wrapper.d.ts.map +1 -1
  347. package/dist/expressions/calls/call-array-wrapper.js +9 -12
  348. package/dist/expressions/calls/call-array-wrapper.js.map +1 -1
  349. package/dist/expressions/calls/call-emitter.d.ts +1 -1
  350. package/dist/expressions/calls/call-emitter.d.ts.map +1 -1
  351. package/dist/expressions/calls/call-emitter.js +85 -7
  352. package/dist/expressions/calls/call-emitter.js.map +1 -1
  353. package/dist/expressions/calls/call-json.d.ts +1 -1
  354. package/dist/expressions/calls/call-json.d.ts.map +1 -1
  355. package/dist/expressions/calls/call-json.js +50 -84
  356. package/dist/expressions/calls/call-json.js.map +1 -1
  357. package/dist/expressions/calls/call-promise-ir-types.d.ts.map +1 -1
  358. package/dist/expressions/calls/call-promise-ir-types.js.map +1 -1
  359. package/dist/expressions/calls/call-runtime-union-guards.d.ts.map +1 -1
  360. package/dist/expressions/calls/call-runtime-union-guards.js +10 -1
  361. package/dist/expressions/calls/call-runtime-union-guards.js.map +1 -1
  362. package/dist/expressions/calls/new-emitter-collections.d.ts +7 -4
  363. package/dist/expressions/calls/new-emitter-collections.d.ts.map +1 -1
  364. package/dist/expressions/calls/new-emitter-collections.js +64 -25
  365. package/dist/expressions/calls/new-emitter-collections.js.map +1 -1
  366. package/dist/expressions/calls/new-emitter.d.ts.map +1 -1
  367. package/dist/expressions/calls/new-emitter.js +4 -5
  368. package/dist/expressions/calls/new-emitter.js.map +1 -1
  369. package/dist/expressions/direct-storage-types.d.ts.map +1 -1
  370. package/dist/expressions/direct-storage-types.js +76 -15
  371. package/dist/expressions/direct-storage-types.js.map +1 -1
  372. package/dist/expressions/exact-comparison.d.ts.map +1 -1
  373. package/dist/expressions/exact-comparison.js +3 -1
  374. package/dist/expressions/exact-comparison.js.map +1 -1
  375. package/dist/expressions/expected-type-adaptation.d.ts +1 -1
  376. package/dist/expressions/expected-type-adaptation.d.ts.map +1 -1
  377. package/dist/expressions/expected-type-adaptation.js +164 -30
  378. package/dist/expressions/expected-type-adaptation.js.map +1 -1
  379. package/dist/expressions/expected-type-adaptation.test.js +81 -26
  380. package/dist/expressions/expected-type-adaptation.test.js.map +1 -1
  381. package/dist/expressions/identifier-storage/broad-storage-target.d.ts +4 -0
  382. package/dist/expressions/identifier-storage/broad-storage-target.d.ts.map +1 -0
  383. package/dist/expressions/identifier-storage/broad-storage-target.js +26 -0
  384. package/dist/expressions/identifier-storage/broad-storage-target.js.map +1 -0
  385. package/dist/expressions/identifier-storage/implicit-storage.d.ts +14 -0
  386. package/dist/expressions/identifier-storage/implicit-storage.d.ts.map +1 -0
  387. package/dist/expressions/identifier-storage/implicit-storage.js +44 -0
  388. package/dist/expressions/identifier-storage/implicit-storage.js.map +1 -0
  389. package/dist/expressions/identifier-storage/materialized-narrowed.d.ts +7 -0
  390. package/dist/expressions/identifier-storage/materialized-narrowed.d.ts.map +1 -0
  391. package/dist/expressions/identifier-storage/materialized-narrowed.js +92 -0
  392. package/dist/expressions/identifier-storage/materialized-narrowed.js.map +1 -0
  393. package/dist/expressions/identifier-storage/narrowed-storage-compatible.d.ts +14 -0
  394. package/dist/expressions/identifier-storage/narrowed-storage-compatible.d.ts.map +1 -0
  395. package/dist/expressions/identifier-storage/narrowed-storage-compatible.js +168 -0
  396. package/dist/expressions/identifier-storage/narrowed-storage-compatible.js.map +1 -0
  397. package/dist/expressions/identifier-storage/reified-storage.d.ts +7 -0
  398. package/dist/expressions/identifier-storage/reified-storage.d.ts.map +1 -0
  399. package/dist/expressions/identifier-storage/reified-storage.js +25 -0
  400. package/dist/expressions/identifier-storage/reified-storage.js.map +1 -0
  401. package/dist/expressions/identifier-storage/runtime-subset.d.ts +14 -0
  402. package/dist/expressions/identifier-storage/runtime-subset.d.ts.map +1 -0
  403. package/dist/expressions/identifier-storage/runtime-subset.js +100 -0
  404. package/dist/expressions/identifier-storage/runtime-subset.js.map +1 -0
  405. package/dist/expressions/identifier-storage/storage-compatible.d.ts +10 -0
  406. package/dist/expressions/identifier-storage/storage-compatible.d.ts.map +1 -0
  407. package/dist/expressions/identifier-storage/storage-compatible.js +76 -0
  408. package/dist/expressions/identifier-storage/storage-compatible.js.map +1 -0
  409. package/dist/expressions/identifier-storage/storage-surface-match.d.ts +4 -0
  410. package/dist/expressions/identifier-storage/storage-surface-match.d.ts.map +1 -0
  411. package/dist/expressions/identifier-storage/storage-surface-match.js +95 -0
  412. package/dist/expressions/identifier-storage/storage-surface-match.js.map +1 -0
  413. package/dist/expressions/identifier-storage/storage-surface-shared.d.ts +12 -0
  414. package/dist/expressions/identifier-storage/storage-surface-shared.d.ts.map +1 -0
  415. package/dist/expressions/identifier-storage/storage-surface-shared.js +77 -0
  416. package/dist/expressions/identifier-storage/storage-surface-shared.js.map +1 -0
  417. package/dist/expressions/identifier-storage/storage-surface.d.ts +9 -0
  418. package/dist/expressions/identifier-storage/storage-surface.d.ts.map +1 -0
  419. package/dist/expressions/identifier-storage/storage-surface.js +9 -0
  420. package/dist/expressions/identifier-storage/storage-surface.js.map +1 -0
  421. package/dist/expressions/identifier-storage.d.ts +1 -42
  422. package/dist/expressions/identifier-storage.d.ts.map +1 -1
  423. package/dist/expressions/identifier-storage.js +1 -477
  424. package/dist/expressions/identifier-storage.js.map +1 -1
  425. package/dist/expressions/identifiers.d.ts.map +1 -1
  426. package/dist/expressions/identifiers.js +7 -16
  427. package/dist/expressions/identifiers.js.map +1 -1
  428. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js +9 -3
  429. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js.map +1 -1
  430. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js +4 -1
  431. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js.map +1 -1
  432. package/dist/expressions/index-cases/basic-literals-and-calls.test.js +3 -3
  433. package/dist/expressions/index-cases/basic-literals-and-calls.test.js.map +1 -1
  434. package/dist/expressions/index-cases/defaults-and-char-context.test.js +8 -2
  435. package/dist/expressions/index-cases/defaults-and-char-context.test.js.map +1 -1
  436. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js +17 -20
  437. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js.map +1 -1
  438. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js +7 -8
  439. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js.map +1 -1
  440. package/dist/expressions/index-cases/helpers.d.ts +6 -4
  441. package/dist/expressions/index-cases/helpers.d.ts.map +1 -1
  442. package/dist/expressions/index-cases/helpers.js +31 -2
  443. package/dist/expressions/index-cases/helpers.js.map +1 -1
  444. package/dist/expressions/index-cases/nullable-and-comparisons.test.js +9 -9
  445. package/dist/expressions/index-cases/nullable-and-comparisons.test.js.map +1 -1
  446. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js +3 -3
  447. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js.map +1 -1
  448. package/dist/expressions/index-cases/runtime-union-reification-b.test.js +19 -13
  449. package/dist/expressions/index-cases/runtime-union-reification-b.test.js.map +1 -1
  450. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js +22 -13
  451. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js.map +1 -1
  452. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js +5 -5
  453. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js.map +1 -1
  454. package/dist/expressions/lambda-body.js +3 -3
  455. package/dist/expressions/lambda-body.js.map +1 -1
  456. package/dist/expressions/lambda-parameters.d.ts.map +1 -1
  457. package/dist/expressions/lambda-parameters.js +97 -12
  458. package/dist/expressions/lambda-parameters.js.map +1 -1
  459. package/dist/expressions/object-literal.d.ts.map +1 -1
  460. package/dist/expressions/object-literal.js +48 -18
  461. package/dist/expressions/object-literal.js.map +1 -1
  462. package/dist/expressions/operators/binary-dispatch.d.ts +1 -1
  463. package/dist/expressions/operators/binary-dispatch.d.ts.map +1 -1
  464. package/dist/expressions/operators/binary-dispatch.js +52 -12
  465. package/dist/expressions/operators/binary-dispatch.js.map +1 -1
  466. package/dist/expressions/operators/binary-helpers.d.ts.map +1 -1
  467. package/dist/expressions/operators/binary-helpers.js +11 -1
  468. package/dist/expressions/operators/binary-helpers.js.map +1 -1
  469. package/dist/expressions/operators/binary-special-ops.d.ts +1 -11
  470. package/dist/expressions/operators/binary-special-ops.d.ts.map +1 -1
  471. package/dist/expressions/operators/binary-special-ops.js +214 -218
  472. package/dist/expressions/operators/binary-special-ops.js.map +1 -1
  473. package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -1
  474. package/dist/expressions/operators/conditional-emitter.js +89 -19
  475. package/dist/expressions/operators/conditional-emitter.js.map +1 -1
  476. package/dist/expressions/operators/logical-emitter.js +1 -1
  477. package/dist/expressions/operators/logical-emitter.js.map +1 -1
  478. package/dist/expressions/operators/unary-emitter.d.ts.map +1 -1
  479. package/dist/expressions/operators/unary-emitter.js +7 -50
  480. package/dist/expressions/operators/unary-emitter.js.map +1 -1
  481. package/dist/expressions/other.d.ts +2 -6
  482. package/dist/expressions/other.d.ts.map +1 -1
  483. package/dist/expressions/other.js +6 -13
  484. package/dist/expressions/other.js.map +1 -1
  485. package/dist/expressions/post-emission-adaptation.d.ts +1 -1
  486. package/dist/expressions/post-emission-adaptation.d.ts.map +1 -1
  487. package/dist/expressions/post-emission-adaptation.js +55 -150
  488. package/dist/expressions/post-emission-adaptation.js.map +1 -1
  489. package/dist/expressions/precedence.test.js +5 -46
  490. package/dist/expressions/precedence.test.js.map +1 -1
  491. package/dist/expressions/runtime-union-adaptation-projection.d.ts.map +1 -1
  492. package/dist/expressions/runtime-union-adaptation-projection.js +25 -4
  493. package/dist/expressions/runtime-union-adaptation-projection.js.map +1 -1
  494. package/dist/expressions/runtime-union-adaptation-upcast.d.ts +1 -1
  495. package/dist/expressions/runtime-union-adaptation-upcast.d.ts.map +1 -1
  496. package/dist/expressions/runtime-union-adaptation-upcast.js +281 -31
  497. package/dist/expressions/runtime-union-adaptation-upcast.js.map +1 -1
  498. package/dist/expressions/structural-anonymous-targets.d.ts.map +1 -1
  499. package/dist/expressions/structural-anonymous-targets.js +5 -0
  500. package/dist/expressions/structural-anonymous-targets.js.map +1 -1
  501. package/dist/expressions/structural-collection-adaptation.d.ts.map +1 -1
  502. package/dist/expressions/structural-collection-adaptation.js +4 -2
  503. package/dist/expressions/structural-collection-adaptation.js.map +1 -1
  504. package/dist/expressions/structural-object-adaptation.d.ts.map +1 -1
  505. package/dist/expressions/structural-object-adaptation.js +58 -3
  506. package/dist/expressions/structural-object-adaptation.js.map +1 -1
  507. package/dist/expressions/structural-property-model.d.ts.map +1 -1
  508. package/dist/expressions/structural-property-model.js +7 -3
  509. package/dist/expressions/structural-property-model.js.map +1 -1
  510. package/dist/expressions/structural-type-shapes.d.ts.map +1 -1
  511. package/dist/expressions/structural-type-shapes.js +1 -1
  512. package/dist/expressions/structural-type-shapes.js.map +1 -1
  513. package/dist/expressions/structural-type-shapes.test.js +2 -1
  514. package/dist/expressions/structural-type-shapes.test.js.map +1 -1
  515. package/dist/expressions/type-assertion-emitters.d.ts.map +1 -1
  516. package/dist/expressions/type-assertion-emitters.js +231 -15
  517. package/dist/expressions/type-assertion-emitters.js.map +1 -1
  518. package/dist/fixture-regression-mirrors.test.js +43 -112
  519. package/dist/fixture-regression-mirrors.test.js.map +1 -1
  520. package/dist/generated-files.d.ts +0 -1
  521. package/dist/generated-files.d.ts.map +1 -1
  522. package/dist/generated-files.js +0 -229
  523. package/dist/generated-files.js.map +1 -1
  524. package/dist/generated-files.test.js +53 -1
  525. package/dist/generated-files.test.js.map +1 -1
  526. package/dist/golden-tests/runner.d.ts.map +1 -1
  527. package/dist/golden-tests/runner.js +1 -0
  528. package/dist/golden-tests/runner.js.map +1 -1
  529. package/dist/integration-cases/arrow-and-generics-a.test.js +52 -32
  530. package/dist/integration-cases/arrow-and-generics-a.test.js.map +1 -1
  531. package/dist/integration-cases/arrow-and-generics-b.test.js +17 -23
  532. package/dist/integration-cases/arrow-and-generics-b.test.js.map +1 -1
  533. package/dist/integration-cases/await-and-intrinsics.test.js +12 -10
  534. package/dist/integration-cases/await-and-intrinsics.test.js.map +1 -1
  535. package/dist/integration-cases/clr-iterable-overloads.test.js +58 -27
  536. package/dist/integration-cases/clr-iterable-overloads.test.js.map +1 -1
  537. package/dist/integration-cases/full-module-and-promises.test.js +21 -19
  538. package/dist/integration-cases/full-module-and-promises.test.js.map +1 -1
  539. package/dist/integration-cases/helpers.d.ts.map +1 -1
  540. package/dist/integration-cases/helpers.js +12 -33
  541. package/dist/integration-cases/helpers.js.map +1 -1
  542. package/dist/integration-cases/may14-downstream-contracts.test.d.ts +2 -0
  543. package/dist/integration-cases/may14-downstream-contracts.test.d.ts.map +1 -0
  544. package/dist/integration-cases/may14-downstream-contracts.test.js +894 -0
  545. package/dist/integration-cases/may14-downstream-contracts.test.js.map +1 -0
  546. package/dist/integration-cases/object-literals-and-channels.test.js +10 -4
  547. package/dist/integration-cases/object-literals-and-channels.test.js.map +1 -1
  548. package/dist/integration-cases/regression-coverage-a.test.js +36 -30
  549. package/dist/integration-cases/regression-coverage-a.test.js.map +1 -1
  550. package/dist/integration-cases/regression-coverage-b.test.js +95 -111
  551. package/dist/integration-cases/regression-coverage-b.test.js.map +1 -1
  552. package/dist/integration-cases/regression-coverage-c.test.js +499 -197
  553. package/dist/integration-cases/regression-coverage-c.test.js.map +1 -1
  554. package/dist/integration.test.d.ts +1 -0
  555. package/dist/integration.test.d.ts.map +1 -1
  556. package/dist/integration.test.js +1 -0
  557. package/dist/integration.test.js.map +1 -1
  558. package/dist/json-aot-generic.test.js +48 -200
  559. package/dist/json-aot-generic.test.js.map +1 -1
  560. package/dist/statements/block-emitters/block-and-return.d.ts +1 -1
  561. package/dist/statements/block-emitters/block-and-return.d.ts.map +1 -1
  562. package/dist/statements/block-emitters/block-and-return.js +9 -3
  563. package/dist/statements/block-emitters/block-and-return.js.map +1 -1
  564. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  565. package/dist/statements/classes/members/properties.js +2 -3
  566. package/dist/statements/classes/members/properties.js.map +1 -1
  567. package/dist/statements/classes/properties.d.ts.map +1 -1
  568. package/dist/statements/classes/properties.js.map +1 -1
  569. package/dist/statements/control/conditionals/architecture-invariants.test.d.ts +2 -0
  570. package/dist/statements/control/conditionals/architecture-invariants.test.d.ts.map +1 -0
  571. package/dist/statements/control/conditionals/architecture-invariants.test.js +19 -0
  572. package/dist/statements/control/conditionals/architecture-invariants.test.js.map +1 -0
  573. package/dist/statements/control/conditionals/branch-context.d.ts +4 -6
  574. package/dist/statements/control/conditionals/branch-context.d.ts.map +1 -1
  575. package/dist/statements/control/conditionals/branch-context.js +105 -32
  576. package/dist/statements/control/conditionals/branch-context.js.map +1 -1
  577. package/dist/statements/control/conditionals/guard-analysis.d.ts +2 -2
  578. package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -1
  579. package/dist/statements/control/conditionals/guard-analysis.js +1 -1
  580. package/dist/statements/control/conditionals/guard-analysis.js.map +1 -1
  581. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts +2 -1
  582. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts.map +1 -1
  583. package/dist/statements/control/conditionals/guard-detectors-discriminant.js +83 -1
  584. package/dist/statements/control/conditionals/guard-detectors-discriminant.js.map +1 -1
  585. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts +2 -7
  586. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts.map +1 -1
  587. package/dist/statements/control/conditionals/guard-detectors-structural.js +47 -82
  588. package/dist/statements/control/conditionals/guard-detectors-structural.js.map +1 -1
  589. package/dist/statements/control/conditionals/guard-detectors.d.ts +2 -2
  590. package/dist/statements/control/conditionals/guard-detectors.d.ts.map +1 -1
  591. package/dist/statements/control/conditionals/guard-detectors.js +2 -2
  592. package/dist/statements/control/conditionals/guard-detectors.js.map +1 -1
  593. package/dist/statements/control/conditionals/guard-extraction.d.ts +5 -7
  594. package/dist/statements/control/conditionals/guard-extraction.d.ts.map +1 -1
  595. package/dist/statements/control/conditionals/guard-extraction.js +10 -190
  596. package/dist/statements/control/conditionals/guard-extraction.js.map +1 -1
  597. package/dist/statements/control/conditionals/guard-types.d.ts +16 -26
  598. package/dist/statements/control/conditionals/guard-types.d.ts.map +1 -1
  599. package/dist/statements/control/conditionals/guard-types.js +23 -1
  600. package/dist/statements/control/conditionals/guard-types.js.map +1 -1
  601. package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts.map +1 -1
  602. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js +5 -8
  603. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js.map +1 -1
  604. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts +2 -8
  605. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts.map +1 -1
  606. package/dist/statements/control/conditionals/if-emit-predicate-guards.js +4 -84
  607. package/dist/statements/control/conditionals/if-emit-predicate-guards.js.map +1 -1
  608. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts +2 -0
  609. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts.map +1 -1
  610. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js +87 -3
  611. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js.map +1 -1
  612. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts.map +1 -1
  613. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js +254 -20
  614. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js.map +1 -1
  615. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts +2 -2
  616. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts.map +1 -1
  617. package/dist/statements/control/conditionals/if-emit-union-guards.js +2 -2
  618. package/dist/statements/control/conditionals/if-emit-union-guards.js.map +1 -1
  619. package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -1
  620. package/dist/statements/control/conditionals/if-emitter.js +36 -43
  621. package/dist/statements/control/conditionals/if-emitter.js.map +1 -1
  622. package/dist/statements/control/conditionals/ir-branch-narrowings.d.ts +5 -0
  623. package/dist/statements/control/conditionals/ir-branch-narrowings.d.ts.map +1 -0
  624. package/dist/statements/control/conditionals/ir-branch-narrowings.js +16 -0
  625. package/dist/statements/control/conditionals/ir-branch-narrowings.js.map +1 -0
  626. package/dist/statements/control/loops.d.ts +2 -9
  627. package/dist/statements/control/loops.d.ts.map +1 -1
  628. package/dist/statements/control/loops.js +56 -48
  629. package/dist/statements/control/loops.js.map +1 -1
  630. package/dist/statements/declarations/classes.d.ts.map +1 -1
  631. package/dist/statements/declarations/classes.js.map +1 -1
  632. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  633. package/dist/statements/declarations/interfaces.js.map +1 -1
  634. package/dist/statements/declarations/structs.test.js +5 -4
  635. package/dist/statements/declarations/structs.test.js.map +1 -1
  636. package/dist/statements/declarations/type-aliases.js.map +1 -1
  637. package/dist/statements/declarations/variables.d.ts.map +1 -1
  638. package/dist/statements/declarations/variables.js +7 -4
  639. package/dist/statements/declarations/variables.js.map +1 -1
  640. package/dist/statements/statement-cases/flow-and-void.test.js +3 -3
  641. package/dist/statements/statement-cases/flow-and-void.test.js.map +1 -1
  642. package/dist/statements/statement-cases/helpers.d.ts +3 -2
  643. package/dist/statements/statement-cases/helpers.d.ts.map +1 -1
  644. package/dist/statements/statement-cases/helpers.js +1 -1
  645. package/dist/statements/statement-cases/helpers.js.map +1 -1
  646. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js +21 -21
  647. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js.map +1 -1
  648. package/dist/statements/statement-cases/union-guards-basic.test.js +3 -80
  649. package/dist/statements/statement-cases/union-guards-basic.test.js.map +1 -1
  650. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js +0 -196
  651. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js.map +1 -1
  652. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js +15 -15
  653. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js.map +1 -1
  654. package/dist/statements/statement-cases/union-guards-remapped-a.test.js +7 -189
  655. package/dist/statements/statement-cases/union-guards-remapped-a.test.js.map +1 -1
  656. package/dist/statements/statement-cases/union-guards-remapped-b.test.js +7 -193
  657. package/dist/statements/statement-cases/union-guards-remapped-b.test.js.map +1 -1
  658. package/dist/test-ir-strict.d.ts +7 -0
  659. package/dist/test-ir-strict.d.ts.map +1 -0
  660. package/dist/test-ir-strict.js +9 -0
  661. package/dist/test-ir-strict.js.map +1 -0
  662. package/dist/type-assertion.test.js +5 -4
  663. package/dist/type-assertion.test.js.map +1 -1
  664. package/dist/types/emitter.d.ts.map +1 -1
  665. package/dist/types/emitter.js +7 -1
  666. package/dist/types/emitter.js.map +1 -1
  667. package/dist/types/intersections.d.ts +2 -2
  668. package/dist/types/intersections.d.ts.map +1 -1
  669. package/dist/types/intersections.js +26 -6
  670. package/dist/types/intersections.js.map +1 -1
  671. package/dist/types/parameters.d.ts.map +1 -1
  672. package/dist/types/parameters.js +30 -5
  673. package/dist/types/parameters.js.map +1 -1
  674. package/dist/types/reference-structural-signatures.d.ts.map +1 -1
  675. package/dist/types/reference-structural-signatures.js +3 -6
  676. package/dist/types/reference-structural-signatures.js.map +1 -1
  677. package/dist/types/references-cases/array-and-cross-module.test.js +2 -4
  678. package/dist/types/references-cases/array-and-cross-module.test.js.map +1 -1
  679. package/dist/types/references-cases/bindings-and-local.test.js +2 -4
  680. package/dist/types/references-cases/bindings-and-local.test.js.map +1 -1
  681. package/dist/types/references-cases/helpers.d.ts +3 -2
  682. package/dist/types/references-cases/helpers.d.ts.map +1 -1
  683. package/dist/types/references-cases/helpers.js +2 -1
  684. package/dist/types/references-cases/helpers.js.map +1 -1
  685. package/dist/types/references.d.ts.map +1 -1
  686. package/dist/types/references.js +21 -2
  687. package/dist/types/references.js.map +1 -1
  688. package/dist/types/unions-cases/basic-and-ordering.test.js +51 -0
  689. package/dist/types/unions-cases/basic-and-ordering.test.js.map +1 -1
  690. package/dist/types/unions.d.ts.map +1 -1
  691. package/dist/types/unions.js +17 -0
  692. package/dist/types/unions.js.map +1 -1
  693. package/dist/types.d.ts +3 -1
  694. package/dist/types.d.ts.map +1 -1
  695. package/dist/types.js +2 -1
  696. package/dist/types.js.map +1 -1
  697. package/package.json +2 -2
  698. package/dist/core/semantic/js-value-types.d.ts +0 -5
  699. package/dist/core/semantic/js-value-types.d.ts.map +0 -1
  700. package/dist/core/semantic/js-value-types.js +0 -42
  701. package/dist/core/semantic/js-value-types.js.map +0 -1
  702. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts +0 -2
  703. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts.map +0 -1
  704. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js +0 -98
  705. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js.map +0 -1
  706. package/dist/expressions/calls/call-dynamic-import.d.ts +0 -11
  707. package/dist/expressions/calls/call-dynamic-import.d.ts.map +0 -1
  708. package/dist/expressions/calls/call-dynamic-import.js +0 -148
  709. package/dist/expressions/calls/call-dynamic-import.js.map +0 -1
@@ -0,0 +1,894 @@
1
+ import { describe, it } from "mocha";
2
+ import { expect } from "chai";
3
+ import { compileProjectToCSharp, compileToCSharp } from "./helpers.js";
4
+ describe("May 14 downstream contract coverage", () => {
5
+ it("wraps contextual lambda expression-body returns into source-owned union aliases", () => {
6
+ const csharp = compileToCSharp(`
7
+ class Request {
8
+ body: string = "";
9
+ }
10
+
11
+ class Response {
12
+ json(value: string): Response {
13
+ return this;
14
+ }
15
+ }
16
+
17
+ type NextFunction = (value?: string | null) => void | Promise<void>;
18
+ type IgnoredHandlerResult =
19
+ | void
20
+ | Response
21
+ | Promise<void | Response>;
22
+ type RequestHandler = (
23
+ req: Request,
24
+ res: Response,
25
+ next: NextFunction
26
+ ) => IgnoredHandlerResult;
27
+
28
+ declare const app: {
29
+ post(path: string, handler: RequestHandler): void;
30
+ };
31
+
32
+ export function main(): void {
33
+ app.post("/echo", (req: Request, res: Response) => res.json(req.body));
34
+ }
35
+ `);
36
+ expect(csharp).to.match(/return global::Test\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
37
+ });
38
+ it("prefers exact contextual union return arms over broad object catch-all arms", () => {
39
+ const csharp = compileToCSharp(`
40
+ type JsValue =
41
+ | string
42
+ | number
43
+ | boolean
44
+ | object
45
+ | null
46
+ | undefined;
47
+
48
+ class Request {
49
+ body: JsValue = undefined;
50
+ }
51
+
52
+ class Response {
53
+ json(value: JsValue): Response {
54
+ return this;
55
+ }
56
+ }
57
+
58
+ type NextFunction = (value?: string | null) => void | Promise<void>;
59
+ type IgnoredHandlerResult =
60
+ | void
61
+ | JsValue
62
+ | Response
63
+ | Promise<void | JsValue | Response>;
64
+ type RequestHandler = (
65
+ req: Request,
66
+ res: Response,
67
+ next: NextFunction
68
+ ) => IgnoredHandlerResult;
69
+
70
+ declare const app: {
71
+ post(path: string, handler: RequestHandler): void;
72
+ };
73
+
74
+ export function main(): void {
75
+ app.post("/echo", (req: Request, res: Response) => res.json(req.body));
76
+ }
77
+ `);
78
+ expect(csharp).to.match(/return global::Test\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
79
+ expect(csharp).to.not.include("return res.json(req.body);");
80
+ });
81
+ it("wraps source-package rest-handler expression returns into the declared handler carrier", () => {
82
+ const csharp = compileProjectToCSharp({
83
+ "node_modules/@fixture/mini-express/package.json": JSON.stringify({
84
+ name: "@fixture/mini-express",
85
+ version: "1.0.0",
86
+ type: "module",
87
+ exports: {
88
+ ".": "./src/index.ts",
89
+ "./index.js": "./src/index.ts",
90
+ },
91
+ }, null, 2),
92
+ "node_modules/@fixture/mini-express/tsonic.package.json": JSON.stringify({
93
+ schemaVersion: 1,
94
+ kind: "tsonic-source-package",
95
+ surfaces: ["@tsonic/js"],
96
+ source: {
97
+ namespace: "Fixture.MiniExpress",
98
+ exports: {
99
+ ".": "./src/index.ts",
100
+ "./index.js": "./src/index.ts",
101
+ },
102
+ },
103
+ }, null, 2),
104
+ "node_modules/@fixture/mini-express/src/index.ts": `
105
+ export type JsValue =
106
+ | string
107
+ | number
108
+ | boolean
109
+ | object
110
+ | null
111
+ | undefined;
112
+ export type PathSpec = string | RegExp | readonly PathSpec[];
113
+ export type NextFunction = (value?: string | null) => void | Promise<void>;
114
+ export type IgnoredHandlerResult =
115
+ | void
116
+ | JsValue
117
+ | Response
118
+ | Promise<void | JsValue | Response>;
119
+ export type RequestHandler = (
120
+ req: Request,
121
+ res: Response,
122
+ next: NextFunction
123
+ ) => IgnoredHandlerResult;
124
+
125
+ export class Request {
126
+ body: JsValue = undefined;
127
+ }
128
+
129
+ export class Response {
130
+ json(value: JsValue): Response {
131
+ return this;
132
+ }
133
+ }
134
+
135
+ export class Application {
136
+ post(path: PathSpec, ...handlers: RequestHandler[]): Application {
137
+ return this;
138
+ }
139
+ }
140
+
141
+ export const express = {
142
+ create(): Application {
143
+ return new Application();
144
+ },
145
+ };
146
+ `,
147
+ "src/App.ts": `
148
+ import {
149
+ express,
150
+ type Request,
151
+ type Response,
152
+ } from "@fixture/mini-express/index.js";
153
+
154
+ const app = express.create();
155
+
156
+ app.post("/echo", (req: Request, res: Response) => res.json(req.body));
157
+ `,
158
+ }, "src/App.ts", { surface: "@tsonic/js" }, {
159
+ sourceRootRelativePath: "src",
160
+ rootNamespace: "ExpressHandlerCarrier",
161
+ });
162
+ expect(csharp).to.match(/return global::Fixture\.MiniExpress\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
163
+ expect(csharp).to.not.include("return res.json(req.body);");
164
+ });
165
+ it("materializes contextual union returns across lambda and function-expression positions", () => {
166
+ const csharp = compileToCSharp(`
167
+ export class Ok {}
168
+ export class Err {}
169
+
170
+ export type Result = Ok | Err;
171
+ export type Handler = () => Result;
172
+ export type Routes = { get: Handler };
173
+
174
+ declare function use(handler: Handler): void;
175
+ declare function take(result: Result): void;
176
+ declare function takeHandlers(handlers: Handler[]): void;
177
+ declare function takeRoute(route: Routes): void;
178
+
179
+ function ok(): Ok {
180
+ return new Ok();
181
+ }
182
+
183
+ function err(): Err {
184
+ return new Err();
185
+ }
186
+
187
+ export function directReturn(): Result {
188
+ return ok();
189
+ }
190
+
191
+ export function callArgument(): void {
192
+ take(ok());
193
+ }
194
+
195
+ export function expressionLambdaArgument(): void {
196
+ use(() => ok());
197
+ }
198
+
199
+ export function blockLambdaArgument(): void {
200
+ use(() => {
201
+ return ok();
202
+ });
203
+ }
204
+
205
+ export function functionExpressionArgument(): void {
206
+ use(function () {
207
+ return ok();
208
+ });
209
+ }
210
+
211
+ export const variableArrow: Handler = () => ok();
212
+
213
+ export const variableFunction: Handler = function () {
214
+ return ok();
215
+ };
216
+
217
+ export function returnedLambda(): Handler {
218
+ return () => ok();
219
+ }
220
+
221
+ export function arrayElement(): void {
222
+ takeHandlers([() => ok()]);
223
+ }
224
+
225
+ export function objectProperty(): void {
226
+ takeRoute({ get: () => ok() });
227
+ }
228
+
229
+ export function conditionalExpression(flag: boolean): void {
230
+ use(() => flag ? ok() : err());
231
+ }
232
+
233
+ export function nestedBlock(flag: boolean): void {
234
+ use(() => {
235
+ if (flag) {
236
+ return ok();
237
+ }
238
+ return err();
239
+ });
240
+ }
241
+ `);
242
+ expect([...csharp.matchAll(/Result\.From\d\(ok\(\)\)/g)]).to.have.length
243
+ .greaterThanOrEqual(10);
244
+ expect([...csharp.matchAll(/Result\.From\d\(err\(\)\)/g)]).to.have.length
245
+ .greaterThanOrEqual(2);
246
+ expect(csharp).to.match(/take\(global::Test\.Result\.From\d\(ok\(\)\)\);/);
247
+ expect(csharp).to.match(/return global::Test\.Result\.From\d\(ok\(\)\);/);
248
+ expect(csharp).to.not.match(/return ok\(\);/);
249
+ expect(csharp).to.not.match(/=> ok\(\)/);
250
+ });
251
+ it("materializes contextual async lambda returns through nested union carriers", () => {
252
+ const csharp = compileToCSharp(`
253
+ export class Ok {}
254
+ export class Err {}
255
+
256
+ export type Result = Ok | Err;
257
+ export type AsyncResult = Result | Promise<Result>;
258
+ export type AsyncHandler = () => AsyncResult;
259
+
260
+ declare function useAsync(handler: AsyncHandler): void;
261
+
262
+ function ok(): Ok {
263
+ return new Ok();
264
+ }
265
+
266
+ export function asyncExpression(): void {
267
+ useAsync(async () => ok());
268
+ }
269
+
270
+ export function asyncBlock(): void {
271
+ useAsync(async () => {
272
+ return ok();
273
+ });
274
+ }
275
+ `);
276
+ expect([...csharp.matchAll(/AsyncResult\.From\d\(/g)]).to.have.length(2);
277
+ expect([...csharp.matchAll(/Result\.From\d\(ok\(\)\)/g)]).to.have.length(2);
278
+ expect(csharp).to.include("Task.Run<global::Test.Result>");
279
+ expect(csharp).to.not.match(/return ok\(\);/);
280
+ });
281
+ it("adapts void promises returned through contextual union promise arms", () => {
282
+ const csharp = compileToCSharp(`
283
+ export type JsValue =
284
+ | string
285
+ | number
286
+ | boolean
287
+ | object
288
+ | null
289
+ | undefined;
290
+
291
+ export class Response {
292
+ set(name: string, value: string): Response {
293
+ return this;
294
+ }
295
+ }
296
+
297
+ export type NextFunction = (value?: string | null) => void | Promise<void>;
298
+ export type IgnoredHandlerResult =
299
+ | void
300
+ | JsValue
301
+ | Response
302
+ | Promise<void | JsValue | Response>;
303
+ export type RequestHandler = (
304
+ res: Response,
305
+ next: NextFunction
306
+ ) => IgnoredHandlerResult;
307
+
308
+ declare function use(handler: RequestHandler): void;
309
+
310
+ export function main(): void {
311
+ use((res: Response, next: NextFunction) => {
312
+ res.set("x-middleware", "on");
313
+ return next();
314
+ });
315
+ }
316
+ `);
317
+ expect(csharp).to.match(/IgnoredHandlerResult\.From\d\(global::System\.Threading\.Tasks\.Task\.Run<object\?>\(async/);
318
+ expect(csharp).to.include("var __tsonic_await_task");
319
+ expect(csharp).to.match(/if \(__tsonic_await_task(?:_\d+)? == null\)/);
320
+ expect(csharp).to.match(/await __tsonic_await_task(?:_\d+)?;/);
321
+ expect(csharp).to.include("return default(object?);");
322
+ expect(csharp).to.not.match(/IgnoredHandlerResult\.From\d\(next\(/);
323
+ });
324
+ it("adapts promised concrete arms through contextual union promise arms", () => {
325
+ const csharp = compileToCSharp(`
326
+ export class Ok {}
327
+ export class Err {}
328
+
329
+ export type Result = Ok | Err;
330
+ export type AsyncOutcome = void | Promise<Result>;
331
+
332
+ function accept(value: AsyncOutcome): void {
333
+ }
334
+
335
+ async function okAsync(): Promise<Ok> {
336
+ return new Ok();
337
+ }
338
+
339
+ export function main(): void {
340
+ accept(okAsync());
341
+ }
342
+ `);
343
+ expect(csharp).to.include("accept(global::System.Threading.Tasks.Task.Run<global::Test.Result>(async");
344
+ expect(csharp).to.match(/var __tsonic_await_value(?:_\d+)? = await okAsync\(\);/);
345
+ expect(csharp).to.match(/return global::Test\.Result\.From\d\(__tsonic_await_value(?:_\d+)?\);/);
346
+ expect(csharp).to.not.include("accept(okAsync());");
347
+ });
348
+ it("passes declared locals to out parameters without discard lowering", () => {
349
+ const csharp = compileToCSharp(`
350
+ import type { int, out } from "@tsonic/core/types.js";
351
+
352
+ declare class Parser {
353
+ static TryParse(text: string, result: out<int>): boolean;
354
+ }
355
+
356
+ export function parse(text: string): int {
357
+ let parsed: int = 0;
358
+ if (Parser.TryParse(text, parsed as out<int>)) {
359
+ return parsed;
360
+ }
361
+ return -1;
362
+ }
363
+ `);
364
+ expect(csharp).to.include("Parser.TryParse(text, out parsed)");
365
+ expect(csharp).to.not.include("__tsonic_out_discard");
366
+ });
367
+ it("preserves CLR overload out parameter modes for Int32.TryParse", () => {
368
+ const csharp = compileToCSharp(`
369
+ import { Int32 } from "@tsonic/dotnet/System.js";
370
+ import type { int, out } from "@tsonic/core/types.js";
371
+
372
+ export function parseId(text: string): int {
373
+ let parsed: int = 0;
374
+ if (Int32.TryParse(text, parsed as out<int>)) {
375
+ return parsed;
376
+ }
377
+ return -1;
378
+ }
379
+ `);
380
+ expect(csharp).to.include("Int32.TryParse(text, out parsed)");
381
+ expect(csharp).to.not.include("Int32.TryParse(text, parsed)");
382
+ });
383
+ it("supports Record<string,T> reads, writes, and for-in key enumeration", () => {
384
+ const csharp = compileToCSharp(`
385
+ import type { int } from "@tsonic/core/types.js";
386
+
387
+ export function tally(metrics: Record<string, int>): int {
388
+ metrics["started"] = 1;
389
+ let total: int = 0;
390
+ for (const key in metrics) {
391
+ total = total + metrics[key];
392
+ }
393
+ return total;
394
+ }
395
+ `);
396
+ expect(csharp).to.include('metrics["started"] = 1');
397
+ expect(csharp).to.include("foreach (var key in metrics.Keys)");
398
+ expect(csharp).to.include("total = total + metrics[key]");
399
+ });
400
+ it("narrows closed structural unions with property-existence checks", () => {
401
+ const csharp = compileToCSharp(`
402
+ type AuthOk = { property_id: string };
403
+ type AuthError = { error: Promise<void> };
404
+
405
+ export function readPropertyId(auth: AuthOk | AuthError): string {
406
+ if ("error" in auth) {
407
+ return "denied";
408
+ }
409
+ return auth.property_id;
410
+ }
411
+ `);
412
+ expect(csharp).to.match(/auth\.Is\d+\(\)/);
413
+ expect(csharp).to.include(".property_id");
414
+ });
415
+ it("preserves string typeof narrowing through member access", () => {
416
+ const csharp = compileToCSharp(`
417
+ export function hasText(value: string | number | undefined): boolean {
418
+ if (typeof value === "string") {
419
+ return value.length > 0;
420
+ }
421
+ return false;
422
+ }
423
+ `, "/test/test.ts", { surface: "@tsonic/js" });
424
+ expect(csharp).to.include(".Length > 0");
425
+ expect(csharp).to.not.include("((string)value).Length");
426
+ });
427
+ it("lowers function length over function-type runtime-union arms without reflection", () => {
428
+ const csharp = compileToCSharp(`
429
+ type NextFunction = () => void;
430
+ interface Request {}
431
+ interface Response {}
432
+ type RequestHandler = (
433
+ req: Request,
434
+ res: Response,
435
+ next: NextFunction
436
+ ) => void;
437
+ type ErrorRequestHandler = (
438
+ error: Error,
439
+ req: Request,
440
+ res: Response,
441
+ next: NextFunction
442
+ ) => void;
443
+
444
+ export function isErrorHandler(
445
+ handler: RequestHandler | ErrorRequestHandler
446
+ ): boolean {
447
+ return handler.length >= 4;
448
+ }
449
+ `, "/test/test.ts", { surface: "@tsonic/js" });
450
+ expect(csharp).to.include(".Match<int>(");
451
+ expect(csharp).to.include("=> 3");
452
+ expect(csharp).to.include("=> 4");
453
+ expect(csharp).to.not.include("handler.length");
454
+ expect(csharp).to.not.include("GetParameters");
455
+ });
456
+ it("lowers Number(...) over CLR numeric values through explicit numeric conversion", () => {
457
+ const csharp = compileToCSharp(`
458
+ import type { long } from "@tsonic/core/types.js";
459
+
460
+ declare class FileInfo {
461
+ Length: long;
462
+ }
463
+
464
+ export function size(info: FileInfo): number {
465
+ return Number(info.Length);
466
+ }
467
+ `, "/test/test.ts", { surface: "@tsonic/js" });
468
+ expect(csharp).to.include("(double)info.Length");
469
+ expect(csharp).to.not.include("Number(info.Length)");
470
+ });
471
+ it("infers generic constructor type arguments from constructor arguments", () => {
472
+ const csharp = compileToCSharp(`
473
+ class IntervalAsyncIterator<T> {
474
+ value: T;
475
+ constructor(value: T) {
476
+ this.value = value;
477
+ }
478
+ }
479
+
480
+ export function create(value: string): IntervalAsyncIterator<string> {
481
+ return new IntervalAsyncIterator(value);
482
+ }
483
+ `);
484
+ expect(csharp).to.include("new IntervalAsyncIterator<string>(value)");
485
+ });
486
+ it("emits readonly constructor-assigned fields as immutable C# members", () => {
487
+ const csharp = compileToCSharp(`
488
+ export class Segment {
489
+ readonly text: string;
490
+
491
+ constructor(text: string) {
492
+ this.text = text;
493
+ }
494
+ }
495
+ `);
496
+ expect(csharp).to.match(/readonly\s+string\s+text|private readonly string _text|public string text \{ get; init; \}/);
497
+ });
498
+ it("emits private static helpers and preserves private call sites", () => {
499
+ const csharp = compileToCSharp(`
500
+ export class Glob {
501
+ private static match(text: string): boolean {
502
+ return text.length > 0;
503
+ }
504
+
505
+ static test(text: string): boolean {
506
+ return Glob.match(text);
507
+ }
508
+ }
509
+ `, "/test/test.ts", { surface: "@tsonic/js" });
510
+ expect(csharp).to.include("private static bool match(string text)");
511
+ expect(csharp).to.include("return Glob.match(text);");
512
+ });
513
+ it("lowers dynamic JSON.parse to the JsValue runtime carrier", () => {
514
+ const csharp = compileToCSharp(`
515
+ import type { int, JsValue } from "@tsonic/core/types.js";
516
+
517
+ const isObject = (value: JsValue): value is Record<string, JsValue> => {
518
+ return value !== null && typeof value === "object" && !Array.isArray(value);
519
+ };
520
+
521
+ export function countMenuItems(text: string): int {
522
+ const root = JSON.parse(text);
523
+ if (!isObject(root)) return -1;
524
+
525
+ const entries = Object.entries(root);
526
+ for (let i = 0; i < entries.length; i++) {
527
+ const [key, value] = entries[i]!;
528
+ if (key === "menu" && Array.isArray(value)) {
529
+ const items = value as JsValue[];
530
+ return items.length;
531
+ }
532
+ }
533
+
534
+ return 0;
535
+ }
536
+ `, "/test/test.ts", { surface: "@tsonic/js" });
537
+ expect(csharp).to.include("global::Tsonic.Runtime.JSON.parse<object>(text)");
538
+ expect(csharp).to.include("value is global::System.Array");
539
+ expect(csharp).to.not.include("JsonSerializer.Deserialize<object>");
540
+ });
541
+ it("lowers typed Array length construction to native CLR arrays", () => {
542
+ const csharp = compileToCSharp(`
543
+ import type { char, int } from "@tsonic/core/types.js";
544
+
545
+ export function toChars(source: string): char[] {
546
+ const chars = new Array<char>(source.length);
547
+ for (let i: int = 0; i < source.length; i++) {
548
+ chars[i] = source[i]!;
549
+ }
550
+ return chars;
551
+ }
552
+ `, "/test/test.ts", { surface: "@tsonic/js" });
553
+ expect(csharp).to.include("var chars = new char[source.Length];");
554
+ expect(csharp).to.include("chars[i] = source[i];");
555
+ expect(csharp).to.not.include("new global::js.Array<char>");
556
+ });
557
+ it("lowers typed empty Array construction to native CLR arrays", () => {
558
+ const csharp = compileToCSharp(`
559
+ export function countLarge(): number {
560
+ const values = new Array<number>();
561
+ values.push(1, 2, 3, 4);
562
+ return values.filter((value) => value > 2).length;
563
+ }
564
+ `, "/test/test.ts", { surface: "@tsonic/js" });
565
+ expect(csharp).to.include("var values = new double[0];");
566
+ expect(csharp).to.include("global::Tsonic.Internal.ArrayInterop.WrapArray(values)");
567
+ expect(csharp).to.not.include("new global::js.Array<double>");
568
+ });
569
+ it("passes source-backed structural aliases through null guards without anonymous rematerialization", () => {
570
+ const csharp = compileToCSharp(`
571
+ type KeyRecord = { property_id: string; kind: string };
572
+
573
+ declare function lookupKey(token: string): Promise<KeyRecord | undefined>;
574
+ declare function handleIngestBody(key: KeyRecord): Promise<void>;
575
+
576
+ export async function handleIngest(token: string): Promise<void> {
577
+ const key = await lookupKey(token);
578
+ if (!key || key.kind !== "write") {
579
+ return;
580
+ }
581
+
582
+ await handleIngestBody(key);
583
+ }
584
+ `);
585
+ expect(csharp).to.include("await handleIngestBody(key)");
586
+ expect(csharp).to.not.include("__Anon_");
587
+ expect(csharp).to.not.include("(__Anon_");
588
+ });
589
+ it("preserves awaited source-backed structural aliases from imported modules", () => {
590
+ const csharp = compileProjectToCSharp({
591
+ "package.json": JSON.stringify({
592
+ name: "emitter-test-project",
593
+ version: "1.0.0",
594
+ type: "module",
595
+ }),
596
+ "src/db/clickmeter-db.ts": `
597
+ export type ApiKeyKind = "write" | "read";
598
+ export type KeyRecord = {
599
+ readonly property_id: string;
600
+ readonly kind: ApiKeyKind;
601
+ };
602
+
603
+ export class ClickmeterDb {
604
+ async lookupKey(_token: string): Promise<KeyRecord | undefined> {
605
+ return { property_id: "property", kind: "write" };
606
+ }
607
+ }
608
+ `,
609
+ "src/server/handlers/handle-ingest.ts": `
610
+ import type { KeyRecord } from "../../db/clickmeter-db.ts";
611
+ import { ClickmeterDb } from "../../db/clickmeter-db.ts";
612
+
613
+ const handleIngestBody = async (key: KeyRecord): Promise<void> => {
614
+ if (key.kind !== "write") return;
615
+ };
616
+
617
+ export const handleIngest = async (db: ClickmeterDb, token: string): Promise<void> => {
618
+ const key = await db.lookupKey(token);
619
+ if (!key || key.kind !== "write") {
620
+ return;
621
+ }
622
+
623
+ await handleIngestBody(key);
624
+ };
625
+ `,
626
+ }, "src/server/handlers/handle-ingest.ts", {}, { sourceRootRelativePath: "src", rootNamespace: "Clickmeter.Server" });
627
+ expect(csharp).to.include("await handleIngestBody(key);");
628
+ expect(csharp).to.not.include("await handleIngestBody(((global::System.Func");
629
+ expect(csharp).to.not.include("var __struct = (global::Clickmeter.Server.__Anon_");
630
+ });
631
+ it("keeps JS source-package coercion helpers isolated from downstream type names", () => {
632
+ const csharp = compileToCSharp(`
633
+ export class StringValue {}
634
+
635
+ export function logText(text: string): void {
636
+ console.log(text);
637
+ }
638
+ `, "/test/test.ts", { surface: "@tsonic/js" });
639
+ expect(csharp).to.include("global::js.Globals.String(values[i])");
640
+ expect(csharp).to.not.include("(global::Test.StringValue)values[i]");
641
+ });
642
+ it("projects optional value-type parameters after terminating nullish guards", () => {
643
+ const csharp = compileToCSharp(`
644
+ import type { int } from "@tsonic/core/types.js";
645
+
646
+ declare function consume(value: int): int;
647
+
648
+ export function read(value?: int): int {
649
+ if (value === undefined) {
650
+ return -1;
651
+ }
652
+
653
+ return consume(value);
654
+ }
655
+ `);
656
+ expect(csharp).to.include("return consume(value.Value);");
657
+ expect(csharp).to.not.include("return consume(value);");
658
+ });
659
+ it("projects optional value-type parameters inside narrowed ternary branches", () => {
660
+ const csharp = compileToCSharp(`
661
+ import type { int } from "@tsonic/core/types.js";
662
+
663
+ declare function consume(value: int): int;
664
+
665
+ export function read(value?: int): int {
666
+ return value === undefined ? -1 : consume(value);
667
+ }
668
+ `);
669
+ expect(csharp).to.include("consume(value.Value)");
670
+ expect(csharp).to.not.include("consume(value)");
671
+ });
672
+ it("materializes concrete reference returns into declared runtime unions", () => {
673
+ const csharp = compileToCSharp(`
674
+ export class Bytes {}
675
+
676
+ export function encode(bytes: Bytes, encoding?: string): string | Bytes {
677
+ if (encoding === undefined) {
678
+ return bytes;
679
+ }
680
+
681
+ return encoding;
682
+ }
683
+ `);
684
+ expect(csharp).to.match(/return global::Tsonic\.Internal\.(?:Union|Union2_[A-F0-9]+)<string, global::Test\.Bytes>\.From2\((?:\(global::Test\.Bytes\))?bytes\);/);
685
+ expect(csharp).to.not.include("return bytes;");
686
+ });
687
+ it("materializes first-arm concrete reference returns into declared runtime unions", () => {
688
+ const csharp = compileToCSharp(`
689
+ export function encode(bytes: Uint8Array, encoding?: string): Uint8Array | string {
690
+ if (encoding === undefined) {
691
+ return bytes;
692
+ }
693
+
694
+ return encoding;
695
+ }
696
+ `, "/test/test.ts", { surface: "@tsonic/js" });
697
+ expect(csharp).to.match(/return global::Tsonic\.Internal\.(?:Union|Union2_[A-F0-9]+)<global::js\.Uint8Array, string>\.From1\(bytes\);/);
698
+ expect(csharp).to.not.include("return bytes;");
699
+ });
700
+ it("uses broad storage typeof checks for recursive rest callback values", () => {
701
+ const csharp = compileToCSharp(`
702
+ type RuntimeObject = object;
703
+ type RuntimeArray = RuntimeValue[];
704
+ type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
705
+ type EventListener = (...args: RuntimeValue[]) => void;
706
+
707
+ declare class EventEmitter {
708
+ prependOnceListener(eventName: string, listener: EventListener): EventEmitter;
709
+ emit(eventName: string, ...args: RuntimeValue[]): boolean;
710
+ }
711
+
712
+ export function run(emitter: EventEmitter): number {
713
+ let received = 0;
714
+ emitter.prependOnceListener("test", (value: RuntimeValue) => {
715
+ if (typeof value === "number") {
716
+ received = value;
717
+ }
718
+ });
719
+ emitter.emit("test", 42);
720
+ return received;
721
+ }
722
+ `);
723
+ expect(csharp).to.include("object? value = __unused_args[0];");
724
+ expect(csharp).to.include("if ((value is double || value is int))");
725
+ expect(csharp).to.include("received = (int)(value switch");
726
+ expect(csharp).to.not.match(/\bvalue\.Is\d+\(\)/);
727
+ });
728
+ it("allows broad runtime-value Array.isArray checks when returned as booleans", () => {
729
+ const csharp = compileToCSharp(`
730
+ type RuntimeObject = object;
731
+ type RuntimeArray = RuntimeValue[];
732
+ type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
733
+
734
+ export function isArrayValue(value: RuntimeValue): boolean {
735
+ return Array.isArray(value);
736
+ }
737
+ `, "/test/test.ts", { surface: "@tsonic/js" });
738
+ expect(csharp).to.include("return value is global::System.Array;");
739
+ });
740
+ it("omits invalid object constraints for broad runtime-value generic bounds", () => {
741
+ const csharp = compileToCSharp(`
742
+ type RuntimeObject = object;
743
+ type RuntimeArray = RuntimeValue[];
744
+ type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
745
+
746
+ export class TimersPromises {
747
+ async setImmediate<T extends RuntimeValue>(value?: T): Promise<T | undefined> {
748
+ return value;
749
+ }
750
+ }
751
+ `);
752
+ expect(csharp).to.match(/setImmediate<T>\(T\? value = default\)/);
753
+ expect(csharp).to.not.match(/where\s+T\s*:\s*object\b/);
754
+ expect(csharp).to.not.match(/where\s+T\s*:\s*global::System\.Object\b/);
755
+ });
756
+ it("materializes union array arms into broad recursive runtime-value arrays", () => {
757
+ const csharp = compileToCSharp(`
758
+ import type { int } from "@tsonic/core/types.js";
759
+
760
+ type RuntimeObject = object;
761
+ type RuntimeArray = RuntimeValue[];
762
+ type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
763
+
764
+ class RecordWithTtl {
765
+ address: string = "";
766
+ ttl: int = 0;
767
+ }
768
+
769
+ export function count(result: Array<RecordWithTtl> | Array<string>): number {
770
+ const values = result as Array<RuntimeValue>;
771
+ return values.length;
772
+ }
773
+ `, "/test/test.ts", { surface: "@tsonic/js" });
774
+ expect(csharp).to.include("result.Match<object?[]>");
775
+ expect(csharp).to.include("global::System.Linq.Enumerable.Select");
776
+ expect(csharp).to.not.include("Cannot materialize runtime union arrayType to arrayType");
777
+ });
778
+ it("applies all conjunctive instanceof narrowings in branch bodies", () => {
779
+ const csharp = compileToCSharp(`
780
+ type RuntimeArray = RuntimeValue[];
781
+ type RuntimeValue = string | number | boolean | RuntimeArray | object | null | undefined;
782
+
783
+ const areUint8ArraysEqual = (left: Uint8Array, right: Uint8Array): boolean => {
784
+ return left.length === right.length;
785
+ };
786
+
787
+ export const areDeepEqual = (left: RuntimeValue, right: RuntimeValue): boolean => {
788
+ if (typeof left !== "object" || typeof right !== "object") {
789
+ return false;
790
+ }
791
+
792
+ if (left instanceof Uint8Array && right instanceof Uint8Array) {
793
+ return areUint8ArraysEqual(left, right);
794
+ }
795
+
796
+ return false;
797
+ };
798
+ `, "/test/test.ts", { surface: "@tsonic/nodejs" });
799
+ expect(csharp).to.match(/areUint8ArraysEqual\((?:\(global::js\.Uint8Array\))?left, \(global::js\.Uint8Array\)right\)/);
800
+ expect(csharp).to.not.include("areUint8ArraysEqual(left, right)");
801
+ });
802
+ it("preserves explicit subclass casts in conditional expressions", () => {
803
+ const csharp = compileToCSharp(`
804
+ export class JsonValue {
805
+ kind: string;
806
+
807
+ constructor(kind: string) {
808
+ this.kind = kind;
809
+ }
810
+ }
811
+
812
+ export class JsonArray extends JsonValue {
813
+ items: JsonValue[];
814
+
815
+ constructor(items: JsonValue[]) {
816
+ super("array");
817
+ this.items = items;
818
+ }
819
+ }
820
+
821
+ export class JsonObject extends JsonValue {
822
+ items: JsonValue[];
823
+
824
+ constructor(items: JsonValue[]) {
825
+ super("object");
826
+ this.items = items;
827
+ }
828
+ }
829
+
830
+ export const jsonArray = (value: JsonValue | undefined): JsonArray | undefined =>
831
+ value instanceof JsonArray ? (value as JsonArray) : undefined;
832
+
833
+ export const jsonObject = (value: JsonValue | undefined): JsonObject | undefined =>
834
+ value instanceof JsonObject ? (value as JsonObject) : undefined;
835
+ `, "/test/test.ts", { surface: "@tsonic/nodejs" });
836
+ expect(csharp).to.include("return value is JsonArray ? (JsonArray)value : default(JsonArray);");
837
+ expect(csharp).to.not.include("return value is JsonArray ? value : default(JsonArray);");
838
+ expect(csharp).to.include("return value is JsonObject ? (JsonObject)value : default(JsonObject);");
839
+ expect(csharp).to.not.include("return value is JsonObject ? value : default(JsonObject);");
840
+ });
841
+ it("widens mutable integer-initialized locals to JS numbers outside canonical loops", () => {
842
+ const csharp = compileToCSharp(`
843
+ export function pickLength(totalLength?: number): number {
844
+ let len = 0;
845
+ if (totalLength !== undefined) {
846
+ len = totalLength;
847
+ }
848
+ return len;
849
+ }
850
+ `, "/test/test.ts", { surface: "@tsonic/js" });
851
+ expect(csharp).to.include("double len = 0;");
852
+ expect(csharp).to.include("len = totalLength.Value;");
853
+ expect(csharp).to.not.include("var len = 0;");
854
+ });
855
+ it("keeps nullish-assigned nullable member checks on the nullable storage slot", () => {
856
+ const csharp = compileToCSharp(`
857
+ import type { int } from "@tsonic/core/types.js";
858
+
859
+ export class ProcessModule {
860
+ get exitCode(): int | undefined {
861
+ return undefined;
862
+ }
863
+
864
+ set exitCode(value: int | undefined) {}
865
+ }
866
+
867
+ export const process = new ProcessModule();
868
+
869
+ export function resetAndCheck(): boolean {
870
+ process.exitCode = undefined;
871
+ return process.exitCode === undefined;
872
+ }
873
+ `, "/test/test.ts", { surface: "@tsonic/nodejs" });
874
+ expect(csharp).to.include("process.exitCode = default(int?);");
875
+ expect(csharp).to.include("return process.exitCode == null;");
876
+ expect(csharp).to.not.include("process.exitCode.Value == null");
877
+ });
878
+ it("keeps canonical for-loop counters integral after mutable numeric widening", () => {
879
+ const csharp = compileToCSharp(`
880
+ export function sum(values: number[]): number {
881
+ for (let i = 0; i < values.length; i++) {
882
+ if (values[i]! > 10) {
883
+ return i;
884
+ }
885
+ }
886
+ return -1;
887
+ }
888
+ `, "/test/test.ts", { surface: "@tsonic/js" });
889
+ expect(csharp).to.include("for (int i = 0;");
890
+ expect(csharp).to.include("return i;");
891
+ expect(csharp).to.not.include("for (double i = 0;");
892
+ });
893
+ });
894
+ //# sourceMappingURL=may14-downstream-contracts.test.js.map