@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,1356 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _MachineNumericBox_key, _MachineNumericBox_payload;
13
+ import { fromCompare } from './compare.js';
14
+ import { Failure } from './failures.js';
15
+ import { fromHashEq, stringHash } from './hash.js';
16
+ import { err, ok } from './result.js';
17
+ export class NumericOverflowFailure extends Failure {
18
+ constructor(leaf, operation) {
19
+ super(`Checked ${operation} overflowed for ${leaf}.`);
20
+ this.leaf = leaf;
21
+ this.operation = operation;
22
+ }
23
+ }
24
+ export class NumericDivisionByZeroFailure extends Failure {
25
+ constructor(leaf, operation) {
26
+ super(`Checked ${operation} divided ${leaf} by zero.`);
27
+ this.leaf = leaf;
28
+ this.operation = operation;
29
+ }
30
+ }
31
+ const MACHINE_KIND_PROPERTY = '__soundscript_numeric_kind';
32
+ class MachineNumericBox {
33
+ constructor(kind, payload, key) {
34
+ _MachineNumericBox_key.set(this, void 0);
35
+ _MachineNumericBox_payload.set(this, void 0);
36
+ this.__soundscript_numeric_kind = kind;
37
+ __classPrivateFieldSet(this, _MachineNumericBox_key, key, "f");
38
+ __classPrivateFieldSet(this, _MachineNumericBox_payload, payload, "f");
39
+ Object.freeze(this);
40
+ }
41
+ payload() {
42
+ return __classPrivateFieldGet(this, _MachineNumericBox_payload, "f");
43
+ }
44
+ toJSON() {
45
+ return {
46
+ $numeric: this.__soundscript_numeric_kind,
47
+ value: formatPayload(__classPrivateFieldGet(this, _MachineNumericBox_payload, "f")),
48
+ };
49
+ }
50
+ toString() {
51
+ return __classPrivateFieldGet(this, _MachineNumericBox_key, "f");
52
+ }
53
+ valueOf() {
54
+ throw new TypeError('Machine numerics do not support host numeric coercion.');
55
+ }
56
+ [(_MachineNumericBox_key = new WeakMap(), _MachineNumericBox_payload = new WeakMap(), Symbol.toPrimitive)](hint) {
57
+ if (hint === 'string') {
58
+ return __classPrivateFieldGet(this, _MachineNumericBox_key, "f");
59
+ }
60
+ throw new TypeError('Machine numerics do not support host numeric coercion.');
61
+ }
62
+ }
63
+ const MACHINE_NUMERIC_KINDS = new Set([
64
+ 'f64',
65
+ 'f32',
66
+ 'i8',
67
+ 'i16',
68
+ 'i32',
69
+ 'i64',
70
+ 'u8',
71
+ 'u16',
72
+ 'u32',
73
+ 'u64',
74
+ ]);
75
+ const INTEGER_LEAF_KINDS = new Set([
76
+ 'i8',
77
+ 'i16',
78
+ 'i32',
79
+ 'i64',
80
+ 'u8',
81
+ 'u16',
82
+ 'u32',
83
+ 'u64',
84
+ ]);
85
+ const FLOAT_LEAF_KINDS = new Set(['f32', 'f64']);
86
+ const BIGINT_LEAF_KINDS = new Set(['i64', 'u64']);
87
+ const NUMBER_LEAF_KINDS = new Set([
88
+ 'f64',
89
+ 'f32',
90
+ 'i8',
91
+ 'i16',
92
+ 'i32',
93
+ 'u8',
94
+ 'u16',
95
+ 'u32',
96
+ ]);
97
+ const MACHINE_NUMERIC_CACHES = {
98
+ f64: new Map(),
99
+ f32: new Map(),
100
+ i8: new Map(),
101
+ i16: new Map(),
102
+ i32: new Map(),
103
+ i64: new Map(),
104
+ u8: new Map(),
105
+ u16: new Map(),
106
+ u32: new Map(),
107
+ u64: new Map(),
108
+ };
109
+ function isMachineNumericBox(value) {
110
+ return value instanceof MachineNumericBox;
111
+ }
112
+ function assertMachineNumeric(value) {
113
+ if (!isMachineNumericBox(value)) {
114
+ throw new TypeError('Expected a machine numeric value.');
115
+ }
116
+ return value;
117
+ }
118
+ function formatNumberPayload(value) {
119
+ if (Number.isNaN(value)) {
120
+ return 'NaN';
121
+ }
122
+ if (value === Infinity) {
123
+ return 'Infinity';
124
+ }
125
+ if (value === -Infinity) {
126
+ return '-Infinity';
127
+ }
128
+ return String(value);
129
+ }
130
+ function formatPayload(value) {
131
+ return typeof value === 'bigint' ? value.toString() : formatNumberPayload(value);
132
+ }
133
+ function keyForLeaf(kind, value) {
134
+ return `${kind}:${formatPayload(value)}`;
135
+ }
136
+ function canonicalizeFloat(value) {
137
+ if (Number.isNaN(value)) {
138
+ return Number.NaN;
139
+ }
140
+ if (Object.is(value, -0)) {
141
+ return 0;
142
+ }
143
+ return value;
144
+ }
145
+ function truncatedNumber(value) {
146
+ return Number.isFinite(value) ? Math.trunc(value) : 0;
147
+ }
148
+ function payloadFromInput(value) {
149
+ return isMachineNumericBox(value) ? value.payload() : value;
150
+ }
151
+ function numberFromInput(value) {
152
+ const payload = payloadFromInput(value);
153
+ return typeof payload === 'bigint' ? Number(payload) : payload;
154
+ }
155
+ function bigintFromInput(value) {
156
+ const payload = payloadFromInput(value);
157
+ if (typeof payload === 'bigint') {
158
+ return payload;
159
+ }
160
+ return BigInt(truncatedNumber(payload));
161
+ }
162
+ function exactIntegralBigIntFromInput(value) {
163
+ if (isMachineNumericBox(value)) {
164
+ const payload = value.payload();
165
+ if (typeof payload === 'bigint') {
166
+ return payload;
167
+ }
168
+ if (Number.isInteger(payload)) {
169
+ return BigInt(payload);
170
+ }
171
+ return undefined;
172
+ }
173
+ if (typeof value === 'bigint') {
174
+ return value;
175
+ }
176
+ if (typeof value === 'number' && Number.isInteger(value)) {
177
+ return BigInt(value);
178
+ }
179
+ return undefined;
180
+ }
181
+ function canonicalizePayload(kind, value) {
182
+ switch (kind) {
183
+ case 'f64':
184
+ return canonicalizeFloat(numberFromInput(value));
185
+ case 'f32':
186
+ return canonicalizeFloat(Math.fround(numberFromInput(value)));
187
+ case 'i8':
188
+ return (truncatedNumber(numberFromInput(value)) << 24) >> 24;
189
+ case 'i16':
190
+ return (truncatedNumber(numberFromInput(value)) << 16) >> 16;
191
+ case 'i32':
192
+ return truncatedNumber(numberFromInput(value)) | 0;
193
+ case 'i64':
194
+ return BigInt.asIntN(64, bigintFromInput(value));
195
+ case 'u8':
196
+ return truncatedNumber(numberFromInput(value)) & 0xff;
197
+ case 'u16':
198
+ return truncatedNumber(numberFromInput(value)) & 0xffff;
199
+ case 'u32':
200
+ return truncatedNumber(numberFromInput(value)) >>> 0;
201
+ case 'u64':
202
+ return BigInt.asUintN(64, bigintFromInput(value));
203
+ }
204
+ }
205
+ function internMachineNumeric(kind, value) {
206
+ const payload = canonicalizePayload(kind, value);
207
+ const key = keyForLeaf(kind, payload);
208
+ const existing = MACHINE_NUMERIC_CACHES[kind].get(key);
209
+ if (existing) {
210
+ return existing;
211
+ }
212
+ const created = new MachineNumericBox(kind, payload, key);
213
+ MACHINE_NUMERIC_CACHES[kind].set(key, created);
214
+ return created;
215
+ }
216
+ function numberLeafCompare(left, right) {
217
+ const leftValue = left.payload();
218
+ const rightValue = right.payload();
219
+ const leftNaN = Number.isNaN(leftValue);
220
+ const rightNaN = Number.isNaN(rightValue);
221
+ if (leftNaN || rightNaN) {
222
+ return leftNaN === rightNaN ? 0 : (leftNaN ? 1 : -1);
223
+ }
224
+ if (leftValue === rightValue) {
225
+ return 0;
226
+ }
227
+ if (leftValue === -Infinity) {
228
+ return -1;
229
+ }
230
+ if (rightValue === -Infinity) {
231
+ return 1;
232
+ }
233
+ if (leftValue === Infinity) {
234
+ return 1;
235
+ }
236
+ if (rightValue === Infinity) {
237
+ return -1;
238
+ }
239
+ return leftValue < rightValue ? -1 : 1;
240
+ }
241
+ function bigintLeafCompare(left, right) {
242
+ const leftValue = left.payload();
243
+ const rightValue = right.payload();
244
+ if (leftValue === rightValue) {
245
+ return 0;
246
+ }
247
+ return leftValue < rightValue ? -1 : 1;
248
+ }
249
+ function parseNumberText(text) {
250
+ const value = Number(text);
251
+ return Number.isNaN(value) && text.trim() !== 'NaN' ? undefined : value;
252
+ }
253
+ function parseBigIntText(text) {
254
+ try {
255
+ return BigInt(text);
256
+ }
257
+ catch {
258
+ return undefined;
259
+ }
260
+ }
261
+ function createIntegerFactory(kind, minValue, maxValue) {
262
+ const factory = ((value) => internMachineNumeric(kind, value));
263
+ Object.assign(factory, {
264
+ MAX_VALUE: internMachineNumeric(kind, maxValue),
265
+ MIN_VALUE: internMachineNumeric(kind, minValue),
266
+ compare(left, right) {
267
+ return BIGINT_LEAF_KINDS.has(kind)
268
+ ? bigintLeafCompare(left, right)
269
+ : numberLeafCompare(left, right);
270
+ },
271
+ format(value) {
272
+ return formatPayload(value.payload());
273
+ },
274
+ parse(text) {
275
+ const parsed = BIGINT_LEAF_KINDS.has(kind)
276
+ ? parseBigIntText(text)
277
+ : parseNumberText(text);
278
+ if (parsed === undefined) {
279
+ throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);
280
+ }
281
+ return internMachineNumeric(kind, parsed);
282
+ },
283
+ tryParse(text) {
284
+ const parsed = BIGINT_LEAF_KINDS.has(kind)
285
+ ? parseBigIntText(text)
286
+ : parseNumberText(text);
287
+ return parsed === undefined
288
+ ? undefined
289
+ : internMachineNumeric(kind, parsed);
290
+ },
291
+ checkedAdd(left, right) {
292
+ return checkedIntegerBinary(kind, 'add', left, right);
293
+ },
294
+ checkedSub(left, right) {
295
+ return checkedIntegerBinary(kind, 'sub', left, right);
296
+ },
297
+ checkedMul(left, right) {
298
+ return checkedIntegerBinary(kind, 'mul', left, right);
299
+ },
300
+ checkedDiv(left, right) {
301
+ return checkedIntegerBinary(kind, 'div', left, right);
302
+ },
303
+ checkedRem(left, right) {
304
+ return checkedIntegerRemainder(kind, left, right);
305
+ },
306
+ checkedNeg(value) {
307
+ return checkedIntegerNegation(kind, value);
308
+ },
309
+ });
310
+ return factory;
311
+ }
312
+ function createFloatFactory(kind, minValue, maxValue) {
313
+ const factory = ((value) => internMachineNumeric(kind, value));
314
+ Object.assign(factory, {
315
+ MAX_VALUE: internMachineNumeric(kind, maxValue),
316
+ MIN_VALUE: internMachineNumeric(kind, minValue),
317
+ compare(left, right) {
318
+ return numberLeafCompare(left, right);
319
+ },
320
+ format(value) {
321
+ return formatPayload(value.payload());
322
+ },
323
+ isFinite(value) {
324
+ return Number.isFinite(value.payload());
325
+ },
326
+ isNaN(value) {
327
+ return Number.isNaN(value.payload());
328
+ },
329
+ parse(text) {
330
+ const parsed = parseNumberText(text);
331
+ if (parsed === undefined) {
332
+ throw new TypeError(`Could not parse ${kind} from ${JSON.stringify(text)}.`);
333
+ }
334
+ return internMachineNumeric(kind, parsed);
335
+ },
336
+ tryParse(text) {
337
+ const parsed = parseNumberText(text);
338
+ return parsed === undefined
339
+ ? undefined
340
+ : internMachineNumeric(kind, parsed);
341
+ },
342
+ });
343
+ return factory;
344
+ }
345
+ function exactKindGuard(kind) {
346
+ return (value) => isMachineNumericBox(value) && value.__soundscript_numeric_kind === kind;
347
+ }
348
+ function fitsIntegerKind(kind, value) {
349
+ const integral = exactIntegralBigIntFromInput(value);
350
+ if (integral === undefined) {
351
+ return false;
352
+ }
353
+ switch (kind) {
354
+ case 'i8':
355
+ return integral >= -128n && integral <= 127n;
356
+ case 'i16':
357
+ return integral >= -32768n && integral <= 32767n;
358
+ case 'i32':
359
+ return integral >= -2147483648n && integral <= 2147483647n;
360
+ case 'i64':
361
+ return BigInt.asIntN(64, integral) === integral;
362
+ case 'u8':
363
+ return integral >= 0n && integral <= 255n;
364
+ case 'u16':
365
+ return integral >= 0n && integral <= 65535n;
366
+ case 'u32':
367
+ return integral >= 0n && integral <= 4294967295n;
368
+ case 'u64':
369
+ return integral >= 0n && BigInt.asUintN(64, integral) === integral;
370
+ }
371
+ }
372
+ function fitsFloat32(value) {
373
+ const payload = isMachineNumericBox(value) ? value.payload() : value;
374
+ return typeof payload === 'number' && Number.isFinite(payload) && Math.fround(payload) === payload;
375
+ }
376
+ function assertIntegerLeafValue(kind, value) {
377
+ const numeric = assertMachineNumeric(value);
378
+ if (numeric.__soundscript_numeric_kind !== kind) {
379
+ throw new TypeError(`Expected ${kind} machine numeric value.`);
380
+ }
381
+ return numeric;
382
+ }
383
+ function integerPayloadToBigInt(numeric) {
384
+ const payload = numeric.payload();
385
+ return typeof payload === 'bigint' ? payload : BigInt(payload);
386
+ }
387
+ function checkedIntegerResult(kind, operation, value) {
388
+ if (!fitsIntegerKind(kind, value)) {
389
+ return err(new NumericOverflowFailure(kind, operation));
390
+ }
391
+ return ok(internMachineNumeric(kind, value));
392
+ }
393
+ function checkedIntegerBinary(kind, operation, left, right) {
394
+ const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));
395
+ const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));
396
+ if (operation === 'div' && rightValue === 0n) {
397
+ return err(new NumericDivisionByZeroFailure(kind, operation));
398
+ }
399
+ switch (operation) {
400
+ case 'add':
401
+ return checkedIntegerResult(kind, operation, leftValue + rightValue);
402
+ case 'sub':
403
+ return checkedIntegerResult(kind, operation, leftValue - rightValue);
404
+ case 'mul':
405
+ return checkedIntegerResult(kind, operation, leftValue * rightValue);
406
+ case 'div':
407
+ return checkedIntegerResult(kind, operation, leftValue / rightValue);
408
+ }
409
+ }
410
+ function checkedIntegerRemainder(kind, left, right) {
411
+ const leftValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, left));
412
+ const rightValue = integerPayloadToBigInt(assertIntegerLeafValue(kind, right));
413
+ if (rightValue === 0n) {
414
+ return err(new NumericDivisionByZeroFailure(kind, 'rem'));
415
+ }
416
+ return ok(internMachineNumeric(kind, leftValue % rightValue));
417
+ }
418
+ function checkedIntegerNegation(kind, value) {
419
+ const payload = integerPayloadToBigInt(assertIntegerLeafValue(kind, value));
420
+ return checkedIntegerResult(kind, 'neg', -payload);
421
+ }
422
+ function exactShiftCount(value) {
423
+ return BigInt.asUintN(6, bigintFromInput(value));
424
+ }
425
+ function applyBigIntBinaryOperator(kind, operator, left, right) {
426
+ switch (operator) {
427
+ case '+':
428
+ return left + right;
429
+ case '-':
430
+ return left - right;
431
+ case '*':
432
+ return left * right;
433
+ case '/':
434
+ return left / right;
435
+ case '%':
436
+ return left % right;
437
+ case '**':
438
+ return left ** right;
439
+ case '&':
440
+ return left & right;
441
+ case '|':
442
+ return left | right;
443
+ case '^':
444
+ return left ^ right;
445
+ case '<<':
446
+ return left << exactShiftCount(right);
447
+ case '>>':
448
+ return left >> exactShiftCount(right);
449
+ case '>>>': {
450
+ const shifted = BigInt.asUintN(64, left) >> exactShiftCount(right);
451
+ return kind === 'u64' ? shifted : BigInt.asIntN(64, shifted);
452
+ }
453
+ }
454
+ }
455
+ function applyNumberBinaryOperator(operator, left, right) {
456
+ switch (operator) {
457
+ case '+':
458
+ return left + right;
459
+ case '-':
460
+ return left - right;
461
+ case '*':
462
+ return left * right;
463
+ case '/':
464
+ return left / right;
465
+ case '%':
466
+ return left % right;
467
+ case '**':
468
+ return left ** right;
469
+ case '&':
470
+ return left & right;
471
+ case '|':
472
+ return left | right;
473
+ case '^':
474
+ return left ^ right;
475
+ case '<<':
476
+ return left << right;
477
+ case '>>':
478
+ return left >> right;
479
+ case '>>>':
480
+ return left >>> right;
481
+ }
482
+ }
483
+ function applyNumberUnaryOperator(operator, value) {
484
+ switch (operator) {
485
+ case '+':
486
+ return +value;
487
+ case '-':
488
+ return -value;
489
+ case '~':
490
+ return ~value;
491
+ }
492
+ }
493
+ function applyBigIntUnaryOperator(operator, value) {
494
+ switch (operator) {
495
+ case '-':
496
+ return -value;
497
+ case '~':
498
+ return ~value;
499
+ }
500
+ }
501
+ export const F64 = createFloatFactory('f64', -Number.MAX_VALUE, Number.MAX_VALUE);
502
+ export const F32 = createFloatFactory('f32', -3.4028234663852886e38, 3.4028234663852886e38);
503
+ export const I8 = createIntegerFactory('i8', -128, 127);
504
+ export const I16 = createIntegerFactory('i16', -32768, 32767);
505
+ export const I32 = createIntegerFactory('i32', -2147483648, 2147483647);
506
+ export const I64 = createIntegerFactory('i64', -9223372036854775808n, 9223372036854775807n);
507
+ export const U8 = createIntegerFactory('u8', 0, 255);
508
+ export const U16 = createIntegerFactory('u16', 0, 65535);
509
+ export const U32 = createIntegerFactory('u32', 0, 4294967295);
510
+ export const U64 = createIntegerFactory('u64', 0n, 18446744073709551615n);
511
+ const FACTORY_BY_KIND = {
512
+ f64: F64,
513
+ f32: F32,
514
+ i8: I8,
515
+ i16: I16,
516
+ i32: I32,
517
+ i64: I64,
518
+ u8: U8,
519
+ u16: U16,
520
+ u32: U32,
521
+ u64: U64,
522
+ };
523
+ export function kindOf(value) {
524
+ if (isMachineNumericBox(value)) {
525
+ return value.__soundscript_numeric_kind;
526
+ }
527
+ return (typeof value);
528
+ }
529
+ export function isNumeric(value) {
530
+ return isMachineNumericBox(value);
531
+ }
532
+ export function isInt(value) {
533
+ return isMachineNumericBox(value) &&
534
+ INTEGER_LEAF_KINDS.has(value.__soundscript_numeric_kind);
535
+ }
536
+ export function isFloat(value) {
537
+ return isMachineNumericBox(value) &&
538
+ FLOAT_LEAF_KINDS.has(value.__soundscript_numeric_kind);
539
+ }
540
+ export const isF64 = exactKindGuard('f64');
541
+ export const isF32 = exactKindGuard('f32');
542
+ export const isI8 = exactKindGuard('i8');
543
+ export const isI16 = exactKindGuard('i16');
544
+ export const isI32 = exactKindGuard('i32');
545
+ export const isI64 = exactKindGuard('i64');
546
+ export const isU8 = exactKindGuard('u8');
547
+ export const isU16 = exactKindGuard('u16');
548
+ export const isU32 = exactKindGuard('u32');
549
+ export const isU64 = exactKindGuard('u64');
550
+ export function fitsF32(value) {
551
+ return fitsFloat32(value);
552
+ }
553
+ export function fitsI8(value) {
554
+ return fitsIntegerKind('i8', value);
555
+ }
556
+ export function fitsI16(value) {
557
+ return fitsIntegerKind('i16', value);
558
+ }
559
+ export function fitsI32(value) {
560
+ return fitsIntegerKind('i32', value);
561
+ }
562
+ export function fitsI64(value) {
563
+ return fitsIntegerKind('i64', value);
564
+ }
565
+ export function fitsU8(value) {
566
+ return fitsIntegerKind('u8', value);
567
+ }
568
+ export function fitsU16(value) {
569
+ return fitsIntegerKind('u16', value);
570
+ }
571
+ export function fitsU32(value) {
572
+ return fitsIntegerKind('u32', value);
573
+ }
574
+ export function fitsU64(value) {
575
+ return fitsIntegerKind('u64', value);
576
+ }
577
+ export function toHostNumber(value) {
578
+ const payload = assertMachineNumeric(value).payload();
579
+ return typeof payload === 'bigint' ? Number(payload) : payload;
580
+ }
581
+ export function toHostBigInt(value) {
582
+ const payload = assertMachineNumeric(value).payload();
583
+ return typeof payload === 'bigint' ? payload : BigInt(payload);
584
+ }
585
+ export function format(value) {
586
+ return isMachineNumericBox(value)
587
+ ? formatPayload(value.payload())
588
+ : formatPayload(value);
589
+ }
590
+ export function keyOf(value) {
591
+ return assertMachineNumeric(value).toString();
592
+ }
593
+ function readNumericFromDataView(kind, view, byteOffset, littleEndian) {
594
+ switch (kind) {
595
+ case 'f64':
596
+ return F64(view.getFloat64(byteOffset, littleEndian));
597
+ case 'f32':
598
+ return F32(view.getFloat32(byteOffset, littleEndian));
599
+ case 'i8':
600
+ return I8(view.getInt8(byteOffset));
601
+ case 'i16':
602
+ return I16(view.getInt16(byteOffset, littleEndian));
603
+ case 'i32':
604
+ return I32(view.getInt32(byteOffset, littleEndian));
605
+ case 'i64':
606
+ return I64(view.getBigInt64(byteOffset, littleEndian));
607
+ case 'u8':
608
+ return U8(view.getUint8(byteOffset));
609
+ case 'u16':
610
+ return U16(view.getUint16(byteOffset, littleEndian));
611
+ case 'u32':
612
+ return U32(view.getUint32(byteOffset, littleEndian));
613
+ case 'u64':
614
+ return U64(view.getBigUint64(byteOffset, littleEndian));
615
+ }
616
+ }
617
+ function writeNumericToDataView(kind, view, byteOffset, value, littleEndian) {
618
+ const numeric = FACTORY_BY_KIND[kind](value);
619
+ const payload = assertMachineNumeric(numeric).payload();
620
+ switch (kind) {
621
+ case 'f64':
622
+ view.setFloat64(byteOffset, payload, littleEndian);
623
+ return;
624
+ case 'f32':
625
+ view.setFloat32(byteOffset, payload, littleEndian);
626
+ return;
627
+ case 'i8':
628
+ view.setInt8(byteOffset, payload);
629
+ return;
630
+ case 'i16':
631
+ view.setInt16(byteOffset, payload, littleEndian);
632
+ return;
633
+ case 'i32':
634
+ view.setInt32(byteOffset, payload, littleEndian);
635
+ return;
636
+ case 'i64':
637
+ view.setBigInt64(byteOffset, payload, littleEndian);
638
+ return;
639
+ case 'u8':
640
+ view.setUint8(byteOffset, payload);
641
+ return;
642
+ case 'u16':
643
+ view.setUint16(byteOffset, payload, littleEndian);
644
+ return;
645
+ case 'u32':
646
+ view.setUint32(byteOffset, payload, littleEndian);
647
+ return;
648
+ case 'u64':
649
+ view.setBigUint64(byteOffset, payload, littleEndian);
650
+ return;
651
+ }
652
+ }
653
+ export function readF64(view, byteOffset, littleEndian) {
654
+ return readNumericFromDataView('f64', view, byteOffset, littleEndian);
655
+ }
656
+ export function readF32(view, byteOffset, littleEndian) {
657
+ return readNumericFromDataView('f32', view, byteOffset, littleEndian);
658
+ }
659
+ export function readI8(view, byteOffset) {
660
+ return readNumericFromDataView('i8', view, byteOffset);
661
+ }
662
+ export function readI16(view, byteOffset, littleEndian) {
663
+ return readNumericFromDataView('i16', view, byteOffset, littleEndian);
664
+ }
665
+ export function readI32(view, byteOffset, littleEndian) {
666
+ return readNumericFromDataView('i32', view, byteOffset, littleEndian);
667
+ }
668
+ export function readI64(view, byteOffset, littleEndian) {
669
+ return readNumericFromDataView('i64', view, byteOffset, littleEndian);
670
+ }
671
+ export function readU8(view, byteOffset) {
672
+ return readNumericFromDataView('u8', view, byteOffset);
673
+ }
674
+ export function readU16(view, byteOffset, littleEndian) {
675
+ return readNumericFromDataView('u16', view, byteOffset, littleEndian);
676
+ }
677
+ export function readU32(view, byteOffset, littleEndian) {
678
+ return readNumericFromDataView('u32', view, byteOffset, littleEndian);
679
+ }
680
+ export function readU64(view, byteOffset, littleEndian) {
681
+ return readNumericFromDataView('u64', view, byteOffset, littleEndian);
682
+ }
683
+ export function writeF64(view, byteOffset, value, littleEndian) {
684
+ writeNumericToDataView('f64', view, byteOffset, value, littleEndian);
685
+ }
686
+ export function writeF32(view, byteOffset, value, littleEndian) {
687
+ writeNumericToDataView('f32', view, byteOffset, value, littleEndian);
688
+ }
689
+ export function writeI8(view, byteOffset, value) {
690
+ writeNumericToDataView('i8', view, byteOffset, value);
691
+ }
692
+ export function writeI16(view, byteOffset, value, littleEndian) {
693
+ writeNumericToDataView('i16', view, byteOffset, value, littleEndian);
694
+ }
695
+ export function writeI32(view, byteOffset, value, littleEndian) {
696
+ writeNumericToDataView('i32', view, byteOffset, value, littleEndian);
697
+ }
698
+ export function writeI64(view, byteOffset, value, littleEndian) {
699
+ writeNumericToDataView('i64', view, byteOffset, value, littleEndian);
700
+ }
701
+ export function writeU8(view, byteOffset, value) {
702
+ writeNumericToDataView('u8', view, byteOffset, value);
703
+ }
704
+ export function writeU16(view, byteOffset, value, littleEndian) {
705
+ writeNumericToDataView('u16', view, byteOffset, value, littleEndian);
706
+ }
707
+ export function writeU32(view, byteOffset, value, littleEndian) {
708
+ writeNumericToDataView('u32', view, byteOffset, value, littleEndian);
709
+ }
710
+ export function writeU64(view, byteOffset, value, littleEndian) {
711
+ writeNumericToDataView('u64', view, byteOffset, value, littleEndian);
712
+ }
713
+ function isCanonicalArrayIndexProperty(property) {
714
+ if (typeof property !== 'string' || property === '') {
715
+ return undefined;
716
+ }
717
+ const numeric = Number(property);
718
+ if (!Number.isInteger(numeric) || numeric < 0 || String(numeric) !== property) {
719
+ return undefined;
720
+ }
721
+ return numeric;
722
+ }
723
+ function normalizeViewIndex(index, length) {
724
+ return Number.isInteger(index) && index >= 0 && index < length ? index : undefined;
725
+ }
726
+ function resolveSubarrayIndex(index, length) {
727
+ if (index === undefined) {
728
+ return length;
729
+ }
730
+ if (index < 0) {
731
+ return Math.max(length + index, 0);
732
+ }
733
+ return Math.min(index, length);
734
+ }
735
+ function resolveSliceIndex(index, length) {
736
+ if (index === undefined) {
737
+ return 0;
738
+ }
739
+ if (index < 0) {
740
+ return Math.max(length + index, 0);
741
+ }
742
+ return Math.min(index, length);
743
+ }
744
+ function resolveLastSearchIndex(index, length) {
745
+ if (length === 0) {
746
+ return -1;
747
+ }
748
+ if (index === undefined) {
749
+ return length - 1;
750
+ }
751
+ if (index < 0) {
752
+ return length + index;
753
+ }
754
+ return Math.min(index, length - 1);
755
+ }
756
+ function materializeNumericLikeSource(source) {
757
+ if (Symbol.iterator in Object(source)) {
758
+ return Array.from(source);
759
+ }
760
+ const arrayLike = source;
761
+ const values = [];
762
+ for (let index = 0; index < arrayLike.length; index += 1) {
763
+ values.push(arrayLike[index]);
764
+ }
765
+ return values;
766
+ }
767
+ class MachineNumericArrayView {
768
+ constructor(buffer, bytesPerElement, byteOffset = 0, length) {
769
+ if (byteOffset < 0 || !Number.isInteger(byteOffset)) {
770
+ throw new RangeError('byteOffset must be a non-negative integer.');
771
+ }
772
+ if (byteOffset % bytesPerElement !== 0) {
773
+ throw new RangeError('byteOffset must align to BYTES_PER_ELEMENT.');
774
+ }
775
+ if (byteOffset > buffer.byteLength) {
776
+ throw new RangeError('byteOffset is out of range for the provided buffer.');
777
+ }
778
+ const remaining = buffer.byteLength - byteOffset;
779
+ const computedLength = length ?? remaining / bytesPerElement;
780
+ if (!Number.isInteger(computedLength) || computedLength < 0) {
781
+ throw new RangeError('length must describe a whole number of elements.');
782
+ }
783
+ if (computedLength * bytesPerElement > remaining) {
784
+ throw new RangeError('length is out of range for the provided buffer.');
785
+ }
786
+ if (length === undefined && remaining % bytesPerElement !== 0) {
787
+ throw new RangeError('buffer byte length must align to BYTES_PER_ELEMENT.');
788
+ }
789
+ this.BYTES_PER_ELEMENT = bytesPerElement;
790
+ this.buffer = buffer;
791
+ this.byteOffset = byteOffset;
792
+ this.length = computedLength;
793
+ this.byteLength = computedLength * bytesPerElement;
794
+ this._view = new DataView(buffer, byteOffset, this.byteLength);
795
+ return new Proxy(this, {
796
+ get: (target, property, receiver) => {
797
+ const index = isCanonicalArrayIndexProperty(property);
798
+ if (index !== undefined) {
799
+ return target.at(index);
800
+ }
801
+ const value = Reflect.get(target, property, receiver);
802
+ return typeof value === 'function' ? value.bind(target) : value;
803
+ },
804
+ set: (target, property, value, receiver) => {
805
+ const index = isCanonicalArrayIndexProperty(property);
806
+ if (index !== undefined) {
807
+ target.setAt(index, value);
808
+ return true;
809
+ }
810
+ return Reflect.set(target, property, value, receiver);
811
+ },
812
+ });
813
+ }
814
+ dataView() {
815
+ return this._view;
816
+ }
817
+ coerceToLeaf(value) {
818
+ return FACTORY_BY_KIND[this.leafKind()](value);
819
+ }
820
+ at(index) {
821
+ const normalized = normalizeViewIndex(index, this.length);
822
+ if (normalized === undefined) {
823
+ return undefined;
824
+ }
825
+ return this.readFromView(this._view, normalized * this.BYTES_PER_ELEMENT);
826
+ }
827
+ setAt(index, value) {
828
+ const normalized = normalizeViewIndex(index, this.length);
829
+ if (normalized === undefined) {
830
+ throw new RangeError('Index out of range for machine numeric view.');
831
+ }
832
+ this.writeToView(this._view, normalized * this.BYTES_PER_ELEMENT, value);
833
+ }
834
+ fill(value, start = 0, end = this.length) {
835
+ const startIndex = resolveSliceIndex(start, this.length);
836
+ const endIndex = resolveSubarrayIndex(end, this.length);
837
+ const finalEnd = Math.max(endIndex, startIndex);
838
+ for (let index = startIndex; index < finalEnd; index += 1) {
839
+ this.writeToView(this._view, index * this.BYTES_PER_ELEMENT, value);
840
+ }
841
+ return this;
842
+ }
843
+ set(source, offset = 0) {
844
+ if (!Number.isInteger(offset) || offset < 0 || offset > this.length) {
845
+ throw new RangeError('Offset out of range for machine numeric view.');
846
+ }
847
+ const snapshot = materializeNumericLikeSource(source);
848
+ if (offset + snapshot.length > this.length) {
849
+ throw new RangeError('Source is too large for machine numeric view.');
850
+ }
851
+ for (let index = 0; index < snapshot.length; index += 1) {
852
+ this.writeToView(this._view, (offset + index) * this.BYTES_PER_ELEMENT, snapshot[index]);
853
+ }
854
+ }
855
+ copyWithin(target, start, end) {
856
+ const targetIndex = resolveSliceIndex(target, this.length);
857
+ const startIndex = resolveSliceIndex(start, this.length);
858
+ const endIndex = resolveSubarrayIndex(end, this.length);
859
+ const available = Math.max(endIndex - startIndex, 0);
860
+ const count = Math.min(available, this.length - targetIndex);
861
+ const snapshot = [];
862
+ for (let index = 0; index < count; index += 1) {
863
+ snapshot.push(this.readFromView(this._view, (startIndex + index) * this.BYTES_PER_ELEMENT));
864
+ }
865
+ for (let index = 0; index < snapshot.length; index += 1) {
866
+ this.writeToView(this._view, (targetIndex + index) * this.BYTES_PER_ELEMENT, snapshot[index]);
867
+ }
868
+ return this;
869
+ }
870
+ *keys() {
871
+ for (let index = 0; index < this.length; index += 1) {
872
+ yield index;
873
+ }
874
+ }
875
+ values() {
876
+ return this[Symbol.iterator]();
877
+ }
878
+ *entries() {
879
+ for (let index = 0; index < this.length; index += 1) {
880
+ yield [index, this.readFromView(this._view, index * this.BYTES_PER_ELEMENT)];
881
+ }
882
+ }
883
+ includes(searchElement, fromIndex = 0) {
884
+ return this.indexOf(searchElement, fromIndex) !== -1;
885
+ }
886
+ indexOf(searchElement, fromIndex = 0) {
887
+ const startIndex = resolveSliceIndex(fromIndex, this.length);
888
+ const searchValue = this.coerceToLeaf(searchElement);
889
+ for (let index = startIndex; index < this.length; index += 1) {
890
+ if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {
891
+ return index;
892
+ }
893
+ }
894
+ return -1;
895
+ }
896
+ lastIndexOf(searchElement, fromIndex) {
897
+ const startIndex = resolveLastSearchIndex(fromIndex, this.length);
898
+ if (startIndex < 0) {
899
+ return -1;
900
+ }
901
+ const searchValue = this.coerceToLeaf(searchElement);
902
+ for (let index = startIndex; index >= 0; index -= 1) {
903
+ if (this.readFromView(this._view, index * this.BYTES_PER_ELEMENT) === searchValue) {
904
+ return index;
905
+ }
906
+ }
907
+ return -1;
908
+ }
909
+ slice(begin, end) {
910
+ const startIndex = resolveSliceIndex(begin, this.length);
911
+ const endIndex = resolveSubarrayIndex(end, this.length);
912
+ const finalLength = Math.max(endIndex - startIndex, 0);
913
+ const sliced = this.constructSubarray(new ArrayBuffer(finalLength * this.BYTES_PER_ELEMENT), 0, finalLength);
914
+ for (let index = 0; index < finalLength; index += 1) {
915
+ const value = this.readFromView(this._view, (startIndex + index) * this.BYTES_PER_ELEMENT);
916
+ sliced.setAt(index, value);
917
+ }
918
+ return sliced;
919
+ }
920
+ subarray(begin, end) {
921
+ const startIndex = resolveSubarrayIndex(begin ?? 0, this.length);
922
+ const endIndex = resolveSubarrayIndex(end, this.length);
923
+ const finalLength = Math.max(endIndex - startIndex, 0);
924
+ return this.constructSubarray(this.buffer, this.byteOffset + startIndex * this.BYTES_PER_ELEMENT, finalLength);
925
+ }
926
+ *[Symbol.iterator]() {
927
+ for (let index = 0; index < this.length; index += 1) {
928
+ yield this.readFromView(this._view, index * this.BYTES_PER_ELEMENT);
929
+ }
930
+ }
931
+ }
932
+ function assertLittleEndianNativeViewBridge(littleEndian, hostViewName) {
933
+ if (!littleEndian) {
934
+ throw new TypeError(`Native ${hostViewName} views require little-endian machine storage.`);
935
+ }
936
+ }
937
+ export class I8Array extends MachineNumericArrayView {
938
+ static fromHostView(view) {
939
+ return new I8Array(view.buffer, view.byteOffset, view.length);
940
+ }
941
+ constructor(buffer, byteOffset = 0, length) {
942
+ super(buffer, I8Array.BYTES_PER_ELEMENT, byteOffset, length);
943
+ }
944
+ leafKind() {
945
+ return 'i8';
946
+ }
947
+ readFromView(view, byteOffset) {
948
+ return readI8(view, byteOffset);
949
+ }
950
+ writeToView(view, byteOffset, value) {
951
+ writeI8(view, byteOffset, value);
952
+ }
953
+ constructSubarray(buffer, byteOffset, length) {
954
+ return new I8Array(buffer, byteOffset, length);
955
+ }
956
+ subarray(begin, end) {
957
+ return super.subarray(begin, end);
958
+ }
959
+ slice(begin, end) {
960
+ return super.slice(begin, end);
961
+ }
962
+ toHostView() {
963
+ return new Int8Array(this.buffer, this.byteOffset, this.length);
964
+ }
965
+ }
966
+ I8Array.BYTES_PER_ELEMENT = 1;
967
+ export class U8Array extends MachineNumericArrayView {
968
+ static fromHostView(view) {
969
+ return new U8Array(view.buffer, view.byteOffset, view.length);
970
+ }
971
+ constructor(buffer, byteOffset = 0, length) {
972
+ super(buffer, U8Array.BYTES_PER_ELEMENT, byteOffset, length);
973
+ }
974
+ leafKind() {
975
+ return 'u8';
976
+ }
977
+ readFromView(view, byteOffset) {
978
+ return readU8(view, byteOffset);
979
+ }
980
+ writeToView(view, byteOffset, value) {
981
+ writeU8(view, byteOffset, value);
982
+ }
983
+ constructSubarray(buffer, byteOffset, length) {
984
+ return new U8Array(buffer, byteOffset, length);
985
+ }
986
+ subarray(begin, end) {
987
+ return super.subarray(begin, end);
988
+ }
989
+ slice(begin, end) {
990
+ return super.slice(begin, end);
991
+ }
992
+ toHostView() {
993
+ return new Uint8Array(this.buffer, this.byteOffset, this.length);
994
+ }
995
+ }
996
+ U8Array.BYTES_PER_ELEMENT = 1;
997
+ export class I16Array extends MachineNumericArrayView {
998
+ static fromHostView(view) {
999
+ return new I16Array(view.buffer, view.byteOffset, view.length, true);
1000
+ }
1001
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1002
+ super(buffer, I16Array.BYTES_PER_ELEMENT, byteOffset, length);
1003
+ this._littleEndian = littleEndian;
1004
+ }
1005
+ leafKind() {
1006
+ return 'i16';
1007
+ }
1008
+ readFromView(view, byteOffset) {
1009
+ return readI16(view, byteOffset, this._littleEndian);
1010
+ }
1011
+ writeToView(view, byteOffset, value) {
1012
+ writeI16(view, byteOffset, value, this._littleEndian);
1013
+ }
1014
+ constructSubarray(buffer, byteOffset, length) {
1015
+ return new I16Array(buffer, byteOffset, length, this._littleEndian);
1016
+ }
1017
+ subarray(begin, end) {
1018
+ return super.subarray(begin, end);
1019
+ }
1020
+ slice(begin, end) {
1021
+ return super.slice(begin, end);
1022
+ }
1023
+ toHostView() {
1024
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Int16Array');
1025
+ return new Int16Array(this.buffer, this.byteOffset, this.length);
1026
+ }
1027
+ }
1028
+ I16Array.BYTES_PER_ELEMENT = 2;
1029
+ export class U16Array extends MachineNumericArrayView {
1030
+ static fromHostView(view) {
1031
+ return new U16Array(view.buffer, view.byteOffset, view.length, true);
1032
+ }
1033
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1034
+ super(buffer, U16Array.BYTES_PER_ELEMENT, byteOffset, length);
1035
+ this._littleEndian = littleEndian;
1036
+ }
1037
+ leafKind() {
1038
+ return 'u16';
1039
+ }
1040
+ readFromView(view, byteOffset) {
1041
+ return readU16(view, byteOffset, this._littleEndian);
1042
+ }
1043
+ writeToView(view, byteOffset, value) {
1044
+ writeU16(view, byteOffset, value, this._littleEndian);
1045
+ }
1046
+ constructSubarray(buffer, byteOffset, length) {
1047
+ return new U16Array(buffer, byteOffset, length, this._littleEndian);
1048
+ }
1049
+ subarray(begin, end) {
1050
+ return super.subarray(begin, end);
1051
+ }
1052
+ slice(begin, end) {
1053
+ return super.slice(begin, end);
1054
+ }
1055
+ toHostView() {
1056
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint16Array');
1057
+ return new Uint16Array(this.buffer, this.byteOffset, this.length);
1058
+ }
1059
+ }
1060
+ U16Array.BYTES_PER_ELEMENT = 2;
1061
+ export class I32Array extends MachineNumericArrayView {
1062
+ static fromHostView(view) {
1063
+ return new I32Array(view.buffer, view.byteOffset, view.length, true);
1064
+ }
1065
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1066
+ super(buffer, I32Array.BYTES_PER_ELEMENT, byteOffset, length);
1067
+ this._littleEndian = littleEndian;
1068
+ }
1069
+ leafKind() {
1070
+ return 'i32';
1071
+ }
1072
+ readFromView(view, byteOffset) {
1073
+ return readI32(view, byteOffset, this._littleEndian);
1074
+ }
1075
+ writeToView(view, byteOffset, value) {
1076
+ writeI32(view, byteOffset, value, this._littleEndian);
1077
+ }
1078
+ constructSubarray(buffer, byteOffset, length) {
1079
+ return new I32Array(buffer, byteOffset, length, this._littleEndian);
1080
+ }
1081
+ subarray(begin, end) {
1082
+ return super.subarray(begin, end);
1083
+ }
1084
+ slice(begin, end) {
1085
+ return super.slice(begin, end);
1086
+ }
1087
+ toHostView() {
1088
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Int32Array');
1089
+ return new Int32Array(this.buffer, this.byteOffset, this.length);
1090
+ }
1091
+ }
1092
+ I32Array.BYTES_PER_ELEMENT = 4;
1093
+ export class U32Array extends MachineNumericArrayView {
1094
+ static fromHostView(view) {
1095
+ return new U32Array(view.buffer, view.byteOffset, view.length, true);
1096
+ }
1097
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1098
+ super(buffer, U32Array.BYTES_PER_ELEMENT, byteOffset, length);
1099
+ this._littleEndian = littleEndian;
1100
+ }
1101
+ leafKind() {
1102
+ return 'u32';
1103
+ }
1104
+ readFromView(view, byteOffset) {
1105
+ return readU32(view, byteOffset, this._littleEndian);
1106
+ }
1107
+ writeToView(view, byteOffset, value) {
1108
+ writeU32(view, byteOffset, value, this._littleEndian);
1109
+ }
1110
+ constructSubarray(buffer, byteOffset, length) {
1111
+ return new U32Array(buffer, byteOffset, length, this._littleEndian);
1112
+ }
1113
+ subarray(begin, end) {
1114
+ return super.subarray(begin, end);
1115
+ }
1116
+ slice(begin, end) {
1117
+ return super.slice(begin, end);
1118
+ }
1119
+ toHostView() {
1120
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Uint32Array');
1121
+ return new Uint32Array(this.buffer, this.byteOffset, this.length);
1122
+ }
1123
+ }
1124
+ U32Array.BYTES_PER_ELEMENT = 4;
1125
+ export class I64Array extends MachineNumericArrayView {
1126
+ static fromHostView(view) {
1127
+ return new I64Array(view.buffer, view.byteOffset, view.length, true);
1128
+ }
1129
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1130
+ super(buffer, I64Array.BYTES_PER_ELEMENT, byteOffset, length);
1131
+ this._littleEndian = littleEndian;
1132
+ }
1133
+ leafKind() {
1134
+ return 'i64';
1135
+ }
1136
+ readFromView(view, byteOffset) {
1137
+ return readI64(view, byteOffset, this._littleEndian);
1138
+ }
1139
+ writeToView(view, byteOffset, value) {
1140
+ writeI64(view, byteOffset, value, this._littleEndian);
1141
+ }
1142
+ constructSubarray(buffer, byteOffset, length) {
1143
+ return new I64Array(buffer, byteOffset, length, this._littleEndian);
1144
+ }
1145
+ subarray(begin, end) {
1146
+ return super.subarray(begin, end);
1147
+ }
1148
+ slice(begin, end) {
1149
+ return super.slice(begin, end);
1150
+ }
1151
+ toHostView() {
1152
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'BigInt64Array');
1153
+ return new BigInt64Array(this.buffer, this.byteOffset, this.length);
1154
+ }
1155
+ }
1156
+ I64Array.BYTES_PER_ELEMENT = 8;
1157
+ export class U64Array extends MachineNumericArrayView {
1158
+ static fromHostView(view) {
1159
+ return new U64Array(view.buffer, view.byteOffset, view.length, true);
1160
+ }
1161
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1162
+ super(buffer, U64Array.BYTES_PER_ELEMENT, byteOffset, length);
1163
+ this._littleEndian = littleEndian;
1164
+ }
1165
+ leafKind() {
1166
+ return 'u64';
1167
+ }
1168
+ readFromView(view, byteOffset) {
1169
+ return readU64(view, byteOffset, this._littleEndian);
1170
+ }
1171
+ writeToView(view, byteOffset, value) {
1172
+ writeU64(view, byteOffset, value, this._littleEndian);
1173
+ }
1174
+ constructSubarray(buffer, byteOffset, length) {
1175
+ return new U64Array(buffer, byteOffset, length, this._littleEndian);
1176
+ }
1177
+ subarray(begin, end) {
1178
+ return super.subarray(begin, end);
1179
+ }
1180
+ slice(begin, end) {
1181
+ return super.slice(begin, end);
1182
+ }
1183
+ toHostView() {
1184
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'BigUint64Array');
1185
+ return new BigUint64Array(this.buffer, this.byteOffset, this.length);
1186
+ }
1187
+ }
1188
+ U64Array.BYTES_PER_ELEMENT = 8;
1189
+ export class F32Array extends MachineNumericArrayView {
1190
+ static fromHostView(view) {
1191
+ return new F32Array(view.buffer, view.byteOffset, view.length, true);
1192
+ }
1193
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1194
+ super(buffer, F32Array.BYTES_PER_ELEMENT, byteOffset, length);
1195
+ this._littleEndian = littleEndian;
1196
+ }
1197
+ leafKind() {
1198
+ return 'f32';
1199
+ }
1200
+ readFromView(view, byteOffset) {
1201
+ return readF32(view, byteOffset, this._littleEndian);
1202
+ }
1203
+ writeToView(view, byteOffset, value) {
1204
+ writeF32(view, byteOffset, value, this._littleEndian);
1205
+ }
1206
+ constructSubarray(buffer, byteOffset, length) {
1207
+ return new F32Array(buffer, byteOffset, length, this._littleEndian);
1208
+ }
1209
+ subarray(begin, end) {
1210
+ return super.subarray(begin, end);
1211
+ }
1212
+ slice(begin, end) {
1213
+ return super.slice(begin, end);
1214
+ }
1215
+ toHostView() {
1216
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Float32Array');
1217
+ return new Float32Array(this.buffer, this.byteOffset, this.length);
1218
+ }
1219
+ }
1220
+ F32Array.BYTES_PER_ELEMENT = 4;
1221
+ export class F64Array extends MachineNumericArrayView {
1222
+ static fromHostView(view) {
1223
+ return new F64Array(view.buffer, view.byteOffset, view.length, true);
1224
+ }
1225
+ constructor(buffer, byteOffset = 0, length, littleEndian = true) {
1226
+ super(buffer, F64Array.BYTES_PER_ELEMENT, byteOffset, length);
1227
+ this._littleEndian = littleEndian;
1228
+ }
1229
+ leafKind() {
1230
+ return 'f64';
1231
+ }
1232
+ readFromView(view, byteOffset) {
1233
+ return readF64(view, byteOffset, this._littleEndian);
1234
+ }
1235
+ writeToView(view, byteOffset, value) {
1236
+ writeF64(view, byteOffset, value, this._littleEndian);
1237
+ }
1238
+ constructSubarray(buffer, byteOffset, length) {
1239
+ return new F64Array(buffer, byteOffset, length, this._littleEndian);
1240
+ }
1241
+ subarray(begin, end) {
1242
+ return super.subarray(begin, end);
1243
+ }
1244
+ slice(begin, end) {
1245
+ return super.slice(begin, end);
1246
+ }
1247
+ toHostView() {
1248
+ assertLittleEndianNativeViewBridge(this._littleEndian, 'Float64Array');
1249
+ return new Float64Array(this.buffer, this.byteOffset, this.length);
1250
+ }
1251
+ }
1252
+ F64Array.BYTES_PER_ELEMENT = 8;
1253
+ export function equalAs(leaf, left, right) {
1254
+ return leaf(left) === leaf(right);
1255
+ }
1256
+ export function compareAs(leaf, left, right) {
1257
+ return leaf.compare(leaf(left), leaf(right));
1258
+ }
1259
+ export function eqAs(leaf) {
1260
+ return {
1261
+ equals(left, right) {
1262
+ return equalAs(leaf, left, right);
1263
+ },
1264
+ };
1265
+ }
1266
+ export function orderAs(leaf) {
1267
+ return fromCompare((left, right) => compareAs(leaf, left, right));
1268
+ }
1269
+ export function hashEqAs(leaf) {
1270
+ return fromHashEq((value) => stringHash.hash(keyOf(leaf(value))), (left, right) => equalAs(leaf, left, right));
1271
+ }
1272
+ export function minAs(leaf, values) {
1273
+ let smallest;
1274
+ for (const value of values) {
1275
+ const coerced = leaf(value);
1276
+ if (!smallest || leaf.compare(coerced, smallest) < 0) {
1277
+ smallest = coerced;
1278
+ }
1279
+ }
1280
+ return smallest;
1281
+ }
1282
+ export function maxAs(leaf, values) {
1283
+ let largest;
1284
+ for (const value of values) {
1285
+ const coerced = leaf(value);
1286
+ if (!largest || leaf.compare(coerced, largest) > 0) {
1287
+ largest = coerced;
1288
+ }
1289
+ }
1290
+ return largest;
1291
+ }
1292
+ export function clampAs(leaf, value, minimum, maximum) {
1293
+ const minValue = leaf(minimum);
1294
+ const maxValue = leaf(maximum);
1295
+ if (leaf.compare(minValue, maxValue) > 0) {
1296
+ throw new RangeError('Expected clamp minimum to be less than or equal to clamp maximum.');
1297
+ }
1298
+ const coerced = leaf(value);
1299
+ if (leaf.compare(coerced, minValue) < 0) {
1300
+ return minValue;
1301
+ }
1302
+ if (leaf.compare(coerced, maxValue) > 0) {
1303
+ return maxValue;
1304
+ }
1305
+ return coerced;
1306
+ }
1307
+ export function binarySearchAs(leaf, values, target) {
1308
+ const targetValue = leaf(target);
1309
+ let low = 0;
1310
+ let high = values.length - 1;
1311
+ let foundIndex = -1;
1312
+ while (low <= high) {
1313
+ const mid = (low + high) >> 1;
1314
+ const midValue = leaf(values[mid]);
1315
+ const ordering = leaf.compare(midValue, targetValue);
1316
+ if (ordering < 0) {
1317
+ low = mid + 1;
1318
+ continue;
1319
+ }
1320
+ if (ordering > 0) {
1321
+ high = mid - 1;
1322
+ continue;
1323
+ }
1324
+ foundIndex = mid;
1325
+ high = mid - 1;
1326
+ }
1327
+ return foundIndex;
1328
+ }
1329
+ export function __numericBinary(operator, left, right) {
1330
+ const leftValue = assertMachineNumeric(left);
1331
+ const rightValue = assertMachineNumeric(right);
1332
+ const kind = leftValue.__soundscript_numeric_kind;
1333
+ if (kind !== rightValue.__soundscript_numeric_kind) {
1334
+ throw new TypeError('Mixed machine numeric operators require explicit coercion.');
1335
+ }
1336
+ if (BIGINT_LEAF_KINDS.has(kind)) {
1337
+ const result = applyBigIntBinaryOperator(kind, operator, leftValue.payload(), rightValue.payload());
1338
+ return internMachineNumeric(kind, result);
1339
+ }
1340
+ const result = applyNumberBinaryOperator(operator, leftValue.payload(), rightValue.payload());
1341
+ return internMachineNumeric(kind, result);
1342
+ }
1343
+ export function __numericUnary(operator, value) {
1344
+ const numeric = assertMachineNumeric(value);
1345
+ const kind = numeric.__soundscript_numeric_kind;
1346
+ if (BIGINT_LEAF_KINDS.has(kind)) {
1347
+ if (operator === '+') {
1348
+ throw new TypeError('Unary plus is not supported on bigint-backed machine numerics.');
1349
+ }
1350
+ return internMachineNumeric(kind, applyBigIntUnaryOperator(operator, numeric.payload()));
1351
+ }
1352
+ return internMachineNumeric(kind, applyNumberUnaryOperator(operator, numeric.payload()));
1353
+ }
1354
+ export function __numericWasmLeaf(value) {
1355
+ return value;
1356
+ }