@soundscript/soundscript 0.1.12 → 0.1.15

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 (441) hide show
  1. package/package.json +15 -6
  2. package/project-transform/index.js +2 -0
  3. package/project-transform/index.ts +8 -0
  4. package/project-transform/src/annotation_syntax.js +948 -0
  5. package/project-transform/src/annotation_syntax.ts +1217 -0
  6. package/project-transform/src/build_package.js +475 -0
  7. package/project-transform/src/build_package.ts +683 -0
  8. package/project-transform/src/bundled/portable-web-globals.d.ts +153 -0
  9. package/project-transform/src/bundled/runtime_externs.js +220 -0
  10. package/project-transform/src/bundled/runtime_externs.ts +237 -0
  11. package/project-transform/src/bundled/sound-libs/lib.decorators.d.ts +385 -0
  12. package/project-transform/src/bundled/sound-libs/lib.decorators.legacy.d.ts +22 -0
  13. package/project-transform/src/bundled/sound-libs/lib.dom.asynciterable.d.ts +42 -0
  14. package/project-transform/src/bundled/sound-libs/lib.dom.d.ts +39440 -0
  15. package/project-transform/src/bundled/sound-libs/lib.es2015.collection.d.ts +149 -0
  16. package/project-transform/src/bundled/sound-libs/lib.es2015.core.d.ts +657 -0
  17. package/project-transform/src/bundled/sound-libs/lib.es2015.d.ts +28 -0
  18. package/project-transform/src/bundled/sound-libs/lib.es2015.generator.d.ts +77 -0
  19. package/project-transform/src/bundled/sound-libs/lib.es2015.iterable.d.ts +616 -0
  20. package/project-transform/src/bundled/sound-libs/lib.es2015.promise.d.ts +80 -0
  21. package/project-transform/src/bundled/sound-libs/lib.es2015.proxy.d.ts +128 -0
  22. package/project-transform/src/bundled/sound-libs/lib.es2015.reflect.d.ts +144 -0
  23. package/project-transform/src/bundled/sound-libs/lib.es2015.symbol.d.ts +46 -0
  24. package/project-transform/src/bundled/sound-libs/lib.es2015.symbol.wellknown.d.ts +170 -0
  25. package/project-transform/src/bundled/sound-libs/lib.es2016.array.include.d.ts +116 -0
  26. package/project-transform/src/bundled/sound-libs/lib.es2016.d.ts +21 -0
  27. package/project-transform/src/bundled/sound-libs/lib.es2017.arraybuffer.d.ts +21 -0
  28. package/project-transform/src/bundled/sound-libs/lib.es2017.d.ts +26 -0
  29. package/project-transform/src/bundled/sound-libs/lib.es2017.date.d.ts +31 -0
  30. package/project-transform/src/bundled/sound-libs/lib.es2017.object.d.ts +49 -0
  31. package/project-transform/src/bundled/sound-libs/lib.es2017.string.d.ts +45 -0
  32. package/project-transform/src/bundled/sound-libs/lib.es2017.typedarrays.d.ts +53 -0
  33. package/project-transform/src/bundled/sound-libs/lib.es2018.asyncgenerator.d.ts +77 -0
  34. package/project-transform/src/bundled/sound-libs/lib.es2018.asynciterable.d.ts +57 -0
  35. package/project-transform/src/bundled/sound-libs/lib.es2018.d.ts +24 -0
  36. package/project-transform/src/bundled/sound-libs/lib.es2018.promise.d.ts +30 -0
  37. package/project-transform/src/bundled/sound-libs/lib.es2018.regexp.d.ts +37 -0
  38. package/project-transform/src/bundled/sound-libs/lib.es2019.array.d.ts +79 -0
  39. package/project-transform/src/bundled/sound-libs/lib.es2019.d.ts +24 -0
  40. package/project-transform/src/bundled/sound-libs/lib.es2019.object.d.ts +47 -0
  41. package/project-transform/src/bundled/sound-libs/lib.es2019.string.d.ts +37 -0
  42. package/project-transform/src/bundled/sound-libs/lib.es2019.symbol.d.ts +24 -0
  43. package/project-transform/src/bundled/sound-libs/lib.es2020.bigint.d.ts +765 -0
  44. package/project-transform/src/bundled/sound-libs/lib.es2020.d.ts +27 -0
  45. package/project-transform/src/bundled/sound-libs/lib.es2020.date.d.ts +42 -0
  46. package/project-transform/src/bundled/sound-libs/lib.es2020.number.d.ts +28 -0
  47. package/project-transform/src/bundled/sound-libs/lib.es2020.promise.d.ts +49 -0
  48. package/project-transform/src/bundled/sound-libs/lib.es2020.string.d.ts +44 -0
  49. package/project-transform/src/bundled/sound-libs/lib.es2020.symbol.wellknown.d.ts +41 -0
  50. package/project-transform/src/bundled/sound-libs/lib.es2021.d.ts +23 -0
  51. package/project-transform/src/bundled/sound-libs/lib.es2021.promise.d.ts +48 -0
  52. package/project-transform/src/bundled/sound-libs/lib.es2021.string.d.ts +33 -0
  53. package/project-transform/src/bundled/sound-libs/lib.es2021.weakref.d.ts +78 -0
  54. package/project-transform/src/bundled/sound-libs/lib.es2022.array.d.ts +121 -0
  55. package/project-transform/src/bundled/sound-libs/lib.es2022.d.ts +25 -0
  56. package/project-transform/src/bundled/sound-libs/lib.es2022.error.d.ts +75 -0
  57. package/project-transform/src/bundled/sound-libs/lib.es2022.object.d.ts +26 -0
  58. package/project-transform/src/bundled/sound-libs/lib.es2022.regexp.d.ts +39 -0
  59. package/project-transform/src/bundled/sound-libs/lib.es2022.string.d.ts +25 -0
  60. package/project-transform/src/bundled/sound-libs/lib.es2023.array.d.ts +924 -0
  61. package/project-transform/src/bundled/sound-libs/lib.es2023.collection.d.ts +21 -0
  62. package/project-transform/src/bundled/sound-libs/lib.es2023.d.ts +22 -0
  63. package/project-transform/src/bundled/sound-libs/lib.es2024.arraybuffer.d.ts +65 -0
  64. package/project-transform/src/bundled/sound-libs/lib.es2024.collection.d.ts +29 -0
  65. package/project-transform/src/bundled/sound-libs/lib.es2024.d.ts +26 -0
  66. package/project-transform/src/bundled/sound-libs/lib.es2024.object.d.ts +33 -0
  67. package/project-transform/src/bundled/sound-libs/lib.es2024.promise.d.ts +35 -0
  68. package/project-transform/src/bundled/sound-libs/lib.es2024.regexp.d.ts +25 -0
  69. package/project-transform/src/bundled/sound-libs/lib.es2024.string.d.ts +29 -0
  70. package/project-transform/src/bundled/sound-libs/lib.es5.d.ts +4924 -0
  71. package/project-transform/src/bundled/sound_stdlib.js +142 -0
  72. package/project-transform/src/bundled/sound_stdlib.ts +180 -0
  73. package/project-transform/src/checker/analyze_project.js +1361 -0
  74. package/project-transform/src/checker/analyze_project.ts +2246 -0
  75. package/project-transform/src/checker/diagnostics.js +112 -0
  76. package/project-transform/src/checker/diagnostics.ts +222 -0
  77. package/project-transform/src/checker/engine/context.js +235 -0
  78. package/project-transform/src/checker/engine/context.ts +340 -0
  79. package/project-transform/src/checker/engine/diagnostic_codes.js +72 -0
  80. package/project-transform/src/checker/engine/diagnostic_codes.ts +95 -0
  81. package/project-transform/src/checker/engine/facts.js +35 -0
  82. package/project-transform/src/checker/engine/facts.ts +48 -0
  83. package/project-transform/src/checker/engine/types.js +1 -0
  84. package/project-transform/src/checker/engine/types.ts +485 -0
  85. package/project-transform/src/checker/proof_escape_hatch_diagnostics.js +104 -0
  86. package/project-transform/src/checker/proof_escape_hatch_diagnostics.ts +173 -0
  87. package/project-transform/src/checker/rules/async_surface.js +231 -0
  88. package/project-transform/src/checker/rules/async_surface.ts +335 -0
  89. package/project-transform/src/checker/rules/class_lifecycle.js +798 -0
  90. package/project-transform/src/checker/rules/class_lifecycle.ts +1276 -0
  91. package/project-transform/src/checker/rules/directive_validation.js +571 -0
  92. package/project-transform/src/checker/rules/directive_validation.ts +938 -0
  93. package/project-transform/src/checker/rules/directives.js +23 -0
  94. package/project-transform/src/checker/rules/directives.ts +25 -0
  95. package/project-transform/src/checker/rules/flow.js +202 -0
  96. package/project-transform/src/checker/rules/flow.ts +333 -0
  97. package/project-transform/src/checker/rules/flow_facts.js +601 -0
  98. package/project-transform/src/checker/rules/flow_facts.ts +978 -0
  99. package/project-transform/src/checker/rules/flow_invalidation.js +1119 -0
  100. package/project-transform/src/checker/rules/flow_invalidation.ts +2150 -0
  101. package/project-transform/src/checker/rules/flow_shared.js +2822 -0
  102. package/project-transform/src/checker/rules/flow_shared.ts +4383 -0
  103. package/project-transform/src/checker/rules/foreign_boundary.js +120 -0
  104. package/project-transform/src/checker/rules/foreign_boundary.ts +196 -0
  105. package/project-transform/src/checker/rules/foreign_projection.js +279 -0
  106. package/project-transform/src/checker/rules/foreign_projection.ts +425 -0
  107. package/project-transform/src/checker/rules/generated_helpers.js +13 -0
  108. package/project-transform/src/checker/rules/generated_helpers.ts +18 -0
  109. package/project-transform/src/checker/rules/index.js +35 -0
  110. package/project-transform/src/checker/rules/index.ts +49 -0
  111. package/project-transform/src/checker/rules/namespace_object.js +845 -0
  112. package/project-transform/src/checker/rules/namespace_object.ts +1224 -0
  113. package/project-transform/src/checker/rules/non_ordinary_recovery.js +1328 -0
  114. package/project-transform/src/checker/rules/non_ordinary_recovery.ts +2391 -0
  115. package/project-transform/src/checker/rules/null_prototype.js +3 -0
  116. package/project-transform/src/checker/rules/null_prototype.ts +6 -0
  117. package/project-transform/src/checker/rules/overloads.js +181 -0
  118. package/project-transform/src/checker/rules/overloads.ts +317 -0
  119. package/project-transform/src/checker/rules/predicate_verification.js +691 -0
  120. package/project-transform/src/checker/rules/predicate_verification.ts +1088 -0
  121. package/project-transform/src/checker/rules/prototype_hardening.js +237 -0
  122. package/project-transform/src/checker/rules/prototype_hardening.ts +343 -0
  123. package/project-transform/src/checker/rules/receiver_discipline.js +263 -0
  124. package/project-transform/src/checker/rules/receiver_discipline.ts +356 -0
  125. package/project-transform/src/checker/rules/relations.js +6861 -0
  126. package/project-transform/src/checker/rules/relations.ts +12158 -0
  127. package/project-transform/src/checker/rules/resolved_builtins.js +274 -0
  128. package/project-transform/src/checker/rules/resolved_builtins.ts +438 -0
  129. package/project-transform/src/checker/rules/trust.js +217 -0
  130. package/project-transform/src/checker/rules/trust.ts +301 -0
  131. package/project-transform/src/checker/rules/type_guards.js +173 -0
  132. package/project-transform/src/checker/rules/type_guards.ts +257 -0
  133. package/project-transform/src/checker/rules/universal.js +17 -0
  134. package/project-transform/src/checker/rules/universal.ts +22 -0
  135. package/project-transform/src/checker/rules/unsafe_value_origin.js +80 -0
  136. package/project-transform/src/checker/rules/unsafe_value_origin.ts +125 -0
  137. package/project-transform/src/checker/rules/unsound_imports.js +218 -0
  138. package/project-transform/src/checker/rules/unsound_imports.ts +301 -0
  139. package/project-transform/src/checker/rules/unsound_syntax.js +1695 -0
  140. package/project-transform/src/checker/rules/unsound_syntax.ts +2540 -0
  141. package/project-transform/src/checker/rules/value_types.js +206 -0
  142. package/project-transform/src/checker/rules/value_types.ts +407 -0
  143. package/project-transform/src/checker/timing.js +43 -0
  144. package/project-transform/src/checker/timing.ts +78 -0
  145. package/project-transform/src/checker/unsupported_feature_messages.js +337 -0
  146. package/project-transform/src/checker/unsupported_feature_messages.ts +531 -0
  147. package/project-transform/src/cli.js +892 -0
  148. package/project-transform/src/cli.ts +1476 -0
  149. package/project-transform/src/compiler/compile_project.js +319 -0
  150. package/project-transform/src/compiler/compile_project.ts +508 -0
  151. package/project-transform/src/compiler/errors.js +10 -0
  152. package/project-transform/src/compiler/errors.ts +29 -0
  153. package/project-transform/src/compiler/ir.js +1 -0
  154. package/project-transform/src/compiler/ir.ts +1526 -0
  155. package/project-transform/src/compiler/lower.js +30550 -0
  156. package/project-transform/src/compiler/lower.ts +43645 -0
  157. package/project-transform/src/compiler/lower_arrays.js +140 -0
  158. package/project-transform/src/compiler/lower_arrays.ts +190 -0
  159. package/project-transform/src/compiler/lower_strings.js +121 -0
  160. package/project-transform/src/compiler/lower_strings.ts +198 -0
  161. package/project-transform/src/compiler/lower_tagged.js +329 -0
  162. package/project-transform/src/compiler/lower_tagged.ts +427 -0
  163. package/project-transform/src/compiler/lower_views.js +171 -0
  164. package/project-transform/src/compiler/lower_views.ts +251 -0
  165. package/project-transform/src/compiler/object_keys.js +25 -0
  166. package/project-transform/src/compiler/object_keys.ts +35 -0
  167. package/project-transform/src/compiler/runtime_ir.js +30 -0
  168. package/project-transform/src/compiler/runtime_ir.ts +727 -0
  169. package/project-transform/src/compiler/tagged_boundary.js +18 -0
  170. package/project-transform/src/compiler/tagged_boundary.ts +37 -0
  171. package/project-transform/src/compiler/toolchain.js +170 -0
  172. package/project-transform/src/compiler/toolchain.ts +229 -0
  173. package/project-transform/src/compiler/unicode_case_data.js +2102 -0
  174. package/project-transform/src/compiler/unicode_case_data.ts +2112 -0
  175. package/project-transform/src/compiler/wasm_js_host_runtime.js +656 -0
  176. package/project-transform/src/compiler/wasm_js_host_runtime.ts +762 -0
  177. package/project-transform/src/compiler/wat_arrays.js +3132 -0
  178. package/project-transform/src/compiler/wat_arrays.ts +3768 -0
  179. package/project-transform/src/compiler/wat_emitter.js +17952 -0
  180. package/project-transform/src/compiler/wat_emitter.ts +22812 -0
  181. package/project-transform/src/compiler/wat_strings.js +129 -0
  182. package/project-transform/src/compiler/wat_strings.ts +187 -0
  183. package/project-transform/src/compiler/wat_tagged.js +548 -0
  184. package/project-transform/src/compiler/wat_tagged.ts +674 -0
  185. package/project-transform/src/compiler_generator_runner.js +153 -0
  186. package/project-transform/src/compiler_generator_runner.ts +171 -0
  187. package/project-transform/src/compiler_object_test_helpers.js +69 -0
  188. package/project-transform/src/compiler_object_test_helpers.ts +96 -0
  189. package/project-transform/src/compiler_promise_runner.js +2116 -0
  190. package/project-transform/src/compiler_promise_runner.ts +2184 -0
  191. package/project-transform/src/compiler_test_helpers.js +854 -0
  192. package/project-transform/src/compiler_test_helpers.ts +1087 -0
  193. package/project-transform/src/config.js +568 -0
  194. package/project-transform/src/config.ts +892 -0
  195. package/project-transform/src/diagnostic_metadata.js +67 -0
  196. package/project-transform/src/diagnostic_metadata.ts +99 -0
  197. package/project-transform/src/diagnostic_reference.js +1368 -0
  198. package/project-transform/src/diagnostic_reference.ts +1523 -0
  199. package/project-transform/src/editor_diagnostics_worker.js +176 -0
  200. package/project-transform/src/editor_diagnostics_worker.ts +250 -0
  201. package/project-transform/src/editor_projection.js +224 -0
  202. package/project-transform/src/editor_projection.ts +421 -0
  203. package/project-transform/src/frontend/builtin_expanded_program_test_cleanup.js +47 -0
  204. package/project-transform/src/frontend/builtin_expanded_program_test_cleanup.ts +72 -0
  205. package/project-transform/src/frontend/builtin_macro_support.js +842 -0
  206. package/project-transform/src/frontend/builtin_macro_support.ts +1386 -0
  207. package/project-transform/src/frontend/builtin_macros.js +409 -0
  208. package/project-transform/src/frontend/builtin_macros.ts +542 -0
  209. package/project-transform/src/frontend/component_poc_runtime.js +279 -0
  210. package/project-transform/src/frontend/component_poc_runtime.ts +372 -0
  211. package/project-transform/src/frontend/css_macro.js +148 -0
  212. package/project-transform/src/frontend/css_macro.ts +222 -0
  213. package/project-transform/src/frontend/derive_macros.js +2072 -0
  214. package/project-transform/src/frontend/derive_macros.ts +3188 -0
  215. package/project-transform/src/frontend/embedded_fragment_support.js +106 -0
  216. package/project-transform/src/frontend/embedded_fragment_support.ts +172 -0
  217. package/project-transform/src/frontend/error_normalization.js +403 -0
  218. package/project-transform/src/frontend/error_normalization.ts +832 -0
  219. package/project-transform/src/frontend/error_stdlib_support.js +1 -0
  220. package/project-transform/src/frontend/error_stdlib_support.ts +6 -0
  221. package/project-transform/src/frontend/expand_project.js +169 -0
  222. package/project-transform/src/frontend/expand_project.ts +248 -0
  223. package/project-transform/src/frontend/format_soundscript.js +297 -0
  224. package/project-transform/src/frontend/format_soundscript.ts +582 -0
  225. package/project-transform/src/frontend/graphql_macro.js +174 -0
  226. package/project-transform/src/frontend/graphql_macro.ts +253 -0
  227. package/project-transform/src/frontend/hash_context.js +83 -0
  228. package/project-transform/src/frontend/hash_context.ts +113 -0
  229. package/project-transform/src/frontend/hkt_macro.js +448 -0
  230. package/project-transform/src/frontend/hkt_macro.ts +897 -0
  231. package/project-transform/src/frontend/import_binding_usage.js +190 -0
  232. package/project-transform/src/frontend/import_binding_usage.ts +277 -0
  233. package/project-transform/src/frontend/macro_advanced_backend_adapter.js +58 -0
  234. package/project-transform/src/frontend/macro_advanced_backend_adapter.ts +123 -0
  235. package/project-transform/src/frontend/macro_advanced_context.js +826 -0
  236. package/project-transform/src/frontend/macro_advanced_context.ts +1102 -0
  237. package/project-transform/src/frontend/macro_advanced_output.js +21 -0
  238. package/project-transform/src/frontend/macro_advanced_output.ts +41 -0
  239. package/project-transform/src/frontend/macro_api.js +353 -0
  240. package/project-transform/src/frontend/macro_api.ts +1722 -0
  241. package/project-transform/src/frontend/macro_api_internal.js +35 -0
  242. package/project-transform/src/frontend/macro_api_internal.ts +80 -0
  243. package/project-transform/src/frontend/macro_api_module_support.js +39 -0
  244. package/project-transform/src/frontend/macro_api_module_support.ts +65 -0
  245. package/project-transform/src/frontend/macro_backend_adapter.js +272 -0
  246. package/project-transform/src/frontend/macro_backend_adapter.ts +420 -0
  247. package/project-transform/src/frontend/macro_context.js +816 -0
  248. package/project-transform/src/frontend/macro_context.ts +1105 -0
  249. package/project-transform/src/frontend/macro_debug.js +99 -0
  250. package/project-transform/src/frontend/macro_debug.ts +157 -0
  251. package/project-transform/src/frontend/macro_definition_support.js +28 -0
  252. package/project-transform/src/frontend/macro_definition_support.ts +73 -0
  253. package/project-transform/src/frontend/macro_errors.js +40 -0
  254. package/project-transform/src/frontend/macro_errors.ts +70 -0
  255. package/project-transform/src/frontend/macro_expander.js +919 -0
  256. package/project-transform/src/frontend/macro_expander.ts +1611 -0
  257. package/project-transform/src/frontend/macro_factory_support.js +176 -0
  258. package/project-transform/src/frontend/macro_factory_support.ts +263 -0
  259. package/project-transform/src/frontend/macro_host_ast_internal.js +64 -0
  260. package/project-transform/src/frontend/macro_host_ast_internal.ts +109 -0
  261. package/project-transform/src/frontend/macro_index.js +27 -0
  262. package/project-transform/src/frontend/macro_index.ts +50 -0
  263. package/project-transform/src/frontend/macro_loader.js +281 -0
  264. package/project-transform/src/frontend/macro_loader.ts +506 -0
  265. package/project-transform/src/frontend/macro_operand_semantics.js +838 -0
  266. package/project-transform/src/frontend/macro_operand_semantics.ts +1489 -0
  267. package/project-transform/src/frontend/macro_output.js +54 -0
  268. package/project-transform/src/frontend/macro_output.ts +123 -0
  269. package/project-transform/src/frontend/macro_parser.js +611 -0
  270. package/project-transform/src/frontend/macro_parser.ts +832 -0
  271. package/project-transform/src/frontend/macro_resolver.js +69 -0
  272. package/project-transform/src/frontend/macro_resolver.ts +125 -0
  273. package/project-transform/src/frontend/macro_rewrite.js +285 -0
  274. package/project-transform/src/frontend/macro_rewrite.ts +442 -0
  275. package/project-transform/src/frontend/macro_runtime_support.js +232 -0
  276. package/project-transform/src/frontend/macro_runtime_support.ts +324 -0
  277. package/project-transform/src/frontend/macro_scanner.js +393 -0
  278. package/project-transform/src/frontend/macro_scanner.ts +455 -0
  279. package/project-transform/src/frontend/macro_semantic_backend_adapter.js +87 -0
  280. package/project-transform/src/frontend/macro_semantic_backend_adapter.ts +166 -0
  281. package/project-transform/src/frontend/macro_semantic_context.js +5 -0
  282. package/project-transform/src/frontend/macro_semantic_context.ts +12 -0
  283. package/project-transform/src/frontend/macro_semantic_output.js +24 -0
  284. package/project-transform/src/frontend/macro_semantic_output.ts +47 -0
  285. package/project-transform/src/frontend/macro_semantic_types.js +1 -0
  286. package/project-transform/src/frontend/macro_semantic_types.ts +98 -0
  287. package/project-transform/src/frontend/macro_semantics.js +1172 -0
  288. package/project-transform/src/frontend/macro_semantics.ts +1502 -0
  289. package/project-transform/src/frontend/macro_site_kind_support.js +164 -0
  290. package/project-transform/src/frontend/macro_site_kind_support.ts +255 -0
  291. package/project-transform/src/frontend/macro_syntax_internal.js +1950 -0
  292. package/project-transform/src/frontend/macro_syntax_internal.ts +3338 -0
  293. package/project-transform/src/frontend/macro_templates.js +57 -0
  294. package/project-transform/src/frontend/macro_templates.ts +143 -0
  295. package/project-transform/src/frontend/macro_test_helpers.js +82 -0
  296. package/project-transform/src/frontend/macro_test_helpers.ts +136 -0
  297. package/project-transform/src/frontend/macro_types.js +1 -0
  298. package/project-transform/src/frontend/macro_types.ts +103 -0
  299. package/project-transform/src/frontend/macro_vm.js +39 -0
  300. package/project-transform/src/frontend/macro_vm.ts +113 -0
  301. package/project-transform/src/frontend/match_macro.js +885 -0
  302. package/project-transform/src/frontend/match_macro.ts +1220 -0
  303. package/project-transform/src/frontend/numeric_normalization.js +824 -0
  304. package/project-transform/src/frontend/numeric_normalization.ts +1380 -0
  305. package/project-transform/src/frontend/numeric_prelude.js +278 -0
  306. package/project-transform/src/frontend/numeric_prelude.ts +370 -0
  307. package/project-transform/src/frontend/project_frontend.js +2396 -0
  308. package/project-transform/src/frontend/project_frontend.ts +3776 -0
  309. package/project-transform/src/frontend/project_macro_support.js +1401 -0
  310. package/project-transform/src/frontend/project_macro_support.ts +2137 -0
  311. package/project-transform/src/frontend/sql_macro.js +175 -0
  312. package/project-transform/src/frontend/sql_macro.ts +254 -0
  313. package/project-transform/src/frontend/sql_stdlib_support.js +1 -0
  314. package/project-transform/src/frontend/sql_stdlib_support.ts +6 -0
  315. package/project-transform/src/frontend/std_package_support.js +228 -0
  316. package/project-transform/src/frontend/std_package_support.ts +400 -0
  317. package/project-transform/src/frontend/value_normalization.js +306 -0
  318. package/project-transform/src/frontend/value_normalization.ts +599 -0
  319. package/project-transform/src/lsp/project_service.js +4771 -0
  320. package/project-transform/src/lsp/project_service.ts +7580 -0
  321. package/project-transform/src/lsp/protocol.js +9 -0
  322. package/project-transform/src/lsp/protocol.ts +38 -0
  323. package/project-transform/src/lsp/server.js +355 -0
  324. package/project-transform/src/lsp/server.ts +671 -0
  325. package/project-transform/src/lsp/session.js +49 -0
  326. package/project-transform/src/lsp/session.ts +48 -0
  327. package/project-transform/src/lsp/timing.js +43 -0
  328. package/project-transform/src/lsp/timing.ts +76 -0
  329. package/project-transform/src/lsp/transport.js +205 -0
  330. package/project-transform/src/lsp/transport.ts +253 -0
  331. package/project-transform/src/lsp_main.js +5 -0
  332. package/project-transform/src/lsp_main.ts +7 -0
  333. package/project-transform/src/macros.d.ts +1 -0
  334. package/project-transform/src/macros.js +1 -0
  335. package/project-transform/src/macros.ts +1 -0
  336. package/project-transform/src/main.js +24 -0
  337. package/project-transform/src/main.ts +28 -0
  338. package/project-transform/src/platform/host.js +264 -0
  339. package/project-transform/src/platform/host.ts +343 -0
  340. package/project-transform/src/platform/path.js +8 -0
  341. package/project-transform/src/platform/path.ts +20 -0
  342. package/project-transform/src/public_macro_api/macro_api.d.ts +1054 -0
  343. package/project-transform/src/public_macro_api/macro_semantic_types.d.ts +66 -0
  344. package/project-transform/src/public_macro_api/macro_types.d.ts +70 -0
  345. package/project-transform/src/run_program.js +14 -0
  346. package/project-transform/src/run_program.ts +33 -0
  347. package/project-transform/src/runtime/materialize.js +371 -0
  348. package/project-transform/src/runtime/materialize.ts +502 -0
  349. package/project-transform/src/runtime/on_demand.js +203 -0
  350. package/project-transform/src/runtime/on_demand.ts +305 -0
  351. package/project-transform/src/runtime/source_maps.js +205 -0
  352. package/project-transform/src/runtime/source_maps.ts +297 -0
  353. package/project-transform/src/runtime/transform.js +148 -0
  354. package/project-transform/src/runtime/transform.ts +295 -0
  355. package/project-transform/src/service/types.js +1 -0
  356. package/project-transform/src/service/types.ts +22 -0
  357. package/project-transform/src/soundscript_packages.js +477 -0
  358. package/project-transform/src/soundscript_packages.ts +754 -0
  359. package/project-transform/src/soundscript_runtime_specifiers.js +88 -0
  360. package/project-transform/src/soundscript_runtime_specifiers.ts +96 -0
  361. package/project-transform/src/stdlib/async.d.ts +81 -0
  362. package/project-transform/src/stdlib/async.js +213 -0
  363. package/project-transform/src/stdlib/async.ts +315 -0
  364. package/project-transform/src/stdlib/codec.d.ts +32 -0
  365. package/project-transform/src/stdlib/codec.js +30 -0
  366. package/project-transform/src/stdlib/codec.ts +76 -0
  367. package/project-transform/src/stdlib/compare.d.ts +28 -0
  368. package/project-transform/src/stdlib/compare.js +115 -0
  369. package/project-transform/src/stdlib/compare.ts +151 -0
  370. package/project-transform/src/stdlib/css.d.ts +16 -0
  371. package/project-transform/src/stdlib/css.js +9 -0
  372. package/project-transform/src/stdlib/css.ts +28 -0
  373. package/project-transform/src/stdlib/debug.d.ts +2 -0
  374. package/project-transform/src/stdlib/debug.js +9 -0
  375. package/project-transform/src/stdlib/debug.ts +10 -0
  376. package/project-transform/src/stdlib/decode.d.ts +86 -0
  377. package/project-transform/src/stdlib/decode.js +254 -0
  378. package/project-transform/src/stdlib/decode.ts +390 -0
  379. package/project-transform/src/stdlib/derive.d.ts +6 -0
  380. package/project-transform/src/stdlib/derive.js +7 -0
  381. package/project-transform/src/stdlib/derive.ts +7 -0
  382. package/project-transform/src/stdlib/encode.d.ts +100 -0
  383. package/project-transform/src/stdlib/encode.js +130 -0
  384. package/project-transform/src/stdlib/encode.ts +259 -0
  385. package/project-transform/src/stdlib/failures.d.ts +23 -0
  386. package/project-transform/src/stdlib/failures.js +41 -0
  387. package/project-transform/src/stdlib/failures.ts +64 -0
  388. package/project-transform/src/stdlib/fetch.d.ts +67 -0
  389. package/project-transform/src/stdlib/fetch.js +5 -0
  390. package/project-transform/src/stdlib/fetch.ts +11 -0
  391. package/project-transform/src/stdlib/graphql.d.ts +16 -0
  392. package/project-transform/src/stdlib/graphql.js +9 -0
  393. package/project-transform/src/stdlib/graphql.ts +28 -0
  394. package/project-transform/src/stdlib/hash.d.ts +34 -0
  395. package/project-transform/src/stdlib/hash.js +110 -0
  396. package/project-transform/src/stdlib/hash.ts +188 -0
  397. package/project-transform/src/stdlib/hkt.d.ts +40 -0
  398. package/project-transform/src/stdlib/hkt.js +3 -0
  399. package/project-transform/src/stdlib/hkt.ts +41 -0
  400. package/project-transform/src/stdlib/index.d.ts +9 -0
  401. package/project-transform/src/stdlib/index.js +15 -0
  402. package/project-transform/src/stdlib/index.ts +23 -0
  403. package/project-transform/src/stdlib/json.d.ts +125 -0
  404. package/project-transform/src/stdlib/json.js +764 -0
  405. package/project-transform/src/stdlib/json.ts +1034 -0
  406. package/project-transform/src/stdlib/match.d.ts +11 -0
  407. package/project-transform/src/stdlib/match.js +13 -0
  408. package/project-transform/src/stdlib/match.ts +26 -0
  409. package/project-transform/src/stdlib/numerics.d.ts +523 -0
  410. package/project-transform/src/stdlib/numerics.js +1356 -0
  411. package/project-transform/src/stdlib/numerics.ts +1937 -0
  412. package/project-transform/src/stdlib/random.d.ts +19 -0
  413. package/project-transform/src/stdlib/random.js +3 -0
  414. package/project-transform/src/stdlib/random.ts +5 -0
  415. package/project-transform/src/stdlib/result.d.ts +68 -0
  416. package/project-transform/src/stdlib/result.js +139 -0
  417. package/project-transform/src/stdlib/result.ts +248 -0
  418. package/project-transform/src/stdlib/sql.d.ts +22 -0
  419. package/project-transform/src/stdlib/sql.js +23 -0
  420. package/project-transform/src/stdlib/sql.ts +53 -0
  421. package/project-transform/src/stdlib/text.d.ts +24 -0
  422. package/project-transform/src/stdlib/text.js +3 -0
  423. package/project-transform/src/stdlib/text.ts +4 -0
  424. package/project-transform/src/stdlib/thunk.d.ts +2 -0
  425. package/project-transform/src/stdlib/thunk.js +9 -0
  426. package/project-transform/src/stdlib/thunk.ts +15 -0
  427. package/project-transform/src/stdlib/typeclasses.d.ts +57 -0
  428. package/project-transform/src/stdlib/typeclasses.js +78 -0
  429. package/project-transform/src/stdlib/typeclasses.ts +173 -0
  430. package/project-transform/src/stdlib/url.d.ts +37 -0
  431. package/project-transform/src/stdlib/url.js +3 -0
  432. package/project-transform/src/stdlib/url.ts +4 -0
  433. package/project-transform/src/stdlib/value.d.ts +9 -0
  434. package/project-transform/src/stdlib/value.js +104 -0
  435. package/project-transform/src/stdlib/value.ts +133 -0
  436. package/project-transform/src/test_installed_stdlib.js +147 -0
  437. package/project-transform/src/test_installed_stdlib.ts +245 -0
  438. package/project-transform/src/test_macro_package_fixture.js +50 -0
  439. package/project-transform/src/test_macro_package_fixture.ts +68 -0
  440. package/project-transform/src/value_deep_safe.js +191 -0
  441. package/project-transform/src/value_deep_safe.ts +273 -0
