@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,274 @@
1
+ import ts from 'typescript';
2
+ function getNameText(name) {
3
+ if (!name) {
4
+ return undefined;
5
+ }
6
+ if (ts.isIdentifier(name) ||
7
+ ts.isPrivateIdentifier(name) ||
8
+ ts.isStringLiteral(name) ||
9
+ ts.isNumericLiteral(name)) {
10
+ return name.text;
11
+ }
12
+ return undefined;
13
+ }
14
+ function getDeclarationOwnerName(declaration) {
15
+ let current = declaration.parent;
16
+ while (current) {
17
+ if (ts.isInterfaceDeclaration(current) || ts.isClassDeclaration(current) ||
18
+ ts.isModuleDeclaration(current)) {
19
+ return getNameText(current.name);
20
+ }
21
+ if (ts.isVariableDeclaration(current) && ts.isIdentifier(current.name)) {
22
+ return current.name.text;
23
+ }
24
+ current = current.parent;
25
+ }
26
+ return undefined;
27
+ }
28
+ function toResolvedBuiltinSignatureInfo(declaration) {
29
+ if (!declaration || !declaration.getSourceFile().isDeclarationFile) {
30
+ return undefined;
31
+ }
32
+ return {
33
+ declaration,
34
+ memberName: getNameText(declaration.name),
35
+ ownerName: getDeclarationOwnerName(declaration),
36
+ };
37
+ }
38
+ function matchesInfo(info, options) {
39
+ if (options.ownerNames && !options.ownerNames.includes(info.ownerName ?? '')) {
40
+ return false;
41
+ }
42
+ if (options.memberNames && !options.memberNames.includes(info.memberName ?? '')) {
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ function getWrappedCallMemberName(expression) {
48
+ if (ts.isPropertyAccessExpression(expression)) {
49
+ return expression.name.text;
50
+ }
51
+ if (ts.isElementAccessExpression(expression) &&
52
+ ts.isStringLiteralLike(expression.argumentExpression)) {
53
+ return expression.argumentExpression.text;
54
+ }
55
+ return undefined;
56
+ }
57
+ function unwrapParenthesizedExpression(expression) {
58
+ let current = expression;
59
+ while (ts.isParenthesizedExpression(current)) {
60
+ current = current.expression;
61
+ }
62
+ return current;
63
+ }
64
+ function getDirectReturnExpression(node) {
65
+ if (!node.body) {
66
+ return undefined;
67
+ }
68
+ if (!ts.isBlock(node.body)) {
69
+ return node.body;
70
+ }
71
+ if (node.body.statements.length !== 1) {
72
+ return undefined;
73
+ }
74
+ const [statement] = node.body.statements;
75
+ return ts.isReturnStatement(statement) ? statement.expression : undefined;
76
+ }
77
+ function getReturnedParameterIndex(checker, node, expression) {
78
+ const current = unwrapParenthesizedExpression(expression);
79
+ if (!ts.isIdentifier(current)) {
80
+ return undefined;
81
+ }
82
+ const returnedSymbol = checker.getSymbolAtLocation(current);
83
+ if (!returnedSymbol) {
84
+ return undefined;
85
+ }
86
+ for (const [index, parameter] of node.parameters.entries()) {
87
+ if (!ts.isIdentifier(parameter.name)) {
88
+ continue;
89
+ }
90
+ const parameterSymbol = checker.getSymbolAtLocation(parameter.name);
91
+ if (parameterSymbol === returnedSymbol) {
92
+ return index;
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+ function getProjectHelperReturnExpression(checker, expression) {
98
+ if (!ts.isCallExpression(expression)) {
99
+ return undefined;
100
+ }
101
+ const calleeSymbol = checker.getSymbolAtLocation(expression.expression);
102
+ if (!calleeSymbol) {
103
+ return undefined;
104
+ }
105
+ const resolvedSymbol = resolveAliasedSymbol(checker, calleeSymbol);
106
+ for (const declaration of resolvedSymbol.declarations ?? []) {
107
+ if ((ts.isFunctionDeclaration(declaration) ||
108
+ ts.isFunctionExpression(declaration) ||
109
+ ts.isArrowFunction(declaration) ||
110
+ ts.isMethodDeclaration(declaration)) &&
111
+ declaration.body !== undefined &&
112
+ declaration.parameters.length === 0) {
113
+ const returnedExpression = getDirectReturnExpression(declaration);
114
+ if (returnedExpression) {
115
+ return returnedExpression;
116
+ }
117
+ }
118
+ }
119
+ return undefined;
120
+ }
121
+ function getProjectHelperReturnedArgument(checker, expression) {
122
+ if (!ts.isCallExpression(expression)) {
123
+ return undefined;
124
+ }
125
+ const calleeSymbol = checker.getSymbolAtLocation(expression.expression);
126
+ if (!calleeSymbol) {
127
+ return undefined;
128
+ }
129
+ const resolvedSymbol = resolveAliasedSymbol(checker, calleeSymbol);
130
+ for (const declaration of resolvedSymbol.declarations ?? []) {
131
+ if ((ts.isFunctionDeclaration(declaration) ||
132
+ ts.isFunctionExpression(declaration) ||
133
+ ts.isArrowFunction(declaration) ||
134
+ ts.isMethodDeclaration(declaration)) &&
135
+ declaration.body !== undefined) {
136
+ const returnedExpression = getDirectReturnExpression(declaration);
137
+ if (!returnedExpression) {
138
+ continue;
139
+ }
140
+ const returnedParameterIndex = getReturnedParameterIndex(checker, declaration, returnedExpression);
141
+ if (returnedParameterIndex !== undefined) {
142
+ return expression.arguments[returnedParameterIndex];
143
+ }
144
+ }
145
+ }
146
+ return undefined;
147
+ }
148
+ function resolveAliasedSymbol(checker, symbol) {
149
+ let current = symbol;
150
+ while ((current.flags & ts.SymbolFlags.Alias) !== 0) {
151
+ const aliased = checker.getAliasedSymbol(current);
152
+ if (aliased === current) {
153
+ break;
154
+ }
155
+ current = aliased;
156
+ }
157
+ return current;
158
+ }
159
+ function getProjectAliasInitializer(checker, expression) {
160
+ const unwrapped = unwrapParenthesizedExpression(expression);
161
+ const symbol = checker.getSymbolAtLocation(unwrapped);
162
+ if (!symbol) {
163
+ return undefined;
164
+ }
165
+ const resolvedSymbol = resolveAliasedSymbol(checker, symbol);
166
+ for (const declaration of resolvedSymbol.declarations ?? []) {
167
+ if (ts.isVariableDeclaration(declaration) &&
168
+ ts.isIdentifier(declaration.name) &&
169
+ declaration.initializer !== undefined) {
170
+ return declaration.initializer;
171
+ }
172
+ }
173
+ return undefined;
174
+ }
175
+ function getResolvedBuiltinExpression(context, expression) {
176
+ let current = unwrapParenthesizedExpression(expression);
177
+ const seen = new Set();
178
+ while (true) {
179
+ const returnedExpression = getProjectHelperReturnExpression(context.checker, current);
180
+ if (returnedExpression) {
181
+ current = unwrapParenthesizedExpression(returnedExpression);
182
+ continue;
183
+ }
184
+ const returnedArgument = getProjectHelperReturnedArgument(context.checker, current);
185
+ if (returnedArgument) {
186
+ current = unwrapParenthesizedExpression(returnedArgument);
187
+ continue;
188
+ }
189
+ const symbol = context.checker.getSymbolAtLocation(current);
190
+ if (!symbol) {
191
+ return current;
192
+ }
193
+ const resolvedSymbol = resolveAliasedSymbol(context.checker, symbol);
194
+ if (seen.has(resolvedSymbol)) {
195
+ return current;
196
+ }
197
+ seen.add(resolvedSymbol);
198
+ const initializer = getProjectAliasInitializer(context.checker, current);
199
+ if (initializer) {
200
+ current = unwrapParenthesizedExpression(initializer);
201
+ continue;
202
+ }
203
+ return current;
204
+ }
205
+ }
206
+ function isBuiltinGlobalIdentifier(context, expression, builtinName) {
207
+ if (!ts.isIdentifier(expression) || expression.text !== builtinName) {
208
+ return false;
209
+ }
210
+ const symbol = context.checker.getSymbolAtLocation(expression);
211
+ if (!symbol) {
212
+ return false;
213
+ }
214
+ const resolvedSymbol = resolveAliasedSymbol(context.checker, symbol);
215
+ const declarations = resolvedSymbol.declarations ?? [];
216
+ return declarations.length > 0 &&
217
+ declarations.every((declaration) => declaration.getSourceFile().isDeclarationFile);
218
+ }
219
+ function isBuiltinGlobalThisReference(context, expression, builtinName) {
220
+ const isGlobalThisBase = (value) => ts.isIdentifier(value) &&
221
+ value.text === 'globalThis' &&
222
+ (isBuiltinGlobalIdentifier(context, value, 'globalThis') ||
223
+ // TypeScript's globalThis binding is not consistently declaration-backed
224
+ // across contexts, so keep the explicit syntax as the fallback.
225
+ true);
226
+ if (ts.isPropertyAccessExpression(expression) &&
227
+ expression.name.text === builtinName &&
228
+ isGlobalThisBase(expression.expression)) {
229
+ return true;
230
+ }
231
+ return ts.isElementAccessExpression(expression) &&
232
+ expression.argumentExpression !== undefined &&
233
+ ts.isStringLiteralLike(expression.argumentExpression) &&
234
+ expression.argumentExpression.text === builtinName &&
235
+ isGlobalThisBase(expression.expression);
236
+ }
237
+ export function getResolvedBuiltinSignatureInfo(context, node) {
238
+ const signature = context.checker.getResolvedSignature(node);
239
+ return toResolvedBuiltinSignatureInfo(signature?.getDeclaration());
240
+ }
241
+ export function matchesResolvedBuiltinSignature(context, node, options) {
242
+ const info = getResolvedBuiltinSignatureInfo(context, node);
243
+ return info ? matchesInfo(info, options) : false;
244
+ }
245
+ export function matchesResolvedBuiltinCallableValue(context, expression, options, kind = 'call') {
246
+ const resolvedExpression = getResolvedBuiltinExpression(context, expression);
247
+ const type = context.checker.getTypeAtLocation(resolvedExpression);
248
+ const signatures = [
249
+ ...(kind === 'call' || kind === 'either' ? type.getCallSignatures() : []),
250
+ ...(kind === 'construct' || kind === 'either' ? type.getConstructSignatures() : []),
251
+ ];
252
+ return signatures.some((signature) => {
253
+ const info = toResolvedBuiltinSignatureInfo(signature.getDeclaration());
254
+ return info ? matchesInfo(info, options) : false;
255
+ });
256
+ }
257
+ export function resolvesToBuiltinGlobalValue(context, expression, builtinName, options) {
258
+ const resolvedExpression = getResolvedBuiltinExpression(context, expression);
259
+ if (!matchesResolvedBuiltinCallableValue(context, resolvedExpression, options, 'either')) {
260
+ return false;
261
+ }
262
+ return isBuiltinGlobalIdentifier(context, resolvedExpression, builtinName) ||
263
+ isBuiltinGlobalThisReference(context, resolvedExpression, builtinName);
264
+ }
265
+ export function getWrappedBuiltinInvocation(node) {
266
+ const wrapperKind = getWrappedCallMemberName(node.expression);
267
+ if ((wrapperKind !== 'call' && wrapperKind !== 'apply') || !('expression' in node.expression)) {
268
+ return undefined;
269
+ }
270
+ return {
271
+ target: node.expression.expression,
272
+ wrapperKind,
273
+ };
274
+ }
@@ -0,0 +1,438 @@
1
+ import ts from 'typescript';
2
+
3
+ import type { AnalysisContext } from '../engine/types.ts';
4
+
5
+ function getNameText(name: ts.DeclarationName | undefined): string | undefined {
6
+ if (!name) {
7
+ return undefined;
8
+ }
9
+
10
+ if (
11
+ ts.isIdentifier(name) ||
12
+ ts.isPrivateIdentifier(name) ||
13
+ ts.isStringLiteral(name) ||
14
+ ts.isNumericLiteral(name)
15
+ ) {
16
+ return name.text;
17
+ }
18
+
19
+ return undefined;
20
+ }
21
+
22
+ function getDeclarationOwnerName(declaration: ts.SignatureDeclarationBase): string | undefined {
23
+ let current: ts.Node | undefined = declaration.parent;
24
+
25
+ while (current) {
26
+ if (
27
+ ts.isInterfaceDeclaration(current) || ts.isClassDeclaration(current) ||
28
+ ts.isModuleDeclaration(current)
29
+ ) {
30
+ return getNameText(current.name);
31
+ }
32
+
33
+ if (ts.isVariableDeclaration(current) && ts.isIdentifier(current.name)) {
34
+ return current.name.text;
35
+ }
36
+
37
+ current = current.parent;
38
+ }
39
+
40
+ return undefined;
41
+ }
42
+
43
+ export interface ResolvedBuiltinSignatureInfo {
44
+ declaration: ts.SignatureDeclarationBase;
45
+ memberName?: string;
46
+ ownerName?: string;
47
+ }
48
+
49
+ export interface WrappedBuiltinInvocation {
50
+ target: ts.Expression;
51
+ wrapperKind: 'apply' | 'call';
52
+ }
53
+
54
+ function toResolvedBuiltinSignatureInfo(
55
+ declaration: ts.SignatureDeclarationBase | undefined,
56
+ ): ResolvedBuiltinSignatureInfo | undefined {
57
+ if (!declaration || !declaration.getSourceFile().isDeclarationFile) {
58
+ return undefined;
59
+ }
60
+
61
+ return {
62
+ declaration,
63
+ memberName: getNameText(declaration.name),
64
+ ownerName: getDeclarationOwnerName(declaration),
65
+ };
66
+ }
67
+
68
+ function matchesInfo(
69
+ info: ResolvedBuiltinSignatureInfo,
70
+ options: {
71
+ readonly memberNames?: readonly string[];
72
+ readonly ownerNames?: readonly string[];
73
+ },
74
+ ): boolean {
75
+ if (options.ownerNames && !options.ownerNames.includes(info.ownerName ?? '')) {
76
+ return false;
77
+ }
78
+
79
+ if (options.memberNames && !options.memberNames.includes(info.memberName ?? '')) {
80
+ return false;
81
+ }
82
+
83
+ return true;
84
+ }
85
+
86
+ function getWrappedCallMemberName(expression: ts.LeftHandSideExpression): string | undefined {
87
+ if (ts.isPropertyAccessExpression(expression)) {
88
+ return expression.name.text;
89
+ }
90
+
91
+ if (
92
+ ts.isElementAccessExpression(expression) &&
93
+ ts.isStringLiteralLike(expression.argumentExpression)
94
+ ) {
95
+ return expression.argumentExpression.text;
96
+ }
97
+
98
+ return undefined;
99
+ }
100
+
101
+ function unwrapParenthesizedExpression(expression: ts.Expression): ts.Expression {
102
+ let current = expression;
103
+
104
+ while (ts.isParenthesizedExpression(current)) {
105
+ current = current.expression;
106
+ }
107
+
108
+ return current;
109
+ }
110
+
111
+ type LocalFunctionLikeWithBody =
112
+ | ts.ArrowFunction
113
+ | ts.FunctionDeclaration
114
+ | ts.FunctionExpression
115
+ | ts.MethodDeclaration;
116
+
117
+ function getDirectReturnExpression(node: LocalFunctionLikeWithBody): ts.Expression | undefined {
118
+ if (!node.body) {
119
+ return undefined;
120
+ }
121
+
122
+ if (!ts.isBlock(node.body)) {
123
+ return node.body;
124
+ }
125
+
126
+ if (node.body.statements.length !== 1) {
127
+ return undefined;
128
+ }
129
+
130
+ const [statement] = node.body.statements;
131
+ return ts.isReturnStatement(statement) ? statement.expression : undefined;
132
+ }
133
+
134
+ function getReturnedParameterIndex(
135
+ checker: ts.TypeChecker,
136
+ node: LocalFunctionLikeWithBody,
137
+ expression: ts.Expression,
138
+ ): number | undefined {
139
+ const current = unwrapParenthesizedExpression(expression);
140
+ if (!ts.isIdentifier(current)) {
141
+ return undefined;
142
+ }
143
+
144
+ const returnedSymbol = checker.getSymbolAtLocation(current);
145
+ if (!returnedSymbol) {
146
+ return undefined;
147
+ }
148
+
149
+ for (const [index, parameter] of node.parameters.entries()) {
150
+ if (!ts.isIdentifier(parameter.name)) {
151
+ continue;
152
+ }
153
+
154
+ const parameterSymbol = checker.getSymbolAtLocation(parameter.name);
155
+ if (parameterSymbol === returnedSymbol) {
156
+ return index;
157
+ }
158
+ }
159
+
160
+ return undefined;
161
+ }
162
+
163
+ function getProjectHelperReturnExpression(
164
+ checker: ts.TypeChecker,
165
+ expression: ts.Expression,
166
+ ): ts.Expression | undefined {
167
+ if (!ts.isCallExpression(expression)) {
168
+ return undefined;
169
+ }
170
+
171
+ const calleeSymbol = checker.getSymbolAtLocation(expression.expression);
172
+ if (!calleeSymbol) {
173
+ return undefined;
174
+ }
175
+
176
+ const resolvedSymbol = resolveAliasedSymbol(checker, calleeSymbol);
177
+ for (const declaration of resolvedSymbol.declarations ?? []) {
178
+ if (
179
+ (ts.isFunctionDeclaration(declaration) ||
180
+ ts.isFunctionExpression(declaration) ||
181
+ ts.isArrowFunction(declaration) ||
182
+ ts.isMethodDeclaration(declaration)) &&
183
+ declaration.body !== undefined &&
184
+ declaration.parameters.length === 0
185
+ ) {
186
+ const returnedExpression = getDirectReturnExpression(declaration);
187
+ if (returnedExpression) {
188
+ return returnedExpression;
189
+ }
190
+ }
191
+ }
192
+
193
+ return undefined;
194
+ }
195
+
196
+ function getProjectHelperReturnedArgument(
197
+ checker: ts.TypeChecker,
198
+ expression: ts.Expression,
199
+ ): ts.Expression | undefined {
200
+ if (!ts.isCallExpression(expression)) {
201
+ return undefined;
202
+ }
203
+
204
+ const calleeSymbol = checker.getSymbolAtLocation(expression.expression);
205
+ if (!calleeSymbol) {
206
+ return undefined;
207
+ }
208
+
209
+ const resolvedSymbol = resolveAliasedSymbol(checker, calleeSymbol);
210
+ for (const declaration of resolvedSymbol.declarations ?? []) {
211
+ if (
212
+ (ts.isFunctionDeclaration(declaration) ||
213
+ ts.isFunctionExpression(declaration) ||
214
+ ts.isArrowFunction(declaration) ||
215
+ ts.isMethodDeclaration(declaration)) &&
216
+ declaration.body !== undefined
217
+ ) {
218
+ const returnedExpression = getDirectReturnExpression(declaration);
219
+ if (!returnedExpression) {
220
+ continue;
221
+ }
222
+
223
+ const returnedParameterIndex = getReturnedParameterIndex(checker, declaration, returnedExpression);
224
+ if (returnedParameterIndex !== undefined) {
225
+ return expression.arguments[returnedParameterIndex];
226
+ }
227
+ }
228
+ }
229
+
230
+ return undefined;
231
+ }
232
+
233
+ function resolveAliasedSymbol(
234
+ checker: ts.TypeChecker,
235
+ symbol: ts.Symbol,
236
+ ): ts.Symbol {
237
+ let current = symbol;
238
+
239
+ while ((current.flags & ts.SymbolFlags.Alias) !== 0) {
240
+ const aliased = checker.getAliasedSymbol(current);
241
+ if (aliased === current) {
242
+ break;
243
+ }
244
+
245
+ current = aliased;
246
+ }
247
+
248
+ return current;
249
+ }
250
+
251
+ function getProjectAliasInitializer(
252
+ checker: ts.TypeChecker,
253
+ expression: ts.Expression,
254
+ ): ts.Expression | undefined {
255
+ const unwrapped = unwrapParenthesizedExpression(expression);
256
+ const symbol = checker.getSymbolAtLocation(unwrapped);
257
+ if (!symbol) {
258
+ return undefined;
259
+ }
260
+
261
+ const resolvedSymbol = resolveAliasedSymbol(checker, symbol);
262
+ for (const declaration of resolvedSymbol.declarations ?? []) {
263
+ if (
264
+ ts.isVariableDeclaration(declaration) &&
265
+ ts.isIdentifier(declaration.name) &&
266
+ declaration.initializer !== undefined
267
+ ) {
268
+ return declaration.initializer;
269
+ }
270
+ }
271
+
272
+ return undefined;
273
+ }
274
+
275
+ function getResolvedBuiltinExpression(
276
+ context: AnalysisContext,
277
+ expression: ts.Expression,
278
+ ): ts.Expression {
279
+ let current = unwrapParenthesizedExpression(expression);
280
+ const seen = new Set<ts.Symbol>();
281
+
282
+ while (true) {
283
+ const returnedExpression = getProjectHelperReturnExpression(context.checker, current);
284
+ if (returnedExpression) {
285
+ current = unwrapParenthesizedExpression(returnedExpression);
286
+ continue;
287
+ }
288
+
289
+ const returnedArgument = getProjectHelperReturnedArgument(context.checker, current);
290
+ if (returnedArgument) {
291
+ current = unwrapParenthesizedExpression(returnedArgument);
292
+ continue;
293
+ }
294
+
295
+ const symbol = context.checker.getSymbolAtLocation(current);
296
+ if (!symbol) {
297
+ return current;
298
+ }
299
+
300
+ const resolvedSymbol = resolveAliasedSymbol(context.checker, symbol);
301
+ if (seen.has(resolvedSymbol)) {
302
+ return current;
303
+ }
304
+ seen.add(resolvedSymbol);
305
+
306
+ const initializer = getProjectAliasInitializer(context.checker, current);
307
+ if (initializer) {
308
+ current = unwrapParenthesizedExpression(initializer);
309
+ continue;
310
+ }
311
+
312
+ return current;
313
+ }
314
+ }
315
+
316
+ function isBuiltinGlobalIdentifier(
317
+ context: AnalysisContext,
318
+ expression: ts.Expression,
319
+ builtinName: string,
320
+ ): boolean {
321
+ if (!ts.isIdentifier(expression) || expression.text !== builtinName) {
322
+ return false;
323
+ }
324
+
325
+ const symbol = context.checker.getSymbolAtLocation(expression);
326
+ if (!symbol) {
327
+ return false;
328
+ }
329
+
330
+ const resolvedSymbol = resolveAliasedSymbol(context.checker, symbol);
331
+ const declarations = resolvedSymbol.declarations ?? [];
332
+ return declarations.length > 0 &&
333
+ declarations.every((declaration) => declaration.getSourceFile().isDeclarationFile);
334
+ }
335
+
336
+ function isBuiltinGlobalThisReference(
337
+ context: AnalysisContext,
338
+ expression: ts.Expression,
339
+ builtinName: string,
340
+ ): boolean {
341
+ const isGlobalThisBase = (value: ts.Expression): boolean =>
342
+ ts.isIdentifier(value) &&
343
+ value.text === 'globalThis' &&
344
+ (
345
+ isBuiltinGlobalIdentifier(context, value, 'globalThis') ||
346
+ // TypeScript's globalThis binding is not consistently declaration-backed
347
+ // across contexts, so keep the explicit syntax as the fallback.
348
+ true
349
+ );
350
+
351
+ if (
352
+ ts.isPropertyAccessExpression(expression) &&
353
+ expression.name.text === builtinName &&
354
+ isGlobalThisBase(expression.expression)
355
+ ) {
356
+ return true;
357
+ }
358
+
359
+ return ts.isElementAccessExpression(expression) &&
360
+ expression.argumentExpression !== undefined &&
361
+ ts.isStringLiteralLike(expression.argumentExpression) &&
362
+ expression.argumentExpression.text === builtinName &&
363
+ isGlobalThisBase(expression.expression);
364
+ }
365
+
366
+ export function getResolvedBuiltinSignatureInfo(
367
+ context: AnalysisContext,
368
+ node: ts.CallExpression | ts.NewExpression,
369
+ ): ResolvedBuiltinSignatureInfo | undefined {
370
+ const signature = context.checker.getResolvedSignature(node);
371
+ return toResolvedBuiltinSignatureInfo(signature?.getDeclaration());
372
+ }
373
+
374
+ export function matchesResolvedBuiltinSignature(
375
+ context: AnalysisContext,
376
+ node: ts.CallExpression | ts.NewExpression,
377
+ options: {
378
+ readonly memberNames?: readonly string[];
379
+ readonly ownerNames?: readonly string[];
380
+ },
381
+ ): boolean {
382
+ const info = getResolvedBuiltinSignatureInfo(context, node);
383
+ return info ? matchesInfo(info, options) : false;
384
+ }
385
+
386
+ export function matchesResolvedBuiltinCallableValue(
387
+ context: AnalysisContext,
388
+ expression: ts.Expression,
389
+ options: {
390
+ readonly memberNames?: readonly string[];
391
+ readonly ownerNames?: readonly string[];
392
+ },
393
+ kind: 'call' | 'construct' | 'either' = 'call',
394
+ ): boolean {
395
+ const resolvedExpression = getResolvedBuiltinExpression(context, expression);
396
+ const type = context.checker.getTypeAtLocation(resolvedExpression);
397
+ const signatures = [
398
+ ...(kind === 'call' || kind === 'either' ? type.getCallSignatures() : []),
399
+ ...(kind === 'construct' || kind === 'either' ? type.getConstructSignatures() : []),
400
+ ];
401
+
402
+ return signatures.some((signature) => {
403
+ const info = toResolvedBuiltinSignatureInfo(signature.getDeclaration());
404
+ return info ? matchesInfo(info, options) : false;
405
+ });
406
+ }
407
+
408
+ export function resolvesToBuiltinGlobalValue(
409
+ context: AnalysisContext,
410
+ expression: ts.Expression,
411
+ builtinName: string,
412
+ options: {
413
+ readonly memberNames?: readonly string[];
414
+ readonly ownerNames?: readonly string[];
415
+ },
416
+ ): boolean {
417
+ const resolvedExpression = getResolvedBuiltinExpression(context, expression);
418
+ if (!matchesResolvedBuiltinCallableValue(context, resolvedExpression, options, 'either')) {
419
+ return false;
420
+ }
421
+
422
+ return isBuiltinGlobalIdentifier(context, resolvedExpression, builtinName) ||
423
+ isBuiltinGlobalThisReference(context, resolvedExpression, builtinName);
424
+ }
425
+
426
+ export function getWrappedBuiltinInvocation(
427
+ node: ts.CallExpression,
428
+ ): WrappedBuiltinInvocation | undefined {
429
+ const wrapperKind = getWrappedCallMemberName(node.expression);
430
+ if ((wrapperKind !== 'call' && wrapperKind !== 'apply') || !('expression' in node.expression)) {
431
+ return undefined;
432
+ }
433
+
434
+ return {
435
+ target: node.expression.expression as ts.Expression,
436
+ wrapperKind,
437
+ };
438
+ }