@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,259 @@
1
+ import { type Bind, type Kind3, type TypeLambda } from 'sts:hkt';
2
+ import { Failure } from 'sts:failures';
3
+ import { err, isErr, isOk, isSome, ok, type Option, type Result } from 'sts:result';
4
+ import type { Contravariant } from 'sts:typeclasses';
5
+
6
+ export class EncodeFailure extends Failure {
7
+ constructor(message = 'Failed to encode value.', cause?: unknown) {
8
+ super(message, { cause });
9
+ }
10
+ }
11
+
12
+ // #[variance(T: in, TEncoded: out, E: out)]
13
+ export type Encoder<T, TEncoded = unknown, E = EncodeFailure> = {
14
+ encode(value: T): Result<TEncoded, E>;
15
+ };
16
+
17
+ // #[variance(T: in, TEncoded: out, E: out)]
18
+ export type OptionalEncoder<T, TEncoded = T, E = EncodeFailure> =
19
+ Encoder<T | undefined, TEncoded | undefined, E> & {
20
+ readonly __soundscriptOptional: true;
21
+ readonly inner: Encoder<T, TEncoded, E>;
22
+ };
23
+
24
+ type EncoderInput<TEncoder> = TEncoder extends Encoder<infer T, unknown, unknown> ? T : never;
25
+ type EncoderOutput<TEncoder> = TEncoder extends Encoder<unknown, infer TEncoded, unknown> ? TEncoded
26
+ : never;
27
+ type EncoderError<TEncoder> = TEncoder extends Encoder<unknown, unknown, infer E> ? E : never;
28
+ type ObjectShape = Record<string, Encoder<unknown, unknown, unknown>>;
29
+ type TupleShape = readonly Encoder<unknown, unknown, unknown>[];
30
+
31
+ export interface EncoderF extends TypeLambda {
32
+ readonly type: Encoder<this['Args'][2], this['Args'][1], this['Args'][0]>;
33
+ }
34
+
35
+ export type EncoderKind<E, TEncoded, T> = Kind3<EncoderF, E, TEncoded, T>;
36
+
37
+ export function fromEncode<T, TEncoded, E>(
38
+ encode: (value: T) => Result<TEncoded, E>,
39
+ ): Encoder<T, TEncoded, E> {
40
+ return {
41
+ encode,
42
+ };
43
+ }
44
+
45
+ export function contramap<A, B, TEncoded, E>(
46
+ encoder: Encoder<A, TEncoded, E>,
47
+ project: (value: B) => A,
48
+ ): Encoder<B, TEncoded, E> {
49
+ return fromEncode((value) => encoder.encode(project(value)));
50
+ }
51
+
52
+ export function encoderContravariant<TEncoded, E = EncodeFailure>(): Contravariant<
53
+ Bind<Bind<EncoderF, [E]>, [TEncoded]>
54
+ > {
55
+ return {
56
+ contramap,
57
+ };
58
+ }
59
+
60
+ export const stringEncoder: Encoder<string, string> = fromEncode((value) => ok(value));
61
+ export const numberEncoder: Encoder<number, number> = fromEncode((value) => ok(value));
62
+ export const booleanEncoder: Encoder<boolean, boolean> = fromEncode((value) => ok(value));
63
+ export const bigintEncoder: Encoder<bigint, bigint> = fromEncode((value) => ok(value));
64
+
65
+ export function optional<T, TEncoded, E>(
66
+ encoder: Encoder<T, TEncoded, E>,
67
+ ): OptionalEncoder<T, TEncoded, E> {
68
+ return {
69
+ __soundscriptOptional: true,
70
+ inner: encoder,
71
+ encode(value) {
72
+ return value === undefined ? ok(undefined) : encoder.encode(value);
73
+ },
74
+ };
75
+ }
76
+
77
+ export function lazy<T, TEncoded, E>(
78
+ getEncoder: () => Encoder<T, TEncoded, E>,
79
+ ): Encoder<T, TEncoded, E> {
80
+ return fromEncode((value) => getEncoder().encode(value));
81
+ }
82
+
83
+ export function nullable<T, TEncoded, E>(
84
+ encoder: Encoder<T, TEncoded, E>,
85
+ ): Encoder<T | null, TEncoded | null, E> {
86
+ return fromEncode((value) => value === null ? ok(null) : encoder.encode(value));
87
+ }
88
+
89
+ export function literal<const T extends string | number | boolean | null>(value: T): Encoder<T, T> {
90
+ return fromEncode((input) =>
91
+ Object.is(input, value)
92
+ ? ok(value)
93
+ : err(new EncodeFailure(`Expected literal ${JSON.stringify(value)}.`, input))
94
+ );
95
+ }
96
+
97
+ export function array<T, TEncoded, E>(
98
+ item: Encoder<T, TEncoded, E>,
99
+ ): Encoder<readonly T[], readonly TEncoded[], E | EncodeFailure> {
100
+ return fromEncode((value) => {
101
+ const encodedValues: TEncoded[] = [];
102
+ for (const entry of value) {
103
+ const encoded = item.encode(entry);
104
+ if (isErr(encoded)) {
105
+ return encoded;
106
+ }
107
+ encodedValues.push(encoded.value);
108
+ }
109
+ return ok(encodedValues);
110
+ });
111
+ }
112
+
113
+ export function tuple<const TElements extends TupleShape>(
114
+ ...elements: TElements
115
+ ): Encoder<
116
+ { readonly [K in keyof TElements]: EncoderInput<TElements[K]> },
117
+ { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },
118
+ EncoderError<TElements[number]>
119
+ > {
120
+ return fromEncode((value) => {
121
+ const values = value as readonly unknown[];
122
+ const encodedValues: unknown[] = [];
123
+ for (let index = 0; index < elements.length; index += 1) {
124
+ const elementEncoder = elements[index];
125
+ if (!elementEncoder) {
126
+ continue;
127
+ }
128
+ const encoded = elementEncoder.encode(values[index] as never);
129
+ if (isErr(encoded)) {
130
+ return encoded as Result<
131
+ { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> },
132
+ EncoderError<TElements[number]>
133
+ >;
134
+ }
135
+ encodedValues.push(encoded.value);
136
+ }
137
+ return ok(encodedValues as { readonly [K in keyof TElements]: EncoderOutput<TElements[K]> });
138
+ });
139
+ }
140
+
141
+ export function option<T, TEncoded, E>(
142
+ item: Encoder<T, TEncoded, E>,
143
+ ): Encoder<
144
+ Option<T>,
145
+ { readonly tag: 'none' } | {
146
+ readonly tag: 'some';
147
+ readonly value: TEncoded;
148
+ },
149
+ E
150
+ > {
151
+ return fromEncode<
152
+ Option<T>,
153
+ { readonly tag: 'none' } | {
154
+ readonly tag: 'some';
155
+ readonly value: TEncoded;
156
+ },
157
+ E
158
+ >((value) => {
159
+ if (isSome(value)) {
160
+ const encoded = item.encode(value.value);
161
+ return isErr(encoded) ? encoded : ok({ tag: 'some', value: encoded.value });
162
+ }
163
+
164
+ return ok({ tag: 'none' });
165
+ });
166
+ }
167
+
168
+ export function result<T, EValue, TEncoded, EEncoded, EOk, EErr>(
169
+ okEncoder: Encoder<T, TEncoded, EOk>,
170
+ errEncoder: Encoder<EValue, EEncoded, EErr>,
171
+ ): Encoder<
172
+ Result<T, EValue>,
173
+ { readonly tag: 'ok'; readonly value: TEncoded } | {
174
+ readonly error: EEncoded;
175
+ readonly tag: 'err';
176
+ },
177
+ EOk | EErr
178
+ > {
179
+ return fromEncode<
180
+ Result<T, EValue>,
181
+ { readonly tag: 'ok'; readonly value: TEncoded } | {
182
+ readonly error: EEncoded;
183
+ readonly tag: 'err';
184
+ },
185
+ EOk | EErr
186
+ >((value) => {
187
+ if (isOk(value)) {
188
+ const encoded = okEncoder.encode(value.value);
189
+ return isErr(encoded) ? encoded : ok({ tag: 'ok', value: encoded.value });
190
+ }
191
+
192
+ const encoded = errEncoder.encode(value.error);
193
+ return isErr(encoded) ? encoded : ok({ tag: 'err', error: encoded.value });
194
+ });
195
+ }
196
+
197
+ export function object<TShape extends ObjectShape>(
198
+ shape: TShape,
199
+ ): Encoder<
200
+ { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },
201
+ { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },
202
+ EncoderError<TShape[keyof TShape]> | EncodeFailure
203
+ > {
204
+ return fromEncode<
205
+ { readonly [K in keyof TShape]: EncoderInput<TShape[K]> },
206
+ { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> },
207
+ EncoderError<TShape[keyof TShape]> | EncodeFailure
208
+ >((value) => {
209
+ if (!isPlainObject(value)) {
210
+ return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(
211
+ new EncodeFailure('Expected object.', value),
212
+ );
213
+ }
214
+
215
+ const record = value as Record<string, unknown>;
216
+ const encodedObject: Record<string, unknown> = {};
217
+
218
+ for (const key of Object.keys(shape)) {
219
+ const encoder = shape[key];
220
+ if (!encoder) {
221
+ continue;
222
+ }
223
+ const hasKey = key in record;
224
+ const rawValue = record[key];
225
+
226
+ if (!hasKey || rawValue === undefined) {
227
+ if (isOptionalEncoder(encoder)) {
228
+ encodedObject[key] = undefined;
229
+ continue;
230
+ }
231
+
232
+ return err<EncoderError<TShape[keyof TShape]> | EncodeFailure>(
233
+ new EncodeFailure(`Missing field "${key}".`, value),
234
+ );
235
+ }
236
+
237
+ const encoded = encoder.encode(rawValue as never) as Result<
238
+ unknown,
239
+ EncoderError<TShape[keyof TShape]> | EncodeFailure
240
+ >;
241
+ if (isErr(encoded)) {
242
+ return encoded;
243
+ }
244
+ encodedObject[key] = encoded.value;
245
+ }
246
+
247
+ return ok(encodedObject as { readonly [K in keyof TShape]: EncoderOutput<TShape[K]> });
248
+ });
249
+ }
250
+
251
+ function isOptionalEncoder(
252
+ value: Encoder<unknown, unknown, unknown>,
253
+ ): value is OptionalEncoder<unknown, unknown, unknown> {
254
+ return '__soundscriptOptional' in value && value.__soundscriptOptional === true;
255
+ }
256
+
257
+ function isPlainObject(value: unknown): value is Record<string, unknown> {
258
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
259
+ }
@@ -0,0 +1,23 @@
1
+ export type ErrorFrame = {
2
+ readonly column: number;
3
+ readonly file: string;
4
+ readonly fn?: string;
5
+ readonly line: number;
6
+ };
7
+
8
+ export class Failure {
9
+ readonly cause?: unknown;
10
+ readonly message: string;
11
+ readonly name: string;
12
+ readonly trace: readonly ErrorFrame[];
13
+ constructor(
14
+ message?: string,
15
+ options?: {
16
+ cause?: unknown;
17
+ trace?: readonly ErrorFrame[];
18
+ },
19
+ );
20
+ withFrame(frame: ErrorFrame): this;
21
+ }
22
+
23
+ export function normalizeThrown(value: unknown): Error;
@@ -0,0 +1,41 @@
1
+ export class Failure {
2
+ constructor(message = '', options = {}) {
3
+ this.name = new.target.name;
4
+ this.message = message;
5
+ if ('cause' in options) {
6
+ this.cause = options.cause;
7
+ }
8
+ this.trace = options.trace ?? [];
9
+ }
10
+ withFrame(frame) {
11
+ const prototype = Object.getPrototypeOf(this);
12
+ const clone = (prototype === null ? Object.create(null) : Object.create(prototype));
13
+ Object.defineProperties(clone, Object.getOwnPropertyDescriptors(this));
14
+ Object.defineProperty(clone, 'trace', {
15
+ configurable: true,
16
+ enumerable: true,
17
+ writable: false,
18
+ value: [...this.trace, frame],
19
+ });
20
+ return clone;
21
+ }
22
+ }
23
+ export function normalizeThrown(value) {
24
+ if (value instanceof Error) {
25
+ return value;
26
+ }
27
+ const details = typeof value === 'object' && value !== null
28
+ ? value
29
+ : undefined;
30
+ const message = typeof details?.message === 'string'
31
+ ? details.message
32
+ : 'Non-Error thrown value.';
33
+ const error = new Error(message, { cause: value });
34
+ if (typeof details?.name === 'string') {
35
+ error.name = details.name;
36
+ }
37
+ if (typeof details?.stack === 'string') {
38
+ error.stack = details.stack;
39
+ }
40
+ return error;
41
+ }
@@ -0,0 +1,64 @@
1
+ export type ErrorFrame = {
2
+ readonly column: number;
3
+ readonly file: string;
4
+ readonly fn?: string;
5
+ readonly line: number;
6
+ };
7
+
8
+ export class Failure {
9
+ readonly cause?: unknown;
10
+ readonly message: string;
11
+ readonly name: string;
12
+ readonly trace: readonly ErrorFrame[];
13
+
14
+ constructor(
15
+ message = '',
16
+ options: {
17
+ cause?: unknown;
18
+ trace?: readonly ErrorFrame[];
19
+ } = {},
20
+ ) {
21
+ this.name = new.target.name;
22
+ this.message = message;
23
+ if ('cause' in options) {
24
+ this.cause = options.cause;
25
+ }
26
+ this.trace = options.trace ?? [];
27
+ }
28
+
29
+ withFrame(frame: ErrorFrame): this {
30
+ const prototype = Object.getPrototypeOf(this as object);
31
+ const clone = (prototype === null ? Object.create(null) : Object.create(prototype)) as this;
32
+ Object.defineProperties(clone, Object.getOwnPropertyDescriptors(this));
33
+ Object.defineProperty(clone, 'trace', {
34
+ configurable: true,
35
+ enumerable: true,
36
+ writable: false,
37
+ value: [...this.trace, frame],
38
+ });
39
+ return clone;
40
+ }
41
+ }
42
+
43
+ export function normalizeThrown(value: unknown): Error {
44
+ if (value instanceof Error) {
45
+ return value;
46
+ }
47
+
48
+ const details = typeof value === 'object' && value !== null
49
+ ? value as { message?: unknown; name?: unknown; stack?: unknown }
50
+ : undefined;
51
+ const message = typeof details?.message === 'string'
52
+ ? details.message
53
+ : 'Non-Error thrown value.';
54
+ const error = new Error(message, { cause: value });
55
+
56
+ if (typeof details?.name === 'string') {
57
+ error.name = details.name;
58
+ }
59
+ if (typeof details?.stack === 'string') {
60
+ error.stack = details.stack;
61
+ }
62
+
63
+ return error;
64
+ }
@@ -0,0 +1,67 @@
1
+ import { URL, URLSearchParams } from 'sts:url';
2
+
3
+ export interface AbortSignal {
4
+ readonly aborted: boolean;
5
+ readonly reason: unknown;
6
+ throwIfAborted(): void;
7
+ }
8
+
9
+ export type HeadersInit = Headers | Iterable<readonly [string, string]> | Record<string, string>;
10
+ export type BodyInit = ArrayBuffer | string | Uint8Array<ArrayBufferLike> | URLSearchParams;
11
+ export type RequestInfo = Request | string | URL;
12
+
13
+ export interface RequestInit {
14
+ readonly body?: BodyInit | null;
15
+ readonly headers?: HeadersInit;
16
+ readonly method?: string;
17
+ readonly signal?: AbortSignal | null;
18
+ }
19
+
20
+ export interface ResponseInit {
21
+ readonly headers?: HeadersInit;
22
+ readonly status?: number;
23
+ readonly statusText?: string;
24
+ }
25
+
26
+ export declare class Headers {
27
+ constructor(init?: HeadersInit);
28
+ append(name: string, value: string): void;
29
+ delete(name: string): void;
30
+ entries(): IterableIterator<[string, string]>;
31
+ get(name: string): string | null;
32
+ has(name: string): boolean;
33
+ keys(): IterableIterator<string>;
34
+ set(name: string, value: string): void;
35
+ values(): IterableIterator<string>;
36
+ [Symbol.iterator](): IterableIterator<[string, string]>;
37
+ }
38
+
39
+ export declare class Request {
40
+ constructor(input: RequestInfo, init?: RequestInit);
41
+ readonly headers: Headers;
42
+ readonly method: string;
43
+ readonly signal: AbortSignal;
44
+ readonly url: string;
45
+ arrayBuffer(): Promise<ArrayBuffer>;
46
+ clone(): Request;
47
+ json(): Promise<unknown>;
48
+ text(): Promise<string>;
49
+ }
50
+
51
+ export declare class Response {
52
+ constructor(body?: BodyInit | null, init?: ResponseInit);
53
+ readonly headers: Headers;
54
+ readonly ok: boolean;
55
+ readonly status: number;
56
+ readonly statusText: string;
57
+ readonly url: string;
58
+ arrayBuffer(): Promise<ArrayBuffer>;
59
+ clone(): Response;
60
+ json(): Promise<unknown>;
61
+ text(): Promise<string>;
62
+ static error(): Response;
63
+ static json(data: unknown, init?: ResponseInit): Response;
64
+ static redirect(url: string | URL, status?: number): Response;
65
+ }
66
+
67
+ export declare function fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
@@ -0,0 +1,5 @@
1
+ const fetchFn = fetch;
2
+ const HeadersCtor = Headers;
3
+ const RequestCtor = Request;
4
+ const ResponseCtor = Response;
5
+ export { fetchFn as fetch, HeadersCtor as Headers, RequestCtor as Request, ResponseCtor as Response, };
@@ -0,0 +1,11 @@
1
+ const fetchFn = fetch;
2
+ const HeadersCtor = Headers;
3
+ const RequestCtor = Request;
4
+ const ResponseCtor = Response;
5
+
6
+ export {
7
+ fetchFn as fetch,
8
+ HeadersCtor as Headers,
9
+ RequestCtor as Request,
10
+ ResponseCtor as Response,
11
+ };
@@ -0,0 +1,16 @@
1
+ export interface GraphqlRawFragment {
2
+ readonly __graphqlKind: 'raw';
3
+ readonly text: string;
4
+ }
5
+
6
+ export interface GraphqlQuery {
7
+ readonly query: string;
8
+ readonly values: readonly unknown[];
9
+ }
10
+
11
+ export interface GraphqlTag {
12
+ (strings: TemplateStringsArray, ...values: readonly unknown[]): GraphqlQuery;
13
+ raw(text: string): GraphqlRawFragment;
14
+ }
15
+
16
+ export const graphql: GraphqlTag;
@@ -0,0 +1,9 @@
1
+ const graphqlTag = Object.assign((strings, ...values) => ({
2
+ query: String.raw({ raw: strings }, ...values.map(String)),
3
+ values: [...values],
4
+ }), {
5
+ raw(text) {
6
+ return { __graphqlKind: 'raw', text };
7
+ },
8
+ });
9
+ export const graphql = graphqlTag;
@@ -0,0 +1,28 @@
1
+ export interface GraphqlRawFragment {
2
+ readonly __graphqlKind: 'raw';
3
+ readonly text: string;
4
+ }
5
+
6
+ export interface GraphqlQuery {
7
+ readonly query: string;
8
+ readonly values: readonly unknown[];
9
+ }
10
+
11
+ export interface GraphqlTag {
12
+ (strings: TemplateStringsArray, ...values: readonly unknown[]): GraphqlQuery;
13
+ raw(text: string): GraphqlRawFragment;
14
+ }
15
+
16
+ const graphqlTag: GraphqlTag = Object.assign(
17
+ (strings: TemplateStringsArray, ...values: readonly unknown[]): GraphqlQuery => ({
18
+ query: String.raw({ raw: strings }, ...values.map(String)),
19
+ values: [...values],
20
+ }),
21
+ {
22
+ raw(text: string): GraphqlRawFragment {
23
+ return { __graphqlKind: 'raw', text };
24
+ },
25
+ },
26
+ );
27
+
28
+ export const graphql = graphqlTag;
@@ -0,0 +1,34 @@
1
+ import type { Eq } from 'sts:compare';
2
+ import type { Option, Result } from 'sts:result';
3
+
4
+ export type HashCode = number;
5
+
6
+ export interface Hash<T> {
7
+ hash(value: T): HashCode;
8
+ }
9
+
10
+ export interface HashEq<T> extends Hash<T>, Eq<T> {}
11
+
12
+ type HashEqValue<THashEq> = THashEq extends HashEq<infer TValue> ? TValue : never;
13
+
14
+ export function fromHashEq<T>(
15
+ hash: (value: T) => HashCode,
16
+ equals: (left: T, right: T) => boolean,
17
+ ): HashEq<T>;
18
+ export function contramap<A, B>(
19
+ hashEq: HashEq<A>,
20
+ project: (value: B) => A,
21
+ ): HashEq<B>;
22
+ export function lazyHashEq<T>(getHashEq: () => HashEq<T>): HashEq<T>;
23
+ export function arrayHash<T>(itemHash: HashEq<T>): HashEq<readonly T[]>;
24
+ export function tupleHash<const THashEqs extends readonly HashEq<unknown>[]>(
25
+ ...elements: THashEqs
26
+ ): HashEq<{ readonly [K in keyof THashEqs]: HashEqValue<THashEqs[K]> }>;
27
+ export function optionHash<T>(itemHash: HashEq<T>): HashEq<Option<T>>;
28
+ export function resultHash<T, E>(okHash: HashEq<T>, errHash: HashEq<E>): HashEq<Result<T, E>>;
29
+
30
+ export const stringHash: HashEq<string>;
31
+ export const numberHash: HashEq<number>;
32
+ export const booleanHash: HashEq<boolean>;
33
+ export const bigintHash: HashEq<bigint>;
34
+ export function combineHashes(...hashes: readonly HashCode[]): HashCode;
@@ -0,0 +1,110 @@
1
+ import { isErr, isNone, isOk, isSome } from '@soundscript/soundscript/result';
2
+ export function fromHashEq(hash, equals) {
3
+ return {
4
+ hash(value) {
5
+ return normalizeHashCode(hash(value));
6
+ },
7
+ equals,
8
+ };
9
+ }
10
+ export function contramap(hashEq, project) {
11
+ return fromHashEq((value) => hashEq.hash(project(value)), (left, right) => hashEq.equals(project(left), project(right)));
12
+ }
13
+ export function lazyHashEq(getHashEq) {
14
+ return fromHashEq((value) => getHashEq().hash(value), (left, right) => getHashEq().equals(left, right));
15
+ }
16
+ export function arrayHash(itemHash) {
17
+ return fromHashEq((value) => combineHashes(...value.map((entry) => itemHash.hash(entry))), (left, right) => {
18
+ if (left.length !== right.length) {
19
+ return false;
20
+ }
21
+ for (let index = 0; index < left.length; index += 1) {
22
+ if (!itemHash.equals(left[index], right[index])) {
23
+ return false;
24
+ }
25
+ }
26
+ return true;
27
+ });
28
+ }
29
+ export function tupleHash(...elements) {
30
+ return fromHashEq((value) => {
31
+ const values = value;
32
+ if (values.length !== elements.length) {
33
+ return 0;
34
+ }
35
+ return combineHashes(...elements.map((elementHash, index) => elementHash.hash(values[index])));
36
+ }, (left, right) => {
37
+ const leftValues = left;
38
+ const rightValues = right;
39
+ if (leftValues.length !== elements.length || rightValues.length !== elements.length) {
40
+ return false;
41
+ }
42
+ for (let index = 0; index < elements.length; index += 1) {
43
+ const elementHash = elements[index];
44
+ if (!elementHash) {
45
+ continue;
46
+ }
47
+ if (!elementHash.equals(leftValues[index], rightValues[index])) {
48
+ return false;
49
+ }
50
+ }
51
+ return true;
52
+ });
53
+ }
54
+ export function optionHash(itemHash) {
55
+ return fromHashEq((value) => isSome(value)
56
+ ? combineHashes(stringHash.hash('some'), itemHash.hash(value.value))
57
+ : stringHash.hash('none'), (left, right) => {
58
+ if (isSome(left) && isSome(right)) {
59
+ return itemHash.equals(left.value, right.value);
60
+ }
61
+ return isNone(left) && isNone(right);
62
+ });
63
+ }
64
+ export function resultHash(okHash, errHash) {
65
+ return fromHashEq((value) => isOk(value)
66
+ ? combineHashes(stringHash.hash('ok'), okHash.hash(value.value))
67
+ : combineHashes(stringHash.hash('err'), errHash.hash(value.error)), (left, right) => {
68
+ if (isOk(left) && isOk(right)) {
69
+ return okHash.equals(left.value, right.value);
70
+ }
71
+ if (isErr(left) && isErr(right)) {
72
+ return errHash.equals(left.error, right.error);
73
+ }
74
+ return false;
75
+ });
76
+ }
77
+ export const stringHash = fromHashEq(hashString, (left, right) => left === right);
78
+ export const numberHash = fromHashEq((value) => hashString(normalizeNumberKey(value)), (left, right) => left === right || (Number.isNaN(left) && Number.isNaN(right)));
79
+ export const booleanHash = fromHashEq((value) => value ? 1 : 0, (left, right) => left === right);
80
+ export const bigintHash = fromHashEq((value) => hashString(value.toString()), (left, right) => left === right);
81
+ export function combineHashes(...hashes) {
82
+ let hash = 0;
83
+ for (const value of hashes) {
84
+ hash = Math.imul(hash ^ normalizeHashCode(value), 0x01000193);
85
+ }
86
+ return normalizeHashCode(hash);
87
+ }
88
+ function normalizeHashCode(value) {
89
+ if (!Number.isFinite(value)) {
90
+ return 0;
91
+ }
92
+ return value | 0;
93
+ }
94
+ function normalizeNumberKey(value) {
95
+ if (Number.isNaN(value)) {
96
+ return 'NaN';
97
+ }
98
+ if (value === 0) {
99
+ return '0';
100
+ }
101
+ return String(value);
102
+ }
103
+ function hashString(value) {
104
+ let hash = 0x811c9dc5;
105
+ for (let index = 0; index < value.length; index += 1) {
106
+ hash ^= value.charCodeAt(index);
107
+ hash = Math.imul(hash, 0x01000193);
108
+ }
109
+ return hash | 0;
110
+ }