@@ -0,0 +1,485 @@
1
+ import ts from 'typescript';
2
+ import type { AnnotationLookup, ParsedAnnotationArgument } from '../../annotation_syntax.ts';
3
+ import type { RuntimeContext } from '../../config.ts';
4
+ export type {
5
+ AnnotationLookup,
6
+ ParsedAnnotation,
7
+ ParsedAnnotationBlock,
8
+ ParsedAnnotationComment,
9
+ ParsedAnnotationEntry,
10
+ ParsedAnnotationParseError,
11
+ ParsedTypeScriptPragma,
12
+ } from '../../annotation_syntax.ts';
13
+
14
+ export type AnalysisFactKind =
15
+ | 'symbolProvenance'
16
+ | 'foreignProjection'
17
+ | 'mutability'
18
+ | 'alias'
19
+ | 'effectSummary'
20
+ | 'flowBranchStructure'
21
+ | 'flowChildRegionStructure'
22
+ | 'flowConditionStructure'
23
+ | 'flowInvalidationStructure'
24
+ | 'flowRegionStructure'
25
+ | 'flowStatementStructure'
26
+ | 'namespaceResolver'
27
+ | 'namespaceShape'
28
+ | 'narrowing'
29
+ | 'nonOrdinaryRecovery'
30
+ | 'predicateVerificationTarget'
31
+ | 'unsafeValueOrigin';
32
+
33
+ export type ProvenanceReason =
34
+ | 'annotated'
35
+ | 'declaration'
36
+ | 'directive'
37
+ | 'imported'
38
+ | 'inferred';
39
+
40
+ export interface SymbolProvenanceFact {
41
+ symbolId: number;
42
+ trusted: boolean;
43
+ importedFrom?: string;
44
+ reason: ProvenanceReason;
45
+ }
46
+
47
+ export type ForeignProjectionKind = 'namespaceImport' | 'none' | 'projectedUnknown';
48
+
49
+ export interface ForeignProjectionFact {
50
+ projection: ForeignProjectionKind;
51
+ symbolId: number;
52
+ }
53
+
54
+ export type MutabilityClassification = 'mutable' | 'readonly' | 'unknown';
55
+
56
+ export interface MutabilityFact {
57
+ nodeId?: number;
58
+ symbolId?: number;
59
+ classification: MutabilityClassification;
60
+ reason: string;
61
+ }
62
+
63
+ export type AliasRelationshipKind = 'destructure' | 'direct' | 'parameter' | 'return' | 'spread';
64
+
65
+ export interface AliasRelationshipFact {
66
+ sourceId: number;
67
+ targetId: number;
68
+ kind: AliasRelationshipKind;
69
+ }
70
+
71
+ export type EffectKind =
72
+ | 'await'
73
+ | 'callback'
74
+ | 'exception'
75
+ | 'mutation'
76
+ | 'none'
77
+ | 'unknown'
78
+ | 'yield';
79
+
80
+ export interface EffectSummaryFact {
81
+ nodeId: number;
82
+ kind: EffectKind;
83
+ invalidatesNarrowing: boolean;
84
+ reason: string;
85
+ }
86
+
87
+ export type NarrowingInvalidationReason =
88
+ | 'assignment'
89
+ | 'await'
90
+ | 'call'
91
+ | 'callback'
92
+ | 'exception'
93
+ | 'unknown'
94
+ | 'yield';
95
+
96
+ export interface NarrowingFact {
97
+ nodeId: number;
98
+ symbolId: number;
99
+ active: boolean;
100
+ reason: NarrowingInvalidationReason;
101
+ }
102
+
103
+ export type UnsafeValueOriginKind = 'moduleNamespace' | 'unsoundImport';
104
+
105
+ export interface UnsafeValueOriginFact {
106
+ kind: UnsafeValueOriginKind;
107
+ sourceNode: ts.Node;
108
+ stickyAliasable: boolean;
109
+ }
110
+
111
+ export interface NonOrdinaryRecoveryFact {
112
+ family?: ExportedNonOrdinaryFamily;
113
+ }
114
+
115
+ export interface NamespacePropertyPathSegment {
116
+ kind: 'property';
117
+ name: string;
118
+ }
119
+
120
+ export interface NamespaceIndexPathSegment {
121
+ index: number;
122
+ kind: 'index';
123
+ }
124
+
125
+ export type NamespacePathSegment = NamespaceIndexPathSegment | NamespacePropertyPathSegment;
126
+
127
+ export interface NamespacePathFact {
128
+ guard?: 'fulfilled';
129
+ path: readonly NamespacePathSegment[];
130
+ }
131
+
132
+ export interface NamespaceShapeFact {
133
+ origin: 'dynamicImport' | 'require' | 'resolver' | 'staticImport';
134
+ paths: readonly NamespacePathFact[];
135
+ }
136
+
137
+ export interface NamespaceResolverFact {
138
+ ambiguous: boolean;
139
+ origin: 'dynamicImport' | 'resolver';
140
+ paths: readonly NamespacePathFact[];
141
+ }
142
+
143
+ export type FlowConditionSyntaxFactKind =
144
+ | 'assertionCall'
145
+ | 'discriminantLiteral'
146
+ | 'inProperty'
147
+ | 'instanceof'
148
+ | 'nonNull'
149
+ | 'predicateCall'
150
+ | 'truthy'
151
+ | 'typeof';
152
+
153
+ export type FlowConditionSyntaxFact =
154
+ | {
155
+ kind:
156
+ | 'assertionCall'
157
+ | 'discriminantLiteral'
158
+ | 'instanceof'
159
+ | 'nonNull'
160
+ | 'predicateCall'
161
+ | 'truthy'
162
+ | 'typeof';
163
+ polarity: 'negative' | 'positive';
164
+ sourceNode: ts.Node;
165
+ subjectExpression: ts.Expression;
166
+ }
167
+ | {
168
+ kind: 'inProperty';
169
+ polarity: 'negative' | 'positive';
170
+ propertySegment: string;
171
+ sourceNode: ts.Node;
172
+ subjectExpression: ts.Expression;
173
+ };
174
+
175
+ export type FlowConditionStructureFact =
176
+ | {
177
+ kind: 'and';
178
+ left: FlowConditionStructureFact;
179
+ right: FlowConditionStructureFact;
180
+ rightExpression: ts.Expression;
181
+ }
182
+ | {
183
+ kind: 'facts';
184
+ facts: readonly FlowConditionSyntaxFact[];
185
+ }
186
+ | {
187
+ kind: 'none';
188
+ };
189
+
190
+ export type FlowExitKind = 'break' | 'continue' | 'returnThrow';
191
+
192
+ export type FlowStatementStructureFact =
193
+ | {
194
+ caseConditions: readonly (FlowConditionStructureFact | undefined)[];
195
+ exitKinds: readonly FlowExitKind[];
196
+ isSwitchTrue: boolean;
197
+ kind: 'switch';
198
+ }
199
+ | {
200
+ condition: FlowConditionStructureFact;
201
+ exitKinds: readonly FlowExitKind[];
202
+ kind: 'expressionCall';
203
+ }
204
+ | {
205
+ condition: FlowConditionStructureFact;
206
+ elseExitKinds: readonly FlowExitKind[];
207
+ exitKinds: readonly FlowExitKind[];
208
+ kind: 'if';
209
+ thenExitKinds: readonly FlowExitKind[];
210
+ }
211
+ | {
212
+ condition?: FlowConditionStructureFact;
213
+ exitKinds: readonly FlowExitKind[];
214
+ kind: 'loop';
215
+ }
216
+ | {
217
+ catchExitKinds: readonly FlowExitKind[];
218
+ exitKinds: readonly FlowExitKind[];
219
+ hasCatch: boolean;
220
+ kind: 'try';
221
+ tryTerminalConditions: readonly FlowConditionStructureFact[];
222
+ }
223
+ | {
224
+ exitKinds: readonly FlowExitKind[];
225
+ kind: 'other';
226
+ };
227
+
228
+ export interface FlowRegionEntryStructureFact {
229
+ sequentialConditions: readonly FlowConditionStructureFact[];
230
+ statement: ts.Statement;
231
+ }
232
+
233
+ export interface FlowRegionStructureFact {
234
+ entries: readonly FlowRegionEntryStructureFact[];
235
+ terminalConditions: readonly FlowConditionStructureFact[];
236
+ }
237
+
238
+ export interface FlowBranchEntryStructureFact {
239
+ entryConditions: readonly FlowConditionStructureFact[];
240
+ regionNode: ts.Node;
241
+ statements: readonly ts.Statement[];
242
+ }
243
+
244
+ export interface FlowBranchStructureFact {
245
+ entries: readonly FlowBranchEntryStructureFact[];
246
+ }
247
+
248
+ export interface FlowChildRegionStructureEntryFact {
249
+ entryConditions: readonly FlowConditionStructureFact[];
250
+ regionNode: ts.Node;
251
+ statements: readonly ts.Statement[];
252
+ treatBreakAsExit: boolean;
253
+ treatContinueAsExit: boolean;
254
+ }
255
+
256
+ export interface FlowChildRegionStructureFact {
257
+ entries: readonly FlowChildRegionStructureEntryFact[];
258
+ }
259
+
260
+ export type FlowInvalidationCandidateFact =
261
+ | {
262
+ kind: 'access';
263
+ node: ts.ElementAccessExpression | ts.Identifier | ts.PropertyAccessExpression;
264
+ }
265
+ | {
266
+ kind: 'assignment';
267
+ left: ts.Expression;
268
+ node: ts.BinaryExpression;
269
+ right: ts.Expression;
270
+ }
271
+ | {
272
+ kind: 'awaitYield';
273
+ node: ts.AwaitExpression | ts.YieldExpression;
274
+ }
275
+ | {
276
+ kind: 'call';
277
+ node: ts.CallExpression;
278
+ }
279
+ | {
280
+ kind: 'delete';
281
+ expression: ts.Expression;
282
+ node: ts.DeleteExpression;
283
+ }
284
+ | {
285
+ kind: 'functionLike';
286
+ node: ts.FunctionLikeDeclaration & { body: ts.ConciseBody };
287
+ }
288
+ | {
289
+ kind: 'new';
290
+ node: ts.NewExpression;
291
+ }
292
+ | {
293
+ kind: 'shorthandProperty';
294
+ node: ts.ShorthandPropertyAssignment;
295
+ }
296
+ | {
297
+ kind: 'update';
298
+ node: ts.PostfixUnaryExpression | ts.PrefixUnaryExpression;
299
+ operand: ts.Expression;
300
+ };
301
+
302
+ export interface FlowInvalidationStructureFact {
303
+ candidates: readonly FlowInvalidationCandidateFact[];
304
+ }
305
+
306
+ export type PredicateSupportedTarget =
307
+ | { kind: 'instanceof'; constructorSymbol?: ts.Symbol }
308
+ | { kind: 'nonNullObject' }
309
+ | { kind: 'primitive'; primitive: 'bigint' | 'boolean' | 'number' | 'string' | 'symbol' }
310
+ | { kind: 'unionOfSupported'; options: readonly PredicateSupportedTarget[] };
311
+
312
+ export type PredicateVerificationTargetFact =
313
+ | {
314
+ kind: 'supported';
315
+ subject: 'parameter';
316
+ target: PredicateSupportedTarget;
317
+ }
318
+ | {
319
+ kind: 'unsupported';
320
+ reason:
321
+ | 'assertsCondition'
322
+ | 'receiverPredicate'
323
+ | 'unsupportedTarget'
324
+ | 'unsupportedParameterName';
325
+ subject: 'parameter' | 'receiver';
326
+ };
327
+
328
+ export type ExportedNonOrdinaryFamily =
329
+ | 'moduleNamespace'
330
+ | 'nullPrototype';
331
+
332
+ export interface ExportedNonOrdinaryFact {
333
+ family: ExportedNonOrdinaryFamily;
334
+ }
335
+
336
+ export type ExportSummaryRecoveryPathSegment =
337
+ | { kind: 'index'; index: number }
338
+ | { kind: 'property'; name: string };
339
+
340
+ export interface ExportValueSummary {
341
+ kind: 'value';
342
+ fact: ExportedNonOrdinaryFact;
343
+ }
344
+
345
+ export interface ExportCallableDirectReturnSummary {
346
+ fact: ExportedNonOrdinaryFact;
347
+ kind: 'callableDirectReturn';
348
+ }
349
+
350
+ export interface ExportCallableReturnedParameterSummary {
351
+ kind: 'callableReturnedParameter';
352
+ parameterIndex: number;
353
+ }
354
+
355
+ export interface ExportCallableHelperWrapperEntry {
356
+ parameterIndex: number;
357
+ recoveryPath: readonly ExportSummaryRecoveryPathSegment[];
358
+ }
359
+
360
+ export interface ExportCallableHelperWrapperSummary {
361
+ entries: readonly ExportCallableHelperWrapperEntry[];
362
+ kind: 'callableHelperWrapper';
363
+ }
364
+
365
+ export type ExportSummary =
366
+ | ExportCallableDirectReturnSummary
367
+ | ExportCallableHelperWrapperSummary
368
+ | ExportCallableReturnedParameterSummary
369
+ | ExportValueSummary;
370
+
371
+ export type AnalysisFactValue =
372
+ | AliasRelationshipFact
373
+ | EffectSummaryFact
374
+ | ForeignProjectionFact
375
+ | FlowBranchStructureFact
376
+ | FlowChildRegionStructureFact
377
+ | FlowConditionStructureFact
378
+ | FlowInvalidationStructureFact
379
+ | FlowRegionStructureFact
380
+ | FlowStatementStructureFact
381
+ | MutabilityFact
382
+ | NamespaceResolverFact
383
+ | NamespaceShapeFact
384
+ | NonOrdinaryRecoveryFact
385
+ | NarrowingFact
386
+ | PredicateVerificationTargetFact
387
+ | SymbolProvenanceFact
388
+ | UnsafeValueOriginFact;
389
+
390
+ export interface AnalysisFactQueries {
391
+ getAliasRelationship(
392
+ source: ts.Node | ts.Symbol,
393
+ target: ts.Node | ts.Symbol,
394
+ compute: () => AliasRelationshipFact,
395
+ ): AliasRelationshipFact;
396
+ getEffectSummary(node: ts.Node, compute: () => EffectSummaryFact): EffectSummaryFact;
397
+ getFlowBranchStructure(
398
+ node: ts.Statement,
399
+ compute: () => FlowBranchStructureFact,
400
+ ): FlowBranchStructureFact;
401
+ getFlowChildRegionStructure(
402
+ node: ts.Statement,
403
+ compute: () => FlowChildRegionStructureFact,
404
+ ): FlowChildRegionStructureFact;
405
+ getFlowConditionStructure(
406
+ node: ts.Expression,
407
+ compute: () => FlowConditionStructureFact,
408
+ ): FlowConditionStructureFact;
409
+ getFlowInvalidationStructure(
410
+ node: ts.Node,
411
+ optionsKey: string,
412
+ compute: () => FlowInvalidationStructureFact,
413
+ ): FlowInvalidationStructureFact;
414
+ getFlowStatementStructure(
415
+ node: ts.Statement,
416
+ compute: () => FlowStatementStructureFact,
417
+ ): FlowStatementStructureFact;
418
+ getFlowRegionStructure(
419
+ node: ts.Node,
420
+ optionsKey: string,
421
+ compute: () => FlowRegionStructureFact,
422
+ ): FlowRegionStructureFact;
423
+ getForeignProjection(
424
+ symbol: ts.Symbol,
425
+ compute: () => ForeignProjectionFact,
426
+ ): ForeignProjectionFact;
427
+ getMutability(subject: ts.Node | ts.Symbol, compute: () => MutabilityFact): MutabilityFact;
428
+ getNamespaceResolver(
429
+ node: ts.Node,
430
+ compute: () => NamespaceResolverFact | undefined,
431
+ ): NamespaceResolverFact | undefined;
432
+ getNamespaceShape(
433
+ node: ts.Node,
434
+ compute: () => NamespaceShapeFact | undefined,
435
+ ): NamespaceShapeFact | undefined;
436
+ getNamespaceResolverSymbol(symbol: ts.Symbol): NamespaceResolverFact | undefined;
437
+ getNamespaceShapeSymbol(symbol: ts.Symbol): NamespaceShapeFact | undefined;
438
+ getNarrowing(node: ts.Node, symbol: ts.Symbol, compute: () => NarrowingFact): NarrowingFact;
439
+ getNonOrdinaryRecovery(
440
+ node: ts.Node,
441
+ family: ExportedNonOrdinaryFamily,
442
+ compute: () => NonOrdinaryRecoveryFact,
443
+ ): NonOrdinaryRecoveryFact;
444
+ getPredicateVerificationTarget(
445
+ node: ts.Node,
446
+ compute: () => PredicateVerificationTargetFact | undefined,
447
+ ): PredicateVerificationTargetFact | undefined;
448
+ getUnsafeValueOrigin(symbol: ts.Symbol): UnsafeValueOriginFact | undefined;
449
+ setForeignProjection(symbol: ts.Symbol, fact: ForeignProjectionFact): ForeignProjectionFact;
450
+ setNamespaceResolverSymbol(symbol: ts.Symbol, fact: NamespaceResolverFact): NamespaceResolverFact;
451
+ setNamespaceShapeSymbol(symbol: ts.Symbol, fact: NamespaceShapeFact): NamespaceShapeFact;
452
+ setSymbolProvenance(symbol: ts.Symbol, fact: SymbolProvenanceFact): SymbolProvenanceFact;
453
+ setUnsafeValueOrigin(symbol: ts.Symbol, fact: UnsafeValueOriginFact): UnsafeValueOriginFact;
454
+ getSymbolProvenance(symbol: ts.Symbol, compute: () => SymbolProvenanceFact): SymbolProvenanceFact;
455
+ }
456
+
457
+ export interface ExportSummaryQueries {
458
+ canonicalizeSymbol(symbol: ts.Symbol): ts.Symbol;
459
+ get(symbol: ts.Symbol): ExportSummary | undefined;
460
+ set(symbol: ts.Symbol, summary: ExportSummary): ExportSummary;
461
+ }
462
+
463
+ export interface AnalysisContext {
464
+ readonly checker: ts.TypeChecker;
465
+ readonly exportSummaries: ExportSummaryQueries;
466
+ readonly facts: AnalysisFactQueries;
467
+ isGeneratedNode(node: ts.Node): boolean;
468
+ readonly program: ts.Program;
469
+ readonly runtime: RuntimeContext;
470
+ readonly workingDirectory: string;
471
+ forEachSourceFile(visitor: (sourceFile: ts.SourceFile) => void): void;
472
+ getAnnotationLookup(sourceFile: ts.SourceFile): AnnotationLookup;
473
+ getNodeId(node: ts.Node): number;
474
+ getSourceFiles(): readonly ts.SourceFile[];
475
+ getSymbolId(symbol: ts.Symbol): number;
476
+ traverse(node: ts.Node, visitor: (node: ts.Node) => void): void;
477
+ }
478
+
479
+ export interface CreateAnalysisContextOptions {
480
+ isGeneratedNode?: (node: ts.Node) => boolean;
481
+ includeSourceFile?: (sourceFile: ts.SourceFile) => boolean;
482
+ program: ts.Program;
483
+ runtime?: RuntimeContext;
484
+ workingDirectory: string;
485
+ }
@@ -0,0 +1,104 @@
1
+ import ts from 'typescript';
2
+ import { SOUND_DIAGNOSTIC_CODES, SOUND_DIAGNOSTIC_MESSAGES } from './engine/diagnostic_codes.js';
3
+ import { getNodeDiagnosticRange } from './diagnostics.js';
4
+ const ANY_TYPE_EXAMPLE = 'Replace `any` with `unknown`, then narrow or validate before use, or spell the precise type you expect.';
5
+ const TYPE_ASSERTION_EXAMPLE = 'Replace the assertion with a real runtime check, a validated interop boundary, or a helper that already returns the target type honestly.';
6
+ const NON_NULL_ASSERTION_EXAMPLE = 'Check the value first, or normalize it with a real fallback before using it as present.';
7
+ const DEFINITE_ASSIGNMENT_ASSERTION_EXAMPLE = 'Initialize the declaration directly, widen it to include `undefined`, or move the unchecked assumption to a local `// #[unsafe] let x!: T` site that the backend can still represent honestly.';
8
+ function createDiagnostic(node, code, message, options) {
9
+ return {
10
+ source: 'sound',
11
+ code,
12
+ category: 'error',
13
+ message,
14
+ metadata: options?.metadata,
15
+ notes: options?.notes,
16
+ hint: options?.hint,
17
+ ...getNodeDiagnosticRange(node),
18
+ };
19
+ }
20
+ export function createAnyTypeDiagnostic(node) {
21
+ return createDiagnostic(node, SOUND_DIAGNOSTIC_CODES.anyType, SOUND_DIAGNOSTIC_MESSAGES.anyType, {
22
+ metadata: {
23
+ rule: 'any_type',
24
+ fixability: 'local_rewrite',
25
+ invariant: 'Checked soundscript code must preserve honest type information instead of erasing it to `any`.',
26
+ replacementFamily: 'unknown_plus_validation',
27
+ counterexample: 'Using `any` lets unchecked assumptions flow outward and disables the proof obligations soundscript relies on.',
28
+ example: ANY_TYPE_EXAMPLE,
29
+ },
30
+ notes: [
31
+ '`any` erases the type information that checked soundscript code relies on.',
32
+ `Example: ${ANY_TYPE_EXAMPLE}`,
33
+ ],
34
+ hint: 'Replace `any` with `unknown` plus validation, or write the precise type directly.',
35
+ });
36
+ }
37
+ export function createTypeAssertionDiagnostic(context, node) {
38
+ const expressionType = context.checker.typeToString(context.checker.getTypeAtLocation(node.expression));
39
+ const assertedType = context.checker.typeToString(context.checker.getTypeFromTypeNode(node.type));
40
+ return createDiagnostic(node, SOUND_DIAGNOSTIC_CODES.typeAssertion, SOUND_DIAGNOSTIC_MESSAGES.typeAssertion, {
41
+ metadata: {
42
+ rule: 'unchecked_type_assertion',
43
+ fixability: 'local_rewrite',
44
+ invariant: 'Checked soundscript code must prove the target type instead of asserting it without evidence.',
45
+ replacementFamily: 'control_flow_narrowing_or_boundary_validation',
46
+ evidence: [
47
+ { label: 'expressionType', value: expressionType },
48
+ { label: 'assertedType', value: assertedType },
49
+ ],
50
+ counterexample: 'A type assertion can claim a value has structure or variants that the checker never proved.',
51
+ example: TYPE_ASSERTION_EXAMPLE,
52
+ },
53
+ notes: [
54
+ `This assertion changes the type from '${expressionType}' to '${assertedType}' without a checked proof.`,
55
+ `Example: ${TYPE_ASSERTION_EXAMPLE}`,
56
+ ],
57
+ hint: 'Use narrowing, validation, or an interop boundary instead of asserting the target type.',
58
+ });
59
+ }
60
+ export function createNonNullAssertionDiagnostic(context, node) {
61
+ const expressionType = context.checker.typeToString(context.checker.getTypeAtLocation(node.expression));
62
+ return createDiagnostic(node, SOUND_DIAGNOSTIC_CODES.nonNullAssertion, SOUND_DIAGNOSTIC_MESSAGES.nonNullAssertion, {
63
+ metadata: {
64
+ rule: 'unchecked_non_null_assertion',
65
+ fixability: 'local_rewrite',
66
+ invariant: 'Checked soundscript code must prove that maybe-null values are present before using them as non-null.',
67
+ replacementFamily: 'explicit_null_check',
68
+ evidence: [{ label: 'expressionType', value: expressionType }],
69
+ counterexample: 'A non-null assertion can pretend a maybe-null value is present even though another path still allows `null` or `undefined`.',
70
+ example: NON_NULL_ASSERTION_EXAMPLE,
71
+ },
72
+ notes: [
73
+ `This expression has type '${expressionType}', but \`!\` skips the proof that it is present.`,
74
+ `Example: ${NON_NULL_ASSERTION_EXAMPLE}`,
75
+ ],
76
+ hint: 'Re-check the value or provide an explicit fallback before using it as non-null.',
77
+ });
78
+ }
79
+ export function createDefiniteAssignmentAssertionDiagnostic(context, node) {
80
+ const typeText = node.type
81
+ ? context.checker.typeToString(context.checker.getTypeFromTypeNode(node.type))
82
+ : context.checker.typeToString(context.checker.getTypeAtLocation(node.name));
83
+ const targetText = ts.isIdentifier(node.name) ? node.name.text : node.name.getText();
84
+ const diagnosticNode = node.exclamationToken ?? node.name;
85
+ return createDiagnostic(diagnosticNode, SOUND_DIAGNOSTIC_CODES.definiteAssignmentAssertion, SOUND_DIAGNOSTIC_MESSAGES.definiteAssignmentAssertion, {
86
+ metadata: {
87
+ rule: 'unchecked_definite_assignment_assertion',
88
+ fixability: 'local_rewrite',
89
+ invariant: 'Checked soundscript code must not claim that storage is initialized before the checker can prove that write happened.',
90
+ replacementFamily: 'initializer_or_explicit_optional_state',
91
+ evidence: [
92
+ { label: 'target', value: targetText },
93
+ { label: 'assertedType', value: typeText },
94
+ ],
95
+ counterexample: 'A definite-assignment assertion can let code read an uninitialized local or field as if the promised value already existed.',
96
+ example: DEFINITE_ASSIGNMENT_ASSERTION_EXAMPLE,
97
+ },
98
+ notes: [
99
+ `This declaration claims '${targetText}' is definitely assigned as '${typeText}' without a checked proof.`,
100
+ `Example: ${DEFINITE_ASSIGNMENT_ASSERTION_EXAMPLE}`,
101
+ ],
102
+ hint: 'Add an initializer, widen the type to include absence, or move the unchecked claim to a supported local unsafe site.',
103
+ });
104
+ }