@soundscript/soundscript 0.1.13 → 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,57 @@
1
+ import type { Binder, BoundEffect, Kind, MonadTypeLambda, TypeLambda } from 'sts:hkt';
2
+
3
+ export interface Contravariant<F extends TypeLambda> {
4
+ readonly __type_lambda?: F;
5
+ contramap<A, B>(value: Kind<F, A>, project: (value: B) => A): Kind<F, B>;
6
+ }
7
+
8
+ export interface Invariant<F extends TypeLambda> {
9
+ readonly __type_lambda?: F;
10
+ imap<A, B>(
11
+ value: Kind<F, A>,
12
+ decodeMap: (value: A) => B,
13
+ encodeMap: (value: B) => A,
14
+ ): Kind<F, B>;
15
+ }
16
+
17
+ export interface Functor<F extends TypeLambda> {
18
+ readonly __type_lambda?: F;
19
+ map<A, B>(value: Kind<F, A>, f: (value: A) => B): Kind<F, B>;
20
+ }
21
+
22
+ export interface Applicative<F extends TypeLambda> extends Functor<F> {
23
+ ap<A, B>(fn: Kind<F, (value: A) => B>, value: Kind<F, A>): Kind<F, B>;
24
+ pure<A>(value: A): Kind<F, A>;
25
+ }
26
+
27
+ export interface Monad<F extends TypeLambda> extends Applicative<F> {
28
+ flatMap<A, B>(value: Kind<F, A>, f: (value: A) => Kind<F, B>): Kind<F, B>;
29
+ }
30
+
31
+ export interface AsyncMonad<F extends TypeLambda> extends Monad<F> {
32
+ fromPromise<A>(promise: Promise<A>): Kind<F, A>;
33
+ }
34
+
35
+ export function monadGen<F extends TypeLambda, T>(
36
+ monad: Monad<F>,
37
+ factory: () => Generator<Kind<F, unknown>, T, unknown>,
38
+ ): Kind<F, T>;
39
+
40
+ export type DoBinder<M extends Monad<TypeLambda>> = Binder<MonadTypeLambda<M>>;
41
+
42
+ export interface DoRuntime {
43
+ <F extends TypeLambda, T>(
44
+ monad: Monad<F>,
45
+ body: (bind: Binder<F>) => T,
46
+ ): Kind<F, T>;
47
+ <F extends TypeLambda, T>(
48
+ monad: AsyncMonad<F>,
49
+ body: (bind: Binder<F>) => T | Promise<T>,
50
+ ): Kind<F, T>;
51
+ readonly macroBind: <F extends TypeLambda>(
52
+ monad: Monad<F>,
53
+ ) => <A>(effect: BoundEffect<F, A>, value: unknown) => A;
54
+ readonly macroGen: typeof monadGen;
55
+ }
56
+
57
+ export const Do: DoRuntime;
@@ -0,0 +1,78 @@
1
+ function runGenerator(monad, iterator, input) {
2
+ const step = iterator.next(input);
3
+ if (step.done) {
4
+ return monad.pure(step.value);
5
+ }
6
+ return monad.flatMap(step.value, (nextInput) => runGenerator(monad, iterator, nextInput));
7
+ }
8
+ export function monadGen(monad, factory) {
9
+ return runGenerator(monad, factory());
10
+ }
11
+ function bindValue(_monad) {
12
+ return function bindRuntimeValue(_effect, value) {
13
+ return value;
14
+ };
15
+ }
16
+ class DoBindSignal {
17
+ constructor(effect) {
18
+ this.effect = effect;
19
+ }
20
+ }
21
+ function executeDoBody(body, resolvedValues) {
22
+ let index = 0;
23
+ function bind(effect) {
24
+ if (index < resolvedValues.length) {
25
+ return resolvedValues[index++];
26
+ }
27
+ throw new DoBindSignal(effect);
28
+ }
29
+ try {
30
+ return { done: true, value: body(bind) };
31
+ }
32
+ catch (error) {
33
+ if (error instanceof DoBindSignal) {
34
+ return { done: false, effect: error.effect };
35
+ }
36
+ throw error;
37
+ }
38
+ }
39
+ async function executeAsyncDoBody(body, resolvedValues) {
40
+ let index = 0;
41
+ function bind(effect) {
42
+ if (index < resolvedValues.length) {
43
+ return resolvedValues[index++];
44
+ }
45
+ throw new DoBindSignal(effect);
46
+ }
47
+ try {
48
+ return { done: true, value: await body(bind) };
49
+ }
50
+ catch (error) {
51
+ if (error instanceof DoBindSignal) {
52
+ return { done: false, effect: error.effect };
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+ function runDo(monad, body, resolvedValues = []) {
58
+ const step = executeDoBody(body, resolvedValues);
59
+ if (step.done) {
60
+ return monad.pure(step.value);
61
+ }
62
+ return monad.flatMap(step.effect, (value) => runDo(monad, body, [...resolvedValues, value]));
63
+ }
64
+ function runAsyncDo(monad, body, resolvedValues = []) {
65
+ return monad.flatMap(monad.fromPromise(executeAsyncDoBody(body, resolvedValues)), (step) => step.done ? monad.pure(step.value) : monad.flatMap(step.effect, (value) => runAsyncDo(monad, body, [...resolvedValues, value])));
66
+ }
67
+ function createDoRuntime() {
68
+ function runtime(monad, body) {
69
+ return 'fromPromise' in monad
70
+ ? runAsyncDo(monad, body, [])
71
+ : runDo(monad, body, []);
72
+ }
73
+ const doRuntime = runtime;
74
+ Object.assign(doRuntime, { macroBind: bindValue, macroGen: monadGen });
75
+ return doRuntime;
76
+ }
77
+ // The compiler lowers `Do(...)` to `Do.macroGen(...)`, but keep a callable runtime bridge.
78
+ export const Do = createDoRuntime();
@@ -0,0 +1,173 @@
1
+ import type { Binder, BoundEffect, Kind, MonadTypeLambda, TypeLambda } from 'sts:hkt';
2
+
3
+ export interface Contravariant<F extends TypeLambda> {
4
+ readonly __type_lambda?: F;
5
+ contramap<A, B>(value: Kind<F, A>, project: (value: B) => A): Kind<F, B>;
6
+ }
7
+
8
+ export interface Invariant<F extends TypeLambda> {
9
+ readonly __type_lambda?: F;
10
+ imap<A, B>(
11
+ value: Kind<F, A>,
12
+ decodeMap: (value: A) => B,
13
+ encodeMap: (value: B) => A,
14
+ ): Kind<F, B>;
15
+ }
16
+
17
+ export interface Functor<F extends TypeLambda> {
18
+ readonly __type_lambda?: F;
19
+ map<A, B>(value: Kind<F, A>, f: (value: A) => B): Kind<F, B>;
20
+ }
21
+
22
+ export interface Applicative<F extends TypeLambda> extends Functor<F> {
23
+ ap<A, B>(fn: Kind<F, (value: A) => B>, value: Kind<F, A>): Kind<F, B>;
24
+ pure<A>(value: A): Kind<F, A>;
25
+ }
26
+
27
+ export interface Monad<F extends TypeLambda> extends Applicative<F> {
28
+ flatMap<A, B>(value: Kind<F, A>, f: (value: A) => Kind<F, B>): Kind<F, B>;
29
+ }
30
+
31
+ export interface AsyncMonad<F extends TypeLambda> extends Monad<F> {
32
+ fromPromise<A>(promise: Promise<A>): Kind<F, A>;
33
+ }
34
+
35
+ function runGenerator<F extends TypeLambda, T>(
36
+ monad: Monad<F>,
37
+ iterator: Generator<Kind<F, unknown>, T, unknown>,
38
+ input?: unknown,
39
+ ): Kind<F, T> {
40
+ const step = iterator.next(input as never);
41
+ if (step.done) {
42
+ return monad.pure(step.value);
43
+ }
44
+
45
+ return monad.flatMap(step.value, (nextInput) => runGenerator(monad, iterator, nextInput));
46
+ }
47
+
48
+ export function monadGen<F extends TypeLambda, T>(
49
+ monad: Monad<F>,
50
+ factory: () => Generator<Kind<F, unknown>, T, unknown>,
51
+ ): Kind<F, T> {
52
+ return runGenerator(monad, factory());
53
+ }
54
+
55
+ function bindValue<F extends TypeLambda>(_monad: Monad<F>) {
56
+ return function bindRuntimeValue<A>(_effect: BoundEffect<F, A>, value: unknown): A {
57
+ return value as A;
58
+ };
59
+ }
60
+
61
+ export type DoBinder<M extends Monad<TypeLambda>> = Binder<MonadTypeLambda<M>>;
62
+
63
+ class DoBindSignal<F extends TypeLambda> {
64
+ readonly effect: Kind<F, unknown>;
65
+
66
+ constructor(effect: Kind<F, unknown>) {
67
+ this.effect = effect;
68
+ }
69
+ }
70
+
71
+ function executeDoBody<F extends TypeLambda, T>(
72
+ body: (bind: Binder<F>) => T,
73
+ resolvedValues: readonly unknown[],
74
+ ): { done: true; value: T } | { done: false; effect: Kind<F, unknown> } {
75
+ let index = 0;
76
+ function bind<A>(effect: BoundEffect<F, A>): A {
77
+ if (index < resolvedValues.length) {
78
+ return resolvedValues[index++] as A;
79
+ }
80
+ throw new DoBindSignal(effect);
81
+ }
82
+
83
+ try {
84
+ return { done: true, value: body(bind) };
85
+ } catch (error) {
86
+ if (error instanceof DoBindSignal) {
87
+ return { done: false, effect: error.effect };
88
+ }
89
+ throw error;
90
+ }
91
+ }
92
+
93
+ async function executeAsyncDoBody<F extends TypeLambda, T>(
94
+ body: (bind: Binder<F>) => T | Promise<T>,
95
+ resolvedValues: readonly unknown[],
96
+ ): Promise<{ done: true; value: T } | { done: false; effect: Kind<F, unknown> }> {
97
+ let index = 0;
98
+ function bind<A>(effect: BoundEffect<F, A>): A {
99
+ if (index < resolvedValues.length) {
100
+ return resolvedValues[index++] as A;
101
+ }
102
+ throw new DoBindSignal(effect);
103
+ }
104
+
105
+ try {
106
+ return { done: true, value: await body(bind) };
107
+ } catch (error) {
108
+ if (error instanceof DoBindSignal) {
109
+ return { done: false, effect: error.effect };
110
+ }
111
+ throw error;
112
+ }
113
+ }
114
+
115
+ function runDo<F extends TypeLambda, T>(
116
+ monad: Monad<F>,
117
+ body: (bind: Binder<F>) => T,
118
+ resolvedValues: readonly unknown[] = [],
119
+ ): Kind<F, T> {
120
+ const step = executeDoBody(body, resolvedValues);
121
+ if (step.done) {
122
+ return monad.pure(step.value);
123
+ }
124
+ return monad.flatMap(step.effect, (value) => runDo(monad, body, [...resolvedValues, value]));
125
+ }
126
+
127
+ function runAsyncDo<F extends TypeLambda, T>(
128
+ monad: AsyncMonad<F>,
129
+ body: (bind: Binder<F>) => T | Promise<T>,
130
+ resolvedValues: readonly unknown[] = [],
131
+ ): Kind<F, T> {
132
+ return monad.flatMap(
133
+ monad.fromPromise(executeAsyncDoBody(body, resolvedValues)),
134
+ (step) =>
135
+ step.done ? monad.pure(step.value) : monad.flatMap(
136
+ step.effect,
137
+ (value) => runAsyncDo(monad, body, [...resolvedValues, value]),
138
+ ),
139
+ );
140
+ }
141
+
142
+ export interface DoRuntime {
143
+ <F extends TypeLambda, T>(
144
+ monad: Monad<F>,
145
+ body: (bind: Binder<F>) => T,
146
+ ): Kind<F, T>;
147
+ <F extends TypeLambda, T>(
148
+ monad: AsyncMonad<F>,
149
+ body: (bind: Binder<F>) => T | Promise<T>,
150
+ ): Kind<F, T>;
151
+ readonly macroBind: <F extends TypeLambda>(
152
+ monad: Monad<F>,
153
+ ) => <A>(effect: BoundEffect<F, A>, value: unknown) => A;
154
+ readonly macroGen: typeof monadGen;
155
+ }
156
+
157
+ function createDoRuntime(): DoRuntime {
158
+ function runtime<F extends TypeLambda, T>(
159
+ monad: Monad<F>,
160
+ body: (bind: Binder<F>) => T | Promise<T>,
161
+ ): Kind<F, T> {
162
+ return 'fromPromise' in monad
163
+ ? runAsyncDo(monad as AsyncMonad<F>, body, [])
164
+ : runDo(monad, body as (bind: Binder<F>) => T, []);
165
+ }
166
+
167
+ const doRuntime = runtime as DoRuntime;
168
+ Object.assign(doRuntime, { macroBind: bindValue, macroGen: monadGen });
169
+ return doRuntime;
170
+ }
171
+
172
+ // The compiler lowers `Do(...)` to `Do.macroGen(...)`, but keep a callable runtime bridge.
173
+ export const Do = createDoRuntime();
@@ -0,0 +1,37 @@
1
+ export declare class URLSearchParams {
2
+ constructor(
3
+ init?:
4
+ | Iterable<readonly [string, string]>
5
+ | Record<string, string>
6
+ | string
7
+ | URLSearchParams,
8
+ );
9
+ append(name: string, value: string): void;
10
+ delete(name: string): void;
11
+ entries(): IterableIterator<[string, string]>;
12
+ get(name: string): string | null;
13
+ has(name: string): boolean;
14
+ keys(): IterableIterator<string>;
15
+ set(name: string, value: string): void;
16
+ toString(): string;
17
+ values(): IterableIterator<string>;
18
+ [Symbol.iterator](): IterableIterator<[string, string]>;
19
+ }
20
+
21
+ export declare class URL {
22
+ constructor(url: string, base?: string | URL);
23
+ hash: string;
24
+ host: string;
25
+ hostname: string;
26
+ href: string;
27
+ readonly origin: string;
28
+ password: string;
29
+ pathname: string;
30
+ port: string;
31
+ protocol: string;
32
+ search: string;
33
+ readonly searchParams: URLSearchParams;
34
+ username: string;
35
+ toJSON(): string;
36
+ toString(): string;
37
+ }
@@ -0,0 +1,3 @@
1
+ const URLCtor = URL;
2
+ const URLSearchParamsCtor = URLSearchParams;
3
+ export { URLCtor as URL, URLSearchParamsCtor as URLSearchParams };
@@ -0,0 +1,4 @@
1
+ const URLCtor = URL;
2
+ const URLSearchParamsCtor = URLSearchParams;
3
+
4
+ export { URLCtor as URL, URLSearchParamsCtor as URLSearchParams };
@@ -0,0 +1,9 @@
1
+ export function __valueShallowToken(value: unknown): string;
2
+ export function __valueDeepToken(value: unknown): string;
3
+ export function __valueKey(...tokens: readonly string[]): string;
4
+ export function __valueReadonly(target: object, key: PropertyKey, value: unknown): void;
5
+ export function __valueFactory<T extends object, TArgs extends readonly unknown[]>(
6
+ keyOf: (...args: TArgs) => string,
7
+ allocate: () => T,
8
+ init: (instance: T, ...args: TArgs) => void,
9
+ ): (...args: TArgs) => T;
@@ -0,0 +1,104 @@
1
+ const REFERENCE_IDS = new WeakMap();
2
+ const SYMBOL_IDS = new Map();
3
+ const VALUE_IDS = new WeakMap();
4
+ let nextValueIdentity = 1;
5
+ function nextIdentityId() {
6
+ const id = nextValueIdentity;
7
+ nextValueIdentity += 1;
8
+ return id;
9
+ }
10
+ function normalizeNumberToken(value) {
11
+ if (Number.isNaN(value)) {
12
+ return 'NaN';
13
+ }
14
+ if (value === 0) {
15
+ return '0';
16
+ }
17
+ return String(value);
18
+ }
19
+ function referenceIdentity(value) {
20
+ const existing = REFERENCE_IDS.get(value);
21
+ if (existing !== undefined) {
22
+ return existing;
23
+ }
24
+ const created = nextIdentityId();
25
+ REFERENCE_IDS.set(value, created);
26
+ return created;
27
+ }
28
+ function symbolIdentity(value) {
29
+ const existing = SYMBOL_IDS.get(value);
30
+ if (existing !== undefined) {
31
+ return existing;
32
+ }
33
+ const created = nextIdentityId();
34
+ SYMBOL_IDS.set(value, created);
35
+ return created;
36
+ }
37
+ function tryValueIdentity(value) {
38
+ return VALUE_IDS.get(value);
39
+ }
40
+ function tokenFor(value, deep) {
41
+ switch (typeof value) {
42
+ case 'undefined':
43
+ return 'undefined';
44
+ case 'boolean':
45
+ return value ? 'boolean:true' : 'boolean:false';
46
+ case 'number':
47
+ return `number:${normalizeNumberToken(value)}`;
48
+ case 'bigint':
49
+ return `bigint:${value.toString()}`;
50
+ case 'string':
51
+ return `string:${JSON.stringify(value)}`;
52
+ case 'symbol':
53
+ return `symbol:${symbolIdentity(value)}`;
54
+ case 'function':
55
+ return `ref:${referenceIdentity(value)}`;
56
+ case 'object':
57
+ if (value === null) {
58
+ return 'null';
59
+ }
60
+ {
61
+ const identity = tryValueIdentity(value);
62
+ if (identity !== undefined) {
63
+ return `value:${identity}`;
64
+ }
65
+ }
66
+ if (deep) {
67
+ throw new TypeError('Deep value fields must be recursively deep-safe.');
68
+ }
69
+ return `ref:${referenceIdentity(value)}`;
70
+ }
71
+ }
72
+ export function __valueShallowToken(value) {
73
+ return tokenFor(value, false);
74
+ }
75
+ export function __valueDeepToken(value) {
76
+ return tokenFor(value, true);
77
+ }
78
+ export function __valueKey(...tokens) {
79
+ return JSON.stringify(tokens);
80
+ }
81
+ export function __valueReadonly(target, key, value) {
82
+ Object.defineProperty(target, key, {
83
+ value,
84
+ enumerable: true,
85
+ writable: false,
86
+ configurable: false,
87
+ });
88
+ }
89
+ export function __valueFactory(keyOf, allocate, init) {
90
+ const cache = new Map();
91
+ return (...args) => {
92
+ const key = keyOf(...args);
93
+ const existing = cache.get(key);
94
+ if (existing !== undefined) {
95
+ return existing;
96
+ }
97
+ const instance = allocate();
98
+ init(instance, ...args);
99
+ VALUE_IDS.set(instance, nextIdentityId());
100
+ Object.freeze(instance);
101
+ cache.set(key, instance);
102
+ return instance;
103
+ };
104
+ }
@@ -0,0 +1,133 @@
1
+ type ValueFactoryArgs<TArgs extends readonly unknown[]> = TArgs;
2
+
3
+ const REFERENCE_IDS = new WeakMap<object, number>();
4
+ const SYMBOL_IDS = new Map<symbol, number>();
5
+ const VALUE_IDS = new WeakMap<object, number>();
6
+
7
+ let nextValueIdentity = 1;
8
+
9
+ function nextIdentityId(): number {
10
+ const id = nextValueIdentity;
11
+ nextValueIdentity += 1;
12
+ return id;
13
+ }
14
+
15
+ function normalizeNumberToken(value: number): string {
16
+ if (Number.isNaN(value)) {
17
+ return 'NaN';
18
+ }
19
+ if (value === 0) {
20
+ return '0';
21
+ }
22
+ return String(value);
23
+ }
24
+
25
+ function referenceIdentity(value: object): number {
26
+ const existing = REFERENCE_IDS.get(value);
27
+ if (existing !== undefined) {
28
+ return existing;
29
+ }
30
+
31
+ const created = nextIdentityId();
32
+ REFERENCE_IDS.set(value, created);
33
+ return created;
34
+ }
35
+
36
+ function symbolIdentity(value: symbol): number {
37
+ const existing = SYMBOL_IDS.get(value);
38
+ if (existing !== undefined) {
39
+ return existing;
40
+ }
41
+
42
+ const created = nextIdentityId();
43
+ SYMBOL_IDS.set(value, created);
44
+ return created;
45
+ }
46
+
47
+ function tryValueIdentity(value: object): number | undefined {
48
+ return VALUE_IDS.get(value);
49
+ }
50
+
51
+ function tokenFor(value: unknown, deep: boolean): string {
52
+ switch (typeof value) {
53
+ case 'undefined':
54
+ return 'undefined';
55
+ case 'boolean':
56
+ return value ? 'boolean:true' : 'boolean:false';
57
+ case 'number':
58
+ return `number:${normalizeNumberToken(value)}`;
59
+ case 'bigint':
60
+ return `bigint:${value.toString()}`;
61
+ case 'string':
62
+ return `string:${JSON.stringify(value)}`;
63
+ case 'symbol':
64
+ return `symbol:${symbolIdentity(value)}`;
65
+ case 'function':
66
+ return `ref:${referenceIdentity(value)}`;
67
+ case 'object':
68
+ if (value === null) {
69
+ return 'null';
70
+ }
71
+
72
+ {
73
+ const identity = tryValueIdentity(value);
74
+ if (identity !== undefined) {
75
+ return `value:${identity}`;
76
+ }
77
+ }
78
+
79
+ if (deep) {
80
+ throw new TypeError('Deep value fields must be recursively deep-safe.');
81
+ }
82
+
83
+ return `ref:${referenceIdentity(value)}`;
84
+ }
85
+ }
86
+
87
+ export function __valueShallowToken(value: unknown): string {
88
+ return tokenFor(value, false);
89
+ }
90
+
91
+ export function __valueDeepToken(value: unknown): string {
92
+ return tokenFor(value, true);
93
+ }
94
+
95
+ export function __valueKey(...tokens: readonly string[]): string {
96
+ return JSON.stringify(tokens);
97
+ }
98
+
99
+ export function __valueReadonly(
100
+ target: object,
101
+ key: PropertyKey,
102
+ value: unknown,
103
+ ): void {
104
+ Object.defineProperty(target, key, {
105
+ value,
106
+ enumerable: true,
107
+ writable: false,
108
+ configurable: false,
109
+ });
110
+ }
111
+
112
+ export function __valueFactory<T extends object, TArgs extends readonly unknown[]>(
113
+ keyOf: (...args: ValueFactoryArgs<TArgs>) => string,
114
+ allocate: () => T,
115
+ init: (instance: T, ...args: ValueFactoryArgs<TArgs>) => void,
116
+ ): (...args: ValueFactoryArgs<TArgs>) => T {
117
+ const cache = new Map<string, T>();
118
+
119
+ return (...args: ValueFactoryArgs<TArgs>): T => {
120
+ const key = keyOf(...args);
121
+ const existing = cache.get(key);
122
+ if (existing !== undefined) {
123
+ return existing;
124
+ }
125
+
126
+ const instance = allocate();
127
+ init(instance, ...args);
128
+ VALUE_IDS.set(instance, nextIdentityId());
129
+ Object.freeze(instance);
130
+ cache.set(key, instance);
131
+ return instance;
132
+ };
133
+ }