@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,66 @@
1
+ import type { SourceSpan } from './macro_types.d.ts';
2
+ export interface MacroType {
3
+ readonly displayText: string;
4
+ }
5
+ export type MacroRuntimeKind = 'bigint' | 'boolean' | 'function' | 'number' | 'object' | 'string' | 'symbol' | 'undefined';
6
+ export type MacroFiniteCase = {
7
+ readonly elements: readonly MacroFiniteTupleElement[];
8
+ readonly exactLength: number;
9
+ readonly kind: 'array';
10
+ } | {
11
+ readonly kind: 'class';
12
+ readonly className: string;
13
+ } | {
14
+ readonly kind: 'literal';
15
+ readonly code: string;
16
+ } | {
17
+ readonly kind: 'object';
18
+ readonly properties: readonly MacroFiniteObjectProperty[];
19
+ } | {
20
+ readonly kind: 'runtime';
21
+ readonly typeName: MacroRuntimeKind;
22
+ };
23
+ export interface MacroFiniteObjectProperty {
24
+ readonly finiteCase: MacroFiniteCase | null;
25
+ readonly key: string;
26
+ }
27
+ export interface MacroFiniteTupleElement {
28
+ readonly finiteCase: MacroFiniteCase | null;
29
+ }
30
+ export interface MacroFunctionContext {
31
+ readonly fileName: string;
32
+ readonly isAsync: boolean;
33
+ readonly isGenerator: boolean;
34
+ readonly name?: string;
35
+ readonly returnType: MacroType;
36
+ readonly span: SourceSpan;
37
+ }
38
+ export interface MacroDependencyReference {
39
+ readonly kind: 'binding' | 'this-member';
40
+ readonly name: string;
41
+ }
42
+ export interface MacroDependencySet {
43
+ readonly dependencies: readonly MacroDependencyReference[];
44
+ readonly unknown: boolean;
45
+ }
46
+ export interface CanonicalResultInfo {
47
+ readonly errType: MacroType;
48
+ readonly okType: MacroType;
49
+ readonly resultType: MacroType;
50
+ }
51
+ export interface CanonicalResultCarrierInfo extends CanonicalResultInfo {
52
+ readonly requiresAwait: boolean;
53
+ }
54
+ export interface CanonicalFailureInfo {
55
+ readonly failureType: MacroType;
56
+ }
57
+ export interface MacroTryResultCarrierInfo extends CanonicalResultInfo {
58
+ readonly kind: 'result';
59
+ }
60
+ export interface MacroTryNullishCarrierInfo {
61
+ readonly carrierType: MacroType;
62
+ readonly kind: 'nullish';
63
+ readonly nullishKinds: readonly ('null' | 'undefined')[];
64
+ readonly valueType: MacroType;
65
+ }
66
+ export type MacroTryCarrierInfo = MacroTryNullishCarrierInfo | MacroTryResultCarrierInfo;
@@ -0,0 +1,70 @@
1
+ export interface SourceSpan {
2
+ fileName: string;
3
+ start: number;
4
+ end: number;
5
+ }
6
+ export type HashKind = 'macro-start' | 'private-name';
7
+ export interface ScannedHash {
8
+ kind: HashKind;
9
+ nameText: string;
10
+ span: SourceSpan;
11
+ }
12
+ export type HashDiagnosticReason = 'not-followed-by-identifier' | 'illegal-context';
13
+ export interface HashDiagnostic {
14
+ fileName: string;
15
+ reason: HashDiagnosticReason;
16
+ span: SourceSpan;
17
+ }
18
+ export interface ScanResult {
19
+ diagnostics: readonly HashDiagnostic[];
20
+ hashes: readonly ScannedHash[];
21
+ }
22
+ export type ParsedMacroInvocationKind = 'block' | 'arglist' | 'arglist+block' | 'decl' | 'arglist+decl';
23
+ export type ParsedMacroDeclarationKind = 'class' | 'function' | 'interface' | 'typeAlias';
24
+ export type ParsedMacroArgument = {
25
+ kind: 'ExprArg';
26
+ span: SourceSpan;
27
+ } | {
28
+ kind: 'BlockArg';
29
+ span: SourceSpan;
30
+ };
31
+ export interface ParsedMacroInvocation {
32
+ argumentSpans: readonly ParsedMacroArgument[];
33
+ declarationKind?: ParsedMacroDeclarationKind;
34
+ declarationName?: string | null;
35
+ declarationSpan?: SourceSpan;
36
+ fileName: string;
37
+ hashSpan: SourceSpan;
38
+ nameSpan: SourceSpan;
39
+ nameText: string;
40
+ span: SourceSpan;
41
+ trailingBlockSpan?: SourceSpan;
42
+ invocationKind: ParsedMacroInvocationKind;
43
+ rewriteKind: 'expr' | 'stmt';
44
+ }
45
+ export type MacroParseDiagnosticReason = 'missing-macro-name' | 'unterminated-arglist' | 'unterminated-block' | 'missing-expression' | 'unexpected-token';
46
+ export interface MacroParseDiagnostic {
47
+ fileName: string;
48
+ reason: MacroParseDiagnosticReason;
49
+ span: SourceSpan;
50
+ }
51
+ export interface MacroGeneratedSpan {
52
+ generatedEnd: number;
53
+ generatedFileName: string;
54
+ generatedStart: number;
55
+ id: number;
56
+ originalSpan: SourceSpan;
57
+ }
58
+ export interface MacroReplacement {
59
+ id: number;
60
+ originalSpan: SourceSpan;
61
+ rewriteText: string;
62
+ rewrittenSpan: SourceSpan;
63
+ }
64
+ export interface RewriteResult {
65
+ diagnostics: readonly (HashDiagnostic | MacroParseDiagnostic)[];
66
+ generatedSpans: readonly MacroGeneratedSpan[];
67
+ macrosById: ReadonlyMap<number, ParsedMacroInvocation>;
68
+ replacements: readonly MacroReplacement[];
69
+ rewrittenText: string;
70
+ }
@@ -0,0 +1,14 @@
1
+ import { formatDiagnostics, hasErrorDiagnostics, } from './checker/diagnostics.js';
2
+ import { analyzeProject } from './checker/analyze_project.js';
3
+ export function runProgram(options) {
4
+ const analysis = analyzeProject({
5
+ projectPath: options.projectPath,
6
+ target: options.target,
7
+ workingDirectory: options.workingDirectory,
8
+ });
9
+ return {
10
+ diagnostics: analysis.diagnostics,
11
+ output: formatDiagnostics(analysis.diagnostics, options.workingDirectory),
12
+ exitCode: hasErrorDiagnostics(analysis.diagnostics) ? 1 : 0,
13
+ };
14
+ }
@@ -0,0 +1,33 @@
1
+ import {
2
+ formatDiagnostics,
3
+ hasErrorDiagnostics,
4
+ type MergedDiagnostic,
5
+ } from './checker/diagnostics.ts';
6
+ import { analyzeProject } from './checker/analyze_project.ts';
7
+ import type { RuntimeTarget } from './config.ts';
8
+
9
+ export interface RunProgramOptions {
10
+ projectPath: string;
11
+ target?: RuntimeTarget;
12
+ workingDirectory: string;
13
+ }
14
+
15
+ export interface RunProgramResult {
16
+ diagnostics: MergedDiagnostic[];
17
+ output: string;
18
+ exitCode: number;
19
+ }
20
+
21
+ export function runProgram(options: RunProgramOptions): RunProgramResult {
22
+ const analysis = analyzeProject({
23
+ projectPath: options.projectPath,
24
+ target: options.target,
25
+ workingDirectory: options.workingDirectory,
26
+ });
27
+
28
+ return {
29
+ diagnostics: analysis.diagnostics,
30
+ output: formatDiagnostics(analysis.diagnostics, options.workingDirectory),
31
+ exitCode: hasErrorDiagnostics(analysis.diagnostics) ? 1 : 0,
32
+ };
33
+ }
@@ -0,0 +1,371 @@
1
+ import { dirname, extname, join, relative } from '../platform/path.js';
2
+ import ts from 'typescript';
3
+ import { createSoundStdlibCompilerHost } from '../bundled/sound_stdlib.js';
4
+ import { formatDiagnostics, hasErrorDiagnostics, toMergedDiagnostic, } from '../checker/diagnostics.js';
5
+ import { analyzeProject } from '../checker/analyze_project.js';
6
+ import { collectSoundscriptRootNames, getConfigFileParsingDiagnostics, loadConfig, } from '../config.js';
7
+ import { createBuiltinExpandedProgram } from '../frontend/builtin_macro_support.js';
8
+ import { MacroError } from '../frontend/macro_errors.js';
9
+ import { isSoundscriptSourceFile } from '../frontend/project_frontend.js';
10
+ import { copyFile, createSymlink, directoryExistsSync, fileExistsSync, makeDirectory, readDirectory, readLink, readTextFileSync, removePath, writeTextFile, } from '../platform/host.js';
11
+ import { inlineSourceMapComment, stripTrailingSourceMapComment } from './source_maps.js';
12
+ import { transpileTypeScriptModuleToEsm } from './transform.js';
13
+ const PROJECT_CONFIG_CANDIDATES = ['tsconfig.soundscript.json', 'tsconfig.json'];
14
+ const LOCAL_CODE_EXTENSIONS = [
15
+ '.sts',
16
+ '.ts',
17
+ '.tsx',
18
+ '.mts',
19
+ '.cts',
20
+ '.js',
21
+ '.jsx',
22
+ '.mjs',
23
+ '.cjs',
24
+ ];
25
+ const LOCAL_ASSET_EXTENSIONS = ['.json', '.css', '.wasm'];
26
+ async function copyDirectory(sourcePath, destinationPath) {
27
+ await makeDirectory(destinationPath);
28
+ for (const entry of await readDirectory(sourcePath)) {
29
+ const sourceEntryPath = join(sourcePath, entry.name);
30
+ const destinationEntryPath = join(destinationPath, entry.name);
31
+ if (entry.isDirectory) {
32
+ await copyDirectory(sourceEntryPath, destinationEntryPath);
33
+ }
34
+ else if (entry.isFile) {
35
+ await copyFile(sourceEntryPath, destinationEntryPath);
36
+ }
37
+ else if (entry.isSymlink) {
38
+ const targetPath = await readLink(sourceEntryPath);
39
+ await createSymlink(targetPath, destinationEntryPath, 'dir');
40
+ }
41
+ }
42
+ }
43
+ async function ensureRuntimePackageBoundary(outDir) {
44
+ await writeTextFile(join(outDir, 'package.json'), `${JSON.stringify({ private: true, type: 'module' }, null, 2)}\n`);
45
+ }
46
+ function findNearestRuntimeNodeModules(projectRoot) {
47
+ let currentDirectory = projectRoot;
48
+ while (true) {
49
+ const sourceNodeModules = join(currentDirectory, 'node_modules');
50
+ if (fileExistsSync(join(sourceNodeModules, '@soundscript', 'soundscript', 'package.json'))) {
51
+ return sourceNodeModules;
52
+ }
53
+ const parentDirectory = dirname(currentDirectory);
54
+ if (parentDirectory === currentDirectory) {
55
+ return undefined;
56
+ }
57
+ currentDirectory = parentDirectory;
58
+ }
59
+ }
60
+ async function ensureRuntimeNodeModules(projectRoot, outDir) {
61
+ const sourceNodeModules = findNearestRuntimeNodeModules(projectRoot);
62
+ if (!sourceNodeModules) {
63
+ return {
64
+ source: 'cli',
65
+ code: 'SOUNDSCRIPT_RUNTIME_PACKAGE_MISSING',
66
+ category: 'error',
67
+ message: 'Could not find @soundscript/soundscript in node_modules for runtime execution.',
68
+ filePath: projectRoot,
69
+ line: 1,
70
+ column: 1,
71
+ endLine: 1,
72
+ endColumn: 1,
73
+ hint: 'Install @soundscript/soundscript in this project or an ancestor workspace before using soundscript node or soundscript deno.',
74
+ };
75
+ }
76
+ const targetNodeModules = join(outDir, 'node_modules');
77
+ try {
78
+ await createSymlink(sourceNodeModules, targetNodeModules, 'dir');
79
+ }
80
+ catch {
81
+ await copyDirectory(sourceNodeModules, targetNodeModules);
82
+ }
83
+ return null;
84
+ }
85
+ function findNearestProjectPath(startPath) {
86
+ const initialDirectory = fileExistsSync(startPath) ? dirname(startPath) : startPath;
87
+ let currentDirectory = initialDirectory;
88
+ while (true) {
89
+ for (const candidate of PROJECT_CONFIG_CANDIDATES) {
90
+ const projectPath = join(currentDirectory, candidate);
91
+ if (fileExistsSync(projectPath)) {
92
+ return projectPath;
93
+ }
94
+ }
95
+ const parentDirectory = dirname(currentDirectory);
96
+ if (parentDirectory === currentDirectory) {
97
+ return undefined;
98
+ }
99
+ currentDirectory = parentDirectory;
100
+ }
101
+ }
102
+ function isRelativeOrAbsoluteSpecifier(specifier) {
103
+ return specifier.startsWith('./') || specifier.startsWith('../') || specifier.startsWith('/');
104
+ }
105
+ function normalizeLocalSpecifierPath(path) {
106
+ return path.replaceAll('\\', '/');
107
+ }
108
+ function toRuntimeCodeOutputPath(projectRoot, sourceFileName, outDir) {
109
+ const relativePath = normalizeLocalSpecifierPath(relative(projectRoot, sourceFileName));
110
+ const safeRelativePath = relativePath.startsWith('..')
111
+ ? sourceFileName.split(/[\\/]/u).at(-1) ?? sourceFileName
112
+ : relativePath;
113
+ const extension = extname(safeRelativePath);
114
+ return join(outDir, extension.length > 0
115
+ ? `${safeRelativePath.slice(0, -extension.length)}.js`
116
+ : `${safeRelativePath}.js`);
117
+ }
118
+ function toRuntimeAssetOutputPath(projectRoot, sourceFileName, outDir) {
119
+ const relativePath = normalizeLocalSpecifierPath(relative(projectRoot, sourceFileName));
120
+ const safeRelativePath = relativePath.startsWith('..')
121
+ ? sourceFileName.split(/[\\/]/u).at(-1) ?? sourceFileName
122
+ : relativePath;
123
+ return join(outDir, safeRelativePath);
124
+ }
125
+ function collectModuleSpecifiers(sourceText, fileName) {
126
+ const sourceFile = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true);
127
+ const specifiers = [];
128
+ function pushSpecifier(specifier) {
129
+ specifiers.push(specifier.text);
130
+ }
131
+ function visit(node) {
132
+ if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&
133
+ node.moduleSpecifier &&
134
+ ts.isStringLiteralLike(node.moduleSpecifier)) {
135
+ pushSpecifier(node.moduleSpecifier);
136
+ }
137
+ else if (ts.isCallExpression(node) &&
138
+ node.expression.kind === ts.SyntaxKind.ImportKeyword &&
139
+ node.arguments.length >= 1 &&
140
+ ts.isStringLiteralLike(node.arguments[0])) {
141
+ pushSpecifier(node.arguments[0]);
142
+ }
143
+ ts.forEachChild(node, visit);
144
+ }
145
+ visit(sourceFile);
146
+ return specifiers;
147
+ }
148
+ function resolvePathWithExtensions(basePath) {
149
+ for (const extension of LOCAL_CODE_EXTENSIONS) {
150
+ const candidate = `${basePath}${extension}`;
151
+ if (fileExistsSync(candidate)) {
152
+ return candidate;
153
+ }
154
+ }
155
+ for (const extension of LOCAL_ASSET_EXTENSIONS) {
156
+ const candidate = `${basePath}${extension}`;
157
+ if (fileExistsSync(candidate)) {
158
+ return candidate;
159
+ }
160
+ }
161
+ return undefined;
162
+ }
163
+ function resolveLocalDependency(containingFileName, specifier) {
164
+ if (!isRelativeOrAbsoluteSpecifier(specifier)) {
165
+ return undefined;
166
+ }
167
+ const containingDirectory = dirname(containingFileName);
168
+ const candidateBase = specifier.startsWith('/')
169
+ ? specifier
170
+ : join(containingDirectory, specifier);
171
+ if (fileExistsSync(candidateBase)) {
172
+ return candidateBase;
173
+ }
174
+ const directMatch = resolvePathWithExtensions(candidateBase);
175
+ if (directMatch) {
176
+ return directMatch;
177
+ }
178
+ if (directoryExistsSync(candidateBase)) {
179
+ const indexMatch = resolvePathWithExtensions(join(candidateBase, 'index'));
180
+ if (indexMatch) {
181
+ return indexMatch;
182
+ }
183
+ }
184
+ return undefined;
185
+ }
186
+ function isRuntimeCodeFile(fileName) {
187
+ return LOCAL_CODE_EXTENSIONS.some((extension) => fileName.endsWith(extension));
188
+ }
189
+ function isRuntimeAssetFile(fileName) {
190
+ return LOCAL_ASSET_EXTENSIONS.some((extension) => fileName.endsWith(extension));
191
+ }
192
+ function createRuntimeMacroDiagnostic(error) {
193
+ return {
194
+ source: 'cli',
195
+ code: error.code,
196
+ category: 'error',
197
+ message: error.message,
198
+ filePath: error.filePath,
199
+ line: error.line,
200
+ column: error.column,
201
+ endLine: error.endLine,
202
+ endColumn: error.endColumn,
203
+ };
204
+ }
205
+ function createExpandedProgram(projectPath) {
206
+ const loadedConfig = loadConfig(projectPath);
207
+ const soundscriptRootNames = collectSoundscriptRootNames(projectPath, loadedConfig);
208
+ return createBuiltinExpandedProgram({
209
+ baseHost: createSoundStdlibCompilerHost(loadedConfig.commandLine.options, dirname(projectPath)),
210
+ configFileParsingDiagnostics: getConfigFileParsingDiagnostics(loadedConfig.diagnostics, soundscriptRootNames),
211
+ options: loadedConfig.commandLine.options,
212
+ projectReferences: loadedConfig.commandLine.projectReferences,
213
+ rootNames: [...new Set([...loadedConfig.commandLine.fileNames, ...soundscriptRootNames])],
214
+ });
215
+ }
216
+ function transpileExpandedSoundscriptModuleToEsm(expandedProgram, sourceFileName, outputPath) {
217
+ const programFileName = expandedProgram.preparedProgram.toProgramFileName(sourceFileName);
218
+ const expandedSourceFile = expandedProgram.program.getSourceFile(programFileName);
219
+ if (!expandedSourceFile) {
220
+ throw new Error(`Missing expanded source file for ${sourceFileName}.`);
221
+ }
222
+ const printer = ts.createPrinter();
223
+ return transpileTypeScriptModuleToEsm(sourceFileName, outputPath, printer.printFile(expandedSourceFile), {
224
+ module: ts.ModuleKind.ES2022,
225
+ target: ts.ScriptTarget.ES2022,
226
+ });
227
+ }
228
+ export async function materializeRuntimeGraph(options) {
229
+ if (options.entryPaths.length === 0) {
230
+ const diagnostics = [{
231
+ source: 'cli',
232
+ code: 'SOUNDSCRIPT_RUNTIME_NO_ENTRY',
233
+ category: 'error',
234
+ message: 'No entry file was provided for runtime materialization.',
235
+ filePath: options.workingDirectory,
236
+ line: 1,
237
+ column: 1,
238
+ endLine: 1,
239
+ endColumn: 1,
240
+ }];
241
+ return {
242
+ diagnostics,
243
+ exitCode: 1,
244
+ output: formatDiagnostics(diagnostics, options.workingDirectory),
245
+ };
246
+ }
247
+ const entryProjectPath = options.projectPath ??
248
+ findNearestProjectPath(options.entryPaths[0]);
249
+ if (!entryProjectPath) {
250
+ const diagnostics = [{
251
+ source: 'cli',
252
+ code: 'SOUNDSCRIPT_RUNTIME_NO_PROJECT',
253
+ category: 'error',
254
+ message: 'Could not find a tsconfig.soundscript.json or tsconfig.json for the runtime entry.',
255
+ filePath: options.entryPaths[0],
256
+ line: 1,
257
+ column: 1,
258
+ endLine: 1,
259
+ endColumn: 1,
260
+ }];
261
+ return {
262
+ diagnostics,
263
+ exitCode: 1,
264
+ output: formatDiagnostics(diagnostics, options.workingDirectory),
265
+ };
266
+ }
267
+ const analysis = analyzeProject({
268
+ projectPath: entryProjectPath,
269
+ workingDirectory: options.workingDirectory,
270
+ });
271
+ if (hasErrorDiagnostics(analysis.diagnostics)) {
272
+ return {
273
+ diagnostics: analysis.diagnostics,
274
+ exitCode: 1,
275
+ output: formatDiagnostics(analysis.diagnostics, options.workingDirectory),
276
+ };
277
+ }
278
+ const expandedProgram = createExpandedProgram(entryProjectPath);
279
+ const frontendDiagnostics = [
280
+ ...expandedProgram.frontendDiagnostics(),
281
+ ...ts.getPreEmitDiagnostics(expandedProgram.program).map(toMergedDiagnostic),
282
+ ];
283
+ if (hasErrorDiagnostics(frontendDiagnostics)) {
284
+ return {
285
+ diagnostics: frontendDiagnostics,
286
+ exitCode: 1,
287
+ output: formatDiagnostics(frontendDiagnostics, options.workingDirectory),
288
+ };
289
+ }
290
+ try {
291
+ void expandedProgram.program.getTypeChecker();
292
+ }
293
+ catch (error) {
294
+ const diagnostics = error instanceof MacroError ? [createRuntimeMacroDiagnostic(error)] : [];
295
+ return {
296
+ diagnostics,
297
+ exitCode: 1,
298
+ output: error instanceof MacroError
299
+ ? formatDiagnostics(diagnostics, options.workingDirectory)
300
+ : String(error),
301
+ };
302
+ }
303
+ await removePath(options.outDir);
304
+ await makeDirectory(options.outDir);
305
+ const emittedFiles = [];
306
+ const writtenSourceFiles = new Set();
307
+ const projectRoot = dirname(entryProjectPath);
308
+ await ensureRuntimePackageBoundary(options.outDir);
309
+ emittedFiles.push(join(options.outDir, 'package.json'));
310
+ const runtimePackageDiagnostic = await ensureRuntimeNodeModules(projectRoot, options.outDir);
311
+ if (runtimePackageDiagnostic) {
312
+ return {
313
+ diagnostics: [runtimePackageDiagnostic],
314
+ exitCode: 1,
315
+ output: formatDiagnostics([runtimePackageDiagnostic], options.workingDirectory),
316
+ };
317
+ }
318
+ const queue = [...options.entryPaths];
319
+ const visited = new Set();
320
+ const entryOutputPaths = [];
321
+ while (queue.length > 0) {
322
+ const sourceFileName = queue.shift();
323
+ if (visited.has(sourceFileName)) {
324
+ continue;
325
+ }
326
+ visited.add(sourceFileName);
327
+ if (isRuntimeAssetFile(sourceFileName)) {
328
+ const outputPath = toRuntimeAssetOutputPath(projectRoot, sourceFileName, options.outDir);
329
+ await makeDirectory(dirname(outputPath));
330
+ await copyFile(sourceFileName, outputPath);
331
+ emittedFiles.push(outputPath);
332
+ continue;
333
+ }
334
+ if (!isRuntimeCodeFile(sourceFileName)) {
335
+ continue;
336
+ }
337
+ const sourceText = readTextFileSync(sourceFileName);
338
+ const outputPath = toRuntimeCodeOutputPath(projectRoot, sourceFileName, options.outDir);
339
+ const artifact = isSoundscriptSourceFile(sourceFileName)
340
+ ? transpileExpandedSoundscriptModuleToEsm(expandedProgram, sourceFileName, outputPath)
341
+ : transpileTypeScriptModuleToEsm(sourceFileName, outputPath, sourceText, {
342
+ module: ts.ModuleKind.ES2022,
343
+ target: ts.ScriptTarget.ES2022,
344
+ });
345
+ await makeDirectory(dirname(outputPath));
346
+ await writeTextFile(outputPath, `${stripTrailingSourceMapComment(artifact.code)}\n${inlineSourceMapComment(artifact.mapText)}\n`);
347
+ emittedFiles.push(outputPath);
348
+ writtenSourceFiles.add(sourceFileName);
349
+ if (options.entryPaths.includes(sourceFileName)) {
350
+ entryOutputPaths.push(outputPath);
351
+ }
352
+ for (const specifier of collectModuleSpecifiers(sourceText, sourceFileName)) {
353
+ const dependencyPath = resolveLocalDependency(sourceFileName, specifier);
354
+ if (!dependencyPath || writtenSourceFiles.has(dependencyPath)) {
355
+ continue;
356
+ }
357
+ queue.push(dependencyPath);
358
+ }
359
+ }
360
+ return {
361
+ artifacts: {
362
+ emittedFiles,
363
+ entryOutputPaths,
364
+ outDir: options.outDir,
365
+ projectPath: entryProjectPath,
366
+ },
367
+ diagnostics: [],
368
+ exitCode: 0,
369
+ output: '',
370
+ };
371
+ }