@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.
- package/package.json +15 -6
- package/project-transform/index.js +2 -0
- package/project-transform/index.ts +8 -0
- package/project-transform/src/annotation_syntax.js +948 -0
- package/project-transform/src/annotation_syntax.ts +1217 -0
- package/project-transform/src/build_package.js +475 -0
- package/project-transform/src/build_package.ts +683 -0
- package/project-transform/src/bundled/portable-web-globals.d.ts +153 -0
- package/project-transform/src/bundled/runtime_externs.js +220 -0
- package/project-transform/src/bundled/runtime_externs.ts +237 -0
- package/project-transform/src/bundled/sound-libs/lib.decorators.d.ts +385 -0
- package/project-transform/src/bundled/sound-libs/lib.decorators.legacy.d.ts +22 -0
- package/project-transform/src/bundled/sound-libs/lib.dom.asynciterable.d.ts +42 -0
- package/project-transform/src/bundled/sound-libs/lib.dom.d.ts +39440 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.collection.d.ts +149 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.core.d.ts +657 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.d.ts +28 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.generator.d.ts +77 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.iterable.d.ts +616 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.promise.d.ts +80 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.proxy.d.ts +128 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.reflect.d.ts +144 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.symbol.d.ts +46 -0
- package/project-transform/src/bundled/sound-libs/lib.es2015.symbol.wellknown.d.ts +170 -0
- package/project-transform/src/bundled/sound-libs/lib.es2016.array.include.d.ts +116 -0
- package/project-transform/src/bundled/sound-libs/lib.es2016.d.ts +21 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.arraybuffer.d.ts +21 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.d.ts +26 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.date.d.ts +31 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.object.d.ts +49 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.string.d.ts +45 -0
- package/project-transform/src/bundled/sound-libs/lib.es2017.typedarrays.d.ts +53 -0
- package/project-transform/src/bundled/sound-libs/lib.es2018.asyncgenerator.d.ts +77 -0
- package/project-transform/src/bundled/sound-libs/lib.es2018.asynciterable.d.ts +57 -0
- package/project-transform/src/bundled/sound-libs/lib.es2018.d.ts +24 -0
- package/project-transform/src/bundled/sound-libs/lib.es2018.promise.d.ts +30 -0
- package/project-transform/src/bundled/sound-libs/lib.es2018.regexp.d.ts +37 -0
- package/project-transform/src/bundled/sound-libs/lib.es2019.array.d.ts +79 -0
- package/project-transform/src/bundled/sound-libs/lib.es2019.d.ts +24 -0
- package/project-transform/src/bundled/sound-libs/lib.es2019.object.d.ts +47 -0
- package/project-transform/src/bundled/sound-libs/lib.es2019.string.d.ts +37 -0
- package/project-transform/src/bundled/sound-libs/lib.es2019.symbol.d.ts +24 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.bigint.d.ts +765 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.d.ts +27 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.date.d.ts +42 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.number.d.ts +28 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.promise.d.ts +49 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.string.d.ts +44 -0
- package/project-transform/src/bundled/sound-libs/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/project-transform/src/bundled/sound-libs/lib.es2021.d.ts +23 -0
- package/project-transform/src/bundled/sound-libs/lib.es2021.promise.d.ts +48 -0
- package/project-transform/src/bundled/sound-libs/lib.es2021.string.d.ts +33 -0
- package/project-transform/src/bundled/sound-libs/lib.es2021.weakref.d.ts +78 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.array.d.ts +121 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.d.ts +25 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.error.d.ts +75 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.object.d.ts +26 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.regexp.d.ts +39 -0
- package/project-transform/src/bundled/sound-libs/lib.es2022.string.d.ts +25 -0
- package/project-transform/src/bundled/sound-libs/lib.es2023.array.d.ts +924 -0
- package/project-transform/src/bundled/sound-libs/lib.es2023.collection.d.ts +21 -0
- package/project-transform/src/bundled/sound-libs/lib.es2023.d.ts +22 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.arraybuffer.d.ts +65 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.collection.d.ts +29 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.d.ts +26 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.object.d.ts +33 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.promise.d.ts +35 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.regexp.d.ts +25 -0
- package/project-transform/src/bundled/sound-libs/lib.es2024.string.d.ts +29 -0
- package/project-transform/src/bundled/sound-libs/lib.es5.d.ts +4924 -0
- package/project-transform/src/bundled/sound_stdlib.js +142 -0
- package/project-transform/src/bundled/sound_stdlib.ts +180 -0
- package/project-transform/src/checker/analyze_project.js +1361 -0
- package/project-transform/src/checker/analyze_project.ts +2246 -0
- package/project-transform/src/checker/diagnostics.js +112 -0
- package/project-transform/src/checker/diagnostics.ts +222 -0
- package/project-transform/src/checker/engine/context.js +235 -0
- package/project-transform/src/checker/engine/context.ts +340 -0
- package/project-transform/src/checker/engine/diagnostic_codes.js +72 -0
- package/project-transform/src/checker/engine/diagnostic_codes.ts +95 -0
- package/project-transform/src/checker/engine/facts.js +35 -0
- package/project-transform/src/checker/engine/facts.ts +48 -0
- package/project-transform/src/checker/engine/types.js +1 -0
- package/project-transform/src/checker/engine/types.ts +485 -0
- package/project-transform/src/checker/proof_escape_hatch_diagnostics.js +104 -0
- package/project-transform/src/checker/proof_escape_hatch_diagnostics.ts +173 -0
- package/project-transform/src/checker/rules/async_surface.js +231 -0
- package/project-transform/src/checker/rules/async_surface.ts +335 -0
- package/project-transform/src/checker/rules/class_lifecycle.js +798 -0
- package/project-transform/src/checker/rules/class_lifecycle.ts +1276 -0
- package/project-transform/src/checker/rules/directive_validation.js +571 -0
- package/project-transform/src/checker/rules/directive_validation.ts +938 -0
- package/project-transform/src/checker/rules/directives.js +23 -0
- package/project-transform/src/checker/rules/directives.ts +25 -0
- package/project-transform/src/checker/rules/flow.js +202 -0
- package/project-transform/src/checker/rules/flow.ts +333 -0
- package/project-transform/src/checker/rules/flow_facts.js +601 -0
- package/project-transform/src/checker/rules/flow_facts.ts +978 -0
- package/project-transform/src/checker/rules/flow_invalidation.js +1119 -0
- package/project-transform/src/checker/rules/flow_invalidation.ts +2150 -0
- package/project-transform/src/checker/rules/flow_shared.js +2822 -0
- package/project-transform/src/checker/rules/flow_shared.ts +4383 -0
- package/project-transform/src/checker/rules/foreign_boundary.js +120 -0
- package/project-transform/src/checker/rules/foreign_boundary.ts +196 -0
- package/project-transform/src/checker/rules/foreign_projection.js +279 -0
- package/project-transform/src/checker/rules/foreign_projection.ts +425 -0
- package/project-transform/src/checker/rules/generated_helpers.js +13 -0
- package/project-transform/src/checker/rules/generated_helpers.ts +18 -0
- package/project-transform/src/checker/rules/index.js +35 -0
- package/project-transform/src/checker/rules/index.ts +49 -0
- package/project-transform/src/checker/rules/namespace_object.js +845 -0
- package/project-transform/src/checker/rules/namespace_object.ts +1224 -0
- package/project-transform/src/checker/rules/non_ordinary_recovery.js +1328 -0
- package/project-transform/src/checker/rules/non_ordinary_recovery.ts +2391 -0
- package/project-transform/src/checker/rules/null_prototype.js +3 -0
- package/project-transform/src/checker/rules/null_prototype.ts +6 -0
- package/project-transform/src/checker/rules/overloads.js +181 -0
- package/project-transform/src/checker/rules/overloads.ts +317 -0
- package/project-transform/src/checker/rules/predicate_verification.js +691 -0
- package/project-transform/src/checker/rules/predicate_verification.ts +1088 -0
- package/project-transform/src/checker/rules/prototype_hardening.js +237 -0
- package/project-transform/src/checker/rules/prototype_hardening.ts +343 -0
- package/project-transform/src/checker/rules/receiver_discipline.js +263 -0
- package/project-transform/src/checker/rules/receiver_discipline.ts +356 -0
- package/project-transform/src/checker/rules/relations.js +6861 -0
- package/project-transform/src/checker/rules/relations.ts +12158 -0
- package/project-transform/src/checker/rules/resolved_builtins.js +274 -0
- package/project-transform/src/checker/rules/resolved_builtins.ts +438 -0
- package/project-transform/src/checker/rules/trust.js +217 -0
- package/project-transform/src/checker/rules/trust.ts +301 -0
- package/project-transform/src/checker/rules/type_guards.js +173 -0
- package/project-transform/src/checker/rules/type_guards.ts +257 -0
- package/project-transform/src/checker/rules/universal.js +17 -0
- package/project-transform/src/checker/rules/universal.ts +22 -0
- package/project-transform/src/checker/rules/unsafe_value_origin.js +80 -0
- package/project-transform/src/checker/rules/unsafe_value_origin.ts +125 -0
- package/project-transform/src/checker/rules/unsound_imports.js +218 -0
- package/project-transform/src/checker/rules/unsound_imports.ts +301 -0
- package/project-transform/src/checker/rules/unsound_syntax.js +1695 -0
- package/project-transform/src/checker/rules/unsound_syntax.ts +2540 -0
- package/project-transform/src/checker/rules/value_types.js +206 -0
- package/project-transform/src/checker/rules/value_types.ts +407 -0
- package/project-transform/src/checker/timing.js +43 -0
- package/project-transform/src/checker/timing.ts +78 -0
- package/project-transform/src/checker/unsupported_feature_messages.js +337 -0
- package/project-transform/src/checker/unsupported_feature_messages.ts +531 -0
- package/project-transform/src/cli.js +892 -0
- package/project-transform/src/cli.ts +1476 -0
- package/project-transform/src/compiler/compile_project.js +319 -0
- package/project-transform/src/compiler/compile_project.ts +508 -0
- package/project-transform/src/compiler/errors.js +10 -0
- package/project-transform/src/compiler/errors.ts +29 -0
- package/project-transform/src/compiler/ir.js +1 -0
- package/project-transform/src/compiler/ir.ts +1526 -0
- package/project-transform/src/compiler/lower.js +30550 -0
- package/project-transform/src/compiler/lower.ts +43645 -0
- package/project-transform/src/compiler/lower_arrays.js +140 -0
- package/project-transform/src/compiler/lower_arrays.ts +190 -0
- package/project-transform/src/compiler/lower_strings.js +121 -0
- package/project-transform/src/compiler/lower_strings.ts +198 -0
- package/project-transform/src/compiler/lower_tagged.js +329 -0
- package/project-transform/src/compiler/lower_tagged.ts +427 -0
- package/project-transform/src/compiler/lower_views.js +171 -0
- package/project-transform/src/compiler/lower_views.ts +251 -0
- package/project-transform/src/compiler/object_keys.js +25 -0
- package/project-transform/src/compiler/object_keys.ts +35 -0
- package/project-transform/src/compiler/runtime_ir.js +30 -0
- package/project-transform/src/compiler/runtime_ir.ts +727 -0
- package/project-transform/src/compiler/tagged_boundary.js +18 -0
- package/project-transform/src/compiler/tagged_boundary.ts +37 -0
- package/project-transform/src/compiler/toolchain.js +170 -0
- package/project-transform/src/compiler/toolchain.ts +229 -0
- package/project-transform/src/compiler/unicode_case_data.js +2102 -0
- package/project-transform/src/compiler/unicode_case_data.ts +2112 -0
- package/project-transform/src/compiler/wasm_js_host_runtime.js +656 -0
- package/project-transform/src/compiler/wasm_js_host_runtime.ts +762 -0
- package/project-transform/src/compiler/wat_arrays.js +3132 -0
- package/project-transform/src/compiler/wat_arrays.ts +3768 -0
- package/project-transform/src/compiler/wat_emitter.js +17952 -0
- package/project-transform/src/compiler/wat_emitter.ts +22812 -0
- package/project-transform/src/compiler/wat_strings.js +129 -0
- package/project-transform/src/compiler/wat_strings.ts +187 -0
- package/project-transform/src/compiler/wat_tagged.js +548 -0
- package/project-transform/src/compiler/wat_tagged.ts +674 -0
- package/project-transform/src/compiler_generator_runner.js +153 -0
- package/project-transform/src/compiler_generator_runner.ts +171 -0
- package/project-transform/src/compiler_object_test_helpers.js +69 -0
- package/project-transform/src/compiler_object_test_helpers.ts +96 -0
- package/project-transform/src/compiler_promise_runner.js +2116 -0
- package/project-transform/src/compiler_promise_runner.ts +2184 -0
- package/project-transform/src/compiler_test_helpers.js +854 -0
- package/project-transform/src/compiler_test_helpers.ts +1087 -0
- package/project-transform/src/config.js +568 -0
- package/project-transform/src/config.ts +892 -0
- package/project-transform/src/diagnostic_metadata.js +67 -0
- package/project-transform/src/diagnostic_metadata.ts +99 -0
- package/project-transform/src/diagnostic_reference.js +1368 -0
- package/project-transform/src/diagnostic_reference.ts +1523 -0
- package/project-transform/src/editor_diagnostics_worker.js +176 -0
- package/project-transform/src/editor_diagnostics_worker.ts +250 -0
- package/project-transform/src/editor_projection.js +224 -0
- package/project-transform/src/editor_projection.ts +421 -0
- package/project-transform/src/frontend/builtin_expanded_program_test_cleanup.js +47 -0
- package/project-transform/src/frontend/builtin_expanded_program_test_cleanup.ts +72 -0
- package/project-transform/src/frontend/builtin_macro_support.js +842 -0
- package/project-transform/src/frontend/builtin_macro_support.ts +1386 -0
- package/project-transform/src/frontend/builtin_macros.js +409 -0
- package/project-transform/src/frontend/builtin_macros.ts +542 -0
- package/project-transform/src/frontend/component_poc_runtime.js +279 -0
- package/project-transform/src/frontend/component_poc_runtime.ts +372 -0
- package/project-transform/src/frontend/css_macro.js +148 -0
- package/project-transform/src/frontend/css_macro.ts +222 -0
- package/project-transform/src/frontend/derive_macros.js +2072 -0
- package/project-transform/src/frontend/derive_macros.ts +3188 -0
- package/project-transform/src/frontend/embedded_fragment_support.js +106 -0
- package/project-transform/src/frontend/embedded_fragment_support.ts +172 -0
- package/project-transform/src/frontend/error_normalization.js +403 -0
- package/project-transform/src/frontend/error_normalization.ts +832 -0
- package/project-transform/src/frontend/error_stdlib_support.js +1 -0
- package/project-transform/src/frontend/error_stdlib_support.ts +6 -0
- package/project-transform/src/frontend/expand_project.js +169 -0
- package/project-transform/src/frontend/expand_project.ts +248 -0
- package/project-transform/src/frontend/format_soundscript.js +297 -0
- package/project-transform/src/frontend/format_soundscript.ts +582 -0
- package/project-transform/src/frontend/graphql_macro.js +174 -0
- package/project-transform/src/frontend/graphql_macro.ts +253 -0
- package/project-transform/src/frontend/hash_context.js +83 -0
- package/project-transform/src/frontend/hash_context.ts +113 -0
- package/project-transform/src/frontend/hkt_macro.js +448 -0
- package/project-transform/src/frontend/hkt_macro.ts +897 -0
- package/project-transform/src/frontend/import_binding_usage.js +190 -0
- package/project-transform/src/frontend/import_binding_usage.ts +277 -0
- package/project-transform/src/frontend/macro_advanced_backend_adapter.js +58 -0
- package/project-transform/src/frontend/macro_advanced_backend_adapter.ts +123 -0
- package/project-transform/src/frontend/macro_advanced_context.js +826 -0
- package/project-transform/src/frontend/macro_advanced_context.ts +1102 -0
- package/project-transform/src/frontend/macro_advanced_output.js +21 -0
- package/project-transform/src/frontend/macro_advanced_output.ts +41 -0
- package/project-transform/src/frontend/macro_api.js +353 -0
- package/project-transform/src/frontend/macro_api.ts +1722 -0
- package/project-transform/src/frontend/macro_api_internal.js +35 -0
- package/project-transform/src/frontend/macro_api_internal.ts +80 -0
- package/project-transform/src/frontend/macro_api_module_support.js +39 -0
- package/project-transform/src/frontend/macro_api_module_support.ts +65 -0
- package/project-transform/src/frontend/macro_backend_adapter.js +272 -0
- package/project-transform/src/frontend/macro_backend_adapter.ts +420 -0
- package/project-transform/src/frontend/macro_context.js +816 -0
- package/project-transform/src/frontend/macro_context.ts +1105 -0
- package/project-transform/src/frontend/macro_debug.js +99 -0
- package/project-transform/src/frontend/macro_debug.ts +157 -0
- package/project-transform/src/frontend/macro_definition_support.js +28 -0
- package/project-transform/src/frontend/macro_definition_support.ts +73 -0
- package/project-transform/src/frontend/macro_errors.js +40 -0
- package/project-transform/src/frontend/macro_errors.ts +70 -0
- package/project-transform/src/frontend/macro_expander.js +919 -0
- package/project-transform/src/frontend/macro_expander.ts +1611 -0
- package/project-transform/src/frontend/macro_factory_support.js +176 -0
- package/project-transform/src/frontend/macro_factory_support.ts +263 -0
- package/project-transform/src/frontend/macro_host_ast_internal.js +64 -0
- package/project-transform/src/frontend/macro_host_ast_internal.ts +109 -0
- package/project-transform/src/frontend/macro_index.js +27 -0
- package/project-transform/src/frontend/macro_index.ts +50 -0
- package/project-transform/src/frontend/macro_loader.js +281 -0
- package/project-transform/src/frontend/macro_loader.ts +506 -0
- package/project-transform/src/frontend/macro_operand_semantics.js +838 -0
- package/project-transform/src/frontend/macro_operand_semantics.ts +1489 -0
- package/project-transform/src/frontend/macro_output.js +54 -0
- package/project-transform/src/frontend/macro_output.ts +123 -0
- package/project-transform/src/frontend/macro_parser.js +611 -0
- package/project-transform/src/frontend/macro_parser.ts +832 -0
- package/project-transform/src/frontend/macro_resolver.js +69 -0
- package/project-transform/src/frontend/macro_resolver.ts +125 -0
- package/project-transform/src/frontend/macro_rewrite.js +285 -0
- package/project-transform/src/frontend/macro_rewrite.ts +442 -0
- package/project-transform/src/frontend/macro_runtime_support.js +232 -0
- package/project-transform/src/frontend/macro_runtime_support.ts +324 -0
- package/project-transform/src/frontend/macro_scanner.js +393 -0
- package/project-transform/src/frontend/macro_scanner.ts +455 -0
- package/project-transform/src/frontend/macro_semantic_backend_adapter.js +87 -0
- package/project-transform/src/frontend/macro_semantic_backend_adapter.ts +166 -0
- package/project-transform/src/frontend/macro_semantic_context.js +5 -0
- package/project-transform/src/frontend/macro_semantic_context.ts +12 -0
- package/project-transform/src/frontend/macro_semantic_output.js +24 -0
- package/project-transform/src/frontend/macro_semantic_output.ts +47 -0
- package/project-transform/src/frontend/macro_semantic_types.js +1 -0
- package/project-transform/src/frontend/macro_semantic_types.ts +98 -0
- package/project-transform/src/frontend/macro_semantics.js +1172 -0
- package/project-transform/src/frontend/macro_semantics.ts +1502 -0
- package/project-transform/src/frontend/macro_site_kind_support.js +164 -0
- package/project-transform/src/frontend/macro_site_kind_support.ts +255 -0
- package/project-transform/src/frontend/macro_syntax_internal.js +1950 -0
- package/project-transform/src/frontend/macro_syntax_internal.ts +3338 -0
- package/project-transform/src/frontend/macro_templates.js +57 -0
- package/project-transform/src/frontend/macro_templates.ts +143 -0
- package/project-transform/src/frontend/macro_test_helpers.js +82 -0
- package/project-transform/src/frontend/macro_test_helpers.ts +136 -0
- package/project-transform/src/frontend/macro_types.js +1 -0
- package/project-transform/src/frontend/macro_types.ts +103 -0
- package/project-transform/src/frontend/macro_vm.js +39 -0
- package/project-transform/src/frontend/macro_vm.ts +113 -0
- package/project-transform/src/frontend/match_macro.js +885 -0
- package/project-transform/src/frontend/match_macro.ts +1220 -0
- package/project-transform/src/frontend/numeric_normalization.js +824 -0
- package/project-transform/src/frontend/numeric_normalization.ts +1380 -0
- package/project-transform/src/frontend/numeric_prelude.js +278 -0
- package/project-transform/src/frontend/numeric_prelude.ts +370 -0
- package/project-transform/src/frontend/project_frontend.js +2396 -0
- package/project-transform/src/frontend/project_frontend.ts +3776 -0
- package/project-transform/src/frontend/project_macro_support.js +1401 -0
- package/project-transform/src/frontend/project_macro_support.ts +2137 -0
- package/project-transform/src/frontend/sql_macro.js +175 -0
- package/project-transform/src/frontend/sql_macro.ts +254 -0
- package/project-transform/src/frontend/sql_stdlib_support.js +1 -0
- package/project-transform/src/frontend/sql_stdlib_support.ts +6 -0
- package/project-transform/src/frontend/std_package_support.js +228 -0
- package/project-transform/src/frontend/std_package_support.ts +400 -0
- package/project-transform/src/frontend/value_normalization.js +306 -0
- package/project-transform/src/frontend/value_normalization.ts +599 -0
- package/project-transform/src/lsp/project_service.js +4771 -0
- package/project-transform/src/lsp/project_service.ts +7580 -0
- package/project-transform/src/lsp/protocol.js +9 -0
- package/project-transform/src/lsp/protocol.ts +38 -0
- package/project-transform/src/lsp/server.js +355 -0
- package/project-transform/src/lsp/server.ts +671 -0
- package/project-transform/src/lsp/session.js +49 -0
- package/project-transform/src/lsp/session.ts +48 -0
- package/project-transform/src/lsp/timing.js +43 -0
- package/project-transform/src/lsp/timing.ts +76 -0
- package/project-transform/src/lsp/transport.js +205 -0
- package/project-transform/src/lsp/transport.ts +253 -0
- package/project-transform/src/lsp_main.js +5 -0
- package/project-transform/src/lsp_main.ts +7 -0
- package/project-transform/src/macros.d.ts +1 -0
- package/project-transform/src/macros.js +1 -0
- package/project-transform/src/macros.ts +1 -0
- package/project-transform/src/main.js +24 -0
- package/project-transform/src/main.ts +28 -0
- package/project-transform/src/platform/host.js +264 -0
- package/project-transform/src/platform/host.ts +343 -0
- package/project-transform/src/platform/path.js +8 -0
- package/project-transform/src/platform/path.ts +20 -0
- package/project-transform/src/public_macro_api/macro_api.d.ts +1054 -0
- package/project-transform/src/public_macro_api/macro_semantic_types.d.ts +66 -0
- package/project-transform/src/public_macro_api/macro_types.d.ts +70 -0
- package/project-transform/src/run_program.js +14 -0
- package/project-transform/src/run_program.ts +33 -0
- package/project-transform/src/runtime/materialize.js +371 -0
- package/project-transform/src/runtime/materialize.ts +502 -0
- package/project-transform/src/runtime/on_demand.js +203 -0
- package/project-transform/src/runtime/on_demand.ts +305 -0
- package/project-transform/src/runtime/source_maps.js +205 -0
- package/project-transform/src/runtime/source_maps.ts +297 -0
- package/project-transform/src/runtime/transform.js +148 -0
- package/project-transform/src/runtime/transform.ts +295 -0
- package/project-transform/src/service/types.js +1 -0
- package/project-transform/src/service/types.ts +22 -0
- package/project-transform/src/soundscript_packages.js +477 -0
- package/project-transform/src/soundscript_packages.ts +754 -0
- package/project-transform/src/soundscript_runtime_specifiers.js +88 -0
- package/project-transform/src/soundscript_runtime_specifiers.ts +96 -0
- package/project-transform/src/stdlib/async.d.ts +81 -0
- package/project-transform/src/stdlib/async.js +213 -0
- package/project-transform/src/stdlib/async.ts +315 -0
- package/project-transform/src/stdlib/codec.d.ts +32 -0
- package/project-transform/src/stdlib/codec.js +30 -0
- package/project-transform/src/stdlib/codec.ts +76 -0
- package/project-transform/src/stdlib/compare.d.ts +28 -0
- package/project-transform/src/stdlib/compare.js +115 -0
- package/project-transform/src/stdlib/compare.ts +151 -0
- package/project-transform/src/stdlib/css.d.ts +16 -0
- package/project-transform/src/stdlib/css.js +9 -0
- package/project-transform/src/stdlib/css.ts +28 -0
- package/project-transform/src/stdlib/debug.d.ts +2 -0
- package/project-transform/src/stdlib/debug.js +9 -0
- package/project-transform/src/stdlib/debug.ts +10 -0
- package/project-transform/src/stdlib/decode.d.ts +86 -0
- package/project-transform/src/stdlib/decode.js +254 -0
- package/project-transform/src/stdlib/decode.ts +390 -0
- package/project-transform/src/stdlib/derive.d.ts +6 -0
- package/project-transform/src/stdlib/derive.js +7 -0
- package/project-transform/src/stdlib/derive.ts +7 -0
- package/project-transform/src/stdlib/encode.d.ts +100 -0
- package/project-transform/src/stdlib/encode.js +130 -0
- package/project-transform/src/stdlib/encode.ts +259 -0
- package/project-transform/src/stdlib/failures.d.ts +23 -0
- package/project-transform/src/stdlib/failures.js +41 -0
- package/project-transform/src/stdlib/failures.ts +64 -0
- package/project-transform/src/stdlib/fetch.d.ts +67 -0
- package/project-transform/src/stdlib/fetch.js +5 -0
- package/project-transform/src/stdlib/fetch.ts +11 -0
- package/project-transform/src/stdlib/graphql.d.ts +16 -0
- package/project-transform/src/stdlib/graphql.js +9 -0
- package/project-transform/src/stdlib/graphql.ts +28 -0
- package/project-transform/src/stdlib/hash.d.ts +34 -0
- package/project-transform/src/stdlib/hash.js +110 -0
- package/project-transform/src/stdlib/hash.ts +188 -0
- package/project-transform/src/stdlib/hkt.d.ts +40 -0
- package/project-transform/src/stdlib/hkt.js +3 -0
- package/project-transform/src/stdlib/hkt.ts +41 -0
- package/project-transform/src/stdlib/index.d.ts +9 -0
- package/project-transform/src/stdlib/index.js +15 -0
- package/project-transform/src/stdlib/index.ts +23 -0
- package/project-transform/src/stdlib/json.d.ts +125 -0
- package/project-transform/src/stdlib/json.js +764 -0
- package/project-transform/src/stdlib/json.ts +1034 -0
- package/project-transform/src/stdlib/match.d.ts +11 -0
- package/project-transform/src/stdlib/match.js +13 -0
- package/project-transform/src/stdlib/match.ts +26 -0
- package/project-transform/src/stdlib/numerics.d.ts +523 -0
- package/project-transform/src/stdlib/numerics.js +1356 -0
- package/project-transform/src/stdlib/numerics.ts +1937 -0
- package/project-transform/src/stdlib/random.d.ts +19 -0
- package/project-transform/src/stdlib/random.js +3 -0
- package/project-transform/src/stdlib/random.ts +5 -0
- package/project-transform/src/stdlib/result.d.ts +68 -0
- package/project-transform/src/stdlib/result.js +139 -0
- package/project-transform/src/stdlib/result.ts +248 -0
- package/project-transform/src/stdlib/sql.d.ts +22 -0
- package/project-transform/src/stdlib/sql.js +23 -0
- package/project-transform/src/stdlib/sql.ts +53 -0
- package/project-transform/src/stdlib/text.d.ts +24 -0
- package/project-transform/src/stdlib/text.js +3 -0
- package/project-transform/src/stdlib/text.ts +4 -0
- package/project-transform/src/stdlib/thunk.d.ts +2 -0
- package/project-transform/src/stdlib/thunk.js +9 -0
- package/project-transform/src/stdlib/thunk.ts +15 -0
- package/project-transform/src/stdlib/typeclasses.d.ts +57 -0
- package/project-transform/src/stdlib/typeclasses.js +78 -0
- package/project-transform/src/stdlib/typeclasses.ts +173 -0
- package/project-transform/src/stdlib/url.d.ts +37 -0
- package/project-transform/src/stdlib/url.js +3 -0
- package/project-transform/src/stdlib/url.ts +4 -0
- package/project-transform/src/stdlib/value.d.ts +9 -0
- package/project-transform/src/stdlib/value.js +104 -0
- package/project-transform/src/stdlib/value.ts +133 -0
- package/project-transform/src/test_installed_stdlib.js +147 -0
- package/project-transform/src/test_installed_stdlib.ts +245 -0
- package/project-transform/src/test_macro_package_fixture.js +50 -0
- package/project-transform/src/test_macro_package_fixture.ts +68 -0
- package/project-transform/src/value_deep_safe.js +191 -0
- package/project-transform/src/value_deep_safe.ts +273 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const MACRO_FACTORY_METADATA = Symbol.for('soundscript.macro-factory-metadata');
|
|
2
|
+
const MACRO_DEFINITION_METADATA = Symbol.for('soundscript.macro-definition-metadata');
|
|
3
|
+
export function attachMacroFactoryMetadata(factory, metadata) {
|
|
4
|
+
Object.defineProperty(factory, MACRO_FACTORY_METADATA, {
|
|
5
|
+
configurable: true,
|
|
6
|
+
enumerable: false,
|
|
7
|
+
value: metadata,
|
|
8
|
+
writable: true,
|
|
9
|
+
});
|
|
10
|
+
return factory;
|
|
11
|
+
}
|
|
12
|
+
export function getMacroFactoryMetadata(value) {
|
|
13
|
+
return typeof value === 'function' &&
|
|
14
|
+
MACRO_FACTORY_METADATA in value &&
|
|
15
|
+
typeof value[MACRO_FACTORY_METADATA]?.form === 'string'
|
|
16
|
+
? value[MACRO_FACTORY_METADATA] ?? null
|
|
17
|
+
: null;
|
|
18
|
+
}
|
|
19
|
+
export function attachLoadedMacroDefinitionMetadata(definition, metadata) {
|
|
20
|
+
Object.defineProperty(definition, MACRO_DEFINITION_METADATA, {
|
|
21
|
+
configurable: true,
|
|
22
|
+
enumerable: false,
|
|
23
|
+
value: metadata,
|
|
24
|
+
writable: true,
|
|
25
|
+
});
|
|
26
|
+
return definition;
|
|
27
|
+
}
|
|
28
|
+
export function getLoadedMacroDefinitionMetadata(value) {
|
|
29
|
+
return typeof value === 'object' &&
|
|
30
|
+
value !== null &&
|
|
31
|
+
MACRO_DEFINITION_METADATA in value &&
|
|
32
|
+
typeof value[MACRO_DEFINITION_METADATA]?.form === 'string'
|
|
33
|
+
? value[MACRO_DEFINITION_METADATA] ?? null
|
|
34
|
+
: null;
|
|
35
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
MacroDeclarationExpansionMode,
|
|
3
|
+
MacroDeclarationKind,
|
|
4
|
+
MacroDefinition,
|
|
5
|
+
} from './macro_api.ts';
|
|
6
|
+
|
|
7
|
+
export type InternalMacroFactoryForm = 'call' | 'decl' | 'tag';
|
|
8
|
+
|
|
9
|
+
export interface InternalLoadedMacroDefinitionMetadata {
|
|
10
|
+
readonly declarationKinds?: readonly MacroDeclarationKind[];
|
|
11
|
+
readonly expansionMode: MacroDeclarationExpansionMode;
|
|
12
|
+
readonly form: InternalMacroFactoryForm;
|
|
13
|
+
readonly moduleFileName?: string;
|
|
14
|
+
readonly moduleSpecifier: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const MACRO_FACTORY_METADATA = Symbol.for('soundscript.macro-factory-metadata');
|
|
18
|
+
const MACRO_DEFINITION_METADATA = Symbol.for('soundscript.macro-definition-metadata');
|
|
19
|
+
|
|
20
|
+
interface InternalMacroFactoryMetadata {
|
|
21
|
+
readonly form: InternalMacroFactoryForm;
|
|
22
|
+
readonly moduleFileName?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type InternalMacroFactoryShape = (() => MacroDefinition) & {
|
|
26
|
+
readonly [MACRO_FACTORY_METADATA]?: InternalMacroFactoryMetadata;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type InternalMacroDefinitionShape = MacroDefinition & {
|
|
30
|
+
readonly [MACRO_DEFINITION_METADATA]?: InternalLoadedMacroDefinitionMetadata;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export function attachMacroFactoryMetadata(
|
|
34
|
+
factory: () => MacroDefinition,
|
|
35
|
+
metadata: InternalMacroFactoryMetadata,
|
|
36
|
+
): typeof factory {
|
|
37
|
+
Object.defineProperty(factory, MACRO_FACTORY_METADATA, {
|
|
38
|
+
configurable: true,
|
|
39
|
+
enumerable: false,
|
|
40
|
+
value: metadata,
|
|
41
|
+
writable: true,
|
|
42
|
+
});
|
|
43
|
+
return factory;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function getMacroFactoryMetadata(
|
|
47
|
+
value: unknown,
|
|
48
|
+
): InternalMacroFactoryMetadata | null {
|
|
49
|
+
return typeof value === 'function' &&
|
|
50
|
+
MACRO_FACTORY_METADATA in value &&
|
|
51
|
+
typeof (value as InternalMacroFactoryShape)[MACRO_FACTORY_METADATA]?.form === 'string'
|
|
52
|
+
? (value as InternalMacroFactoryShape)[MACRO_FACTORY_METADATA] ?? null
|
|
53
|
+
: null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function attachLoadedMacroDefinitionMetadata<
|
|
57
|
+
Definition extends MacroDefinition,
|
|
58
|
+
>(
|
|
59
|
+
definition: Definition,
|
|
60
|
+
metadata: InternalLoadedMacroDefinitionMetadata,
|
|
61
|
+
): Definition {
|
|
62
|
+
Object.defineProperty(definition, MACRO_DEFINITION_METADATA, {
|
|
63
|
+
configurable: true,
|
|
64
|
+
enumerable: false,
|
|
65
|
+
value: metadata,
|
|
66
|
+
writable: true,
|
|
67
|
+
});
|
|
68
|
+
return definition;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function getLoadedMacroDefinitionMetadata(
|
|
72
|
+
value: unknown,
|
|
73
|
+
): InternalLoadedMacroDefinitionMetadata | null {
|
|
74
|
+
return typeof value === 'object' &&
|
|
75
|
+
value !== null &&
|
|
76
|
+
MACRO_DEFINITION_METADATA in value &&
|
|
77
|
+
typeof (value as InternalMacroDefinitionShape)[MACRO_DEFINITION_METADATA]?.form === 'string'
|
|
78
|
+
? (value as InternalMacroDefinitionShape)[MACRO_DEFINITION_METADATA] ?? null
|
|
79
|
+
: null;
|
|
80
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { fromFileUrl } from '../platform/path.js';
|
|
3
|
+
export const MACRO_API_MODULE_SPECIFIER = 'sts:macros';
|
|
4
|
+
export const MACRO_API_MODULE_FILE = fromFileUrl(new URL('../macros.d.ts', import.meta.url));
|
|
5
|
+
function createModuleResolutionHost(baseHost) {
|
|
6
|
+
return {
|
|
7
|
+
directoryExists: baseHost.directoryExists?.bind(baseHost),
|
|
8
|
+
fileExists: baseHost.fileExists.bind(baseHost),
|
|
9
|
+
getCurrentDirectory: baseHost.getCurrentDirectory?.bind(baseHost) ??
|
|
10
|
+
(() => ts.sys.getCurrentDirectory()),
|
|
11
|
+
getDirectories: baseHost.getDirectories?.bind(baseHost),
|
|
12
|
+
readFile: baseHost.readFile.bind(baseHost),
|
|
13
|
+
realpath: baseHost.realpath?.bind(baseHost),
|
|
14
|
+
useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function withMacroApiModuleResolution(baseHost) {
|
|
18
|
+
return {
|
|
19
|
+
...baseHost,
|
|
20
|
+
resolveModuleNames(moduleNames, containingFile, reusedNames, redirectedReference, options) {
|
|
21
|
+
const fallbackHost = createModuleResolutionHost(baseHost);
|
|
22
|
+
const delegated = baseHost.resolveModuleNames?.(moduleNames, containingFile, reusedNames, redirectedReference, options ?? {});
|
|
23
|
+
return moduleNames.map((moduleName, index) => {
|
|
24
|
+
if (moduleName === MACRO_API_MODULE_SPECIFIER) {
|
|
25
|
+
return {
|
|
26
|
+
resolvedFileName: MACRO_API_MODULE_FILE,
|
|
27
|
+
extension: ts.Extension.Dts,
|
|
28
|
+
isExternalLibraryImport: true,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (delegated?.[index]) {
|
|
32
|
+
return delegated[index];
|
|
33
|
+
}
|
|
34
|
+
const resolved = ts.resolveModuleName(moduleName, containingFile, options ?? {}, fallbackHost, undefined, redirectedReference);
|
|
35
|
+
return resolved.resolvedModule;
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
|
|
3
|
+
import { fromFileUrl } from '../platform/path.ts';
|
|
4
|
+
|
|
5
|
+
export const MACRO_API_MODULE_SPECIFIER = 'sts:macros';
|
|
6
|
+
export const MACRO_API_MODULE_FILE = fromFileUrl(new URL('../macros.d.ts', import.meta.url));
|
|
7
|
+
|
|
8
|
+
function createModuleResolutionHost(baseHost: ts.CompilerHost): ts.ModuleResolutionHost {
|
|
9
|
+
return {
|
|
10
|
+
directoryExists: baseHost.directoryExists?.bind(baseHost),
|
|
11
|
+
fileExists: baseHost.fileExists.bind(baseHost),
|
|
12
|
+
getCurrentDirectory: baseHost.getCurrentDirectory?.bind(baseHost) ??
|
|
13
|
+
(() => ts.sys.getCurrentDirectory()),
|
|
14
|
+
getDirectories: baseHost.getDirectories?.bind(baseHost),
|
|
15
|
+
readFile: baseHost.readFile.bind(baseHost),
|
|
16
|
+
realpath: baseHost.realpath?.bind(baseHost),
|
|
17
|
+
useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function withMacroApiModuleResolution(baseHost: ts.CompilerHost): ts.CompilerHost {
|
|
22
|
+
return {
|
|
23
|
+
...baseHost,
|
|
24
|
+
resolveModuleNames(
|
|
25
|
+
moduleNames: string[],
|
|
26
|
+
containingFile: string,
|
|
27
|
+
reusedNames?: string[],
|
|
28
|
+
redirectedReference?: ts.ResolvedProjectReference,
|
|
29
|
+
options?: ts.CompilerOptions,
|
|
30
|
+
): (ts.ResolvedModule | undefined)[] {
|
|
31
|
+
const fallbackHost = createModuleResolutionHost(baseHost);
|
|
32
|
+
const delegated = baseHost.resolveModuleNames?.(
|
|
33
|
+
moduleNames,
|
|
34
|
+
containingFile,
|
|
35
|
+
reusedNames,
|
|
36
|
+
redirectedReference,
|
|
37
|
+
options ?? {},
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
return moduleNames.map((moduleName, index) => {
|
|
41
|
+
if (moduleName === MACRO_API_MODULE_SPECIFIER) {
|
|
42
|
+
return {
|
|
43
|
+
resolvedFileName: MACRO_API_MODULE_FILE,
|
|
44
|
+
extension: ts.Extension.Dts,
|
|
45
|
+
isExternalLibraryImport: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (delegated?.[index]) {
|
|
50
|
+
return delegated[index];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const resolved = ts.resolveModuleName(
|
|
54
|
+
moduleName,
|
|
55
|
+
containingFile,
|
|
56
|
+
options ?? {},
|
|
57
|
+
fallbackHost,
|
|
58
|
+
undefined,
|
|
59
|
+
redirectedReference,
|
|
60
|
+
);
|
|
61
|
+
return resolved.resolvedModule;
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { createHostAccess, createMacroContext } from './macro_context.js';
|
|
3
|
+
import { getLoadedMacroDefinitionMetadata } from './macro_api_internal.js';
|
|
4
|
+
import { parseMacroSyntaxNodeForDefinition, validateMacroInvocationSignature, } from './macro_definition_support.js';
|
|
5
|
+
import { createMacroError, MacroError } from './macro_errors.js';
|
|
6
|
+
import { isMacroOutput, isMacroValueRewriteOutput } from './macro_output.js';
|
|
7
|
+
import { createAdvancedMacroContext } from './macro_advanced_context.js';
|
|
8
|
+
import { synthesizeHostNode } from './macro_host_ast_internal.js';
|
|
9
|
+
import { createMacroRuntimeImportResolver } from './macro_runtime_support.js';
|
|
10
|
+
import { parseSingleHostStatement } from './macro_host_ast_internal.js';
|
|
11
|
+
export function lowerMacroOutput(output) {
|
|
12
|
+
switch (output.kind) {
|
|
13
|
+
case 'expr':
|
|
14
|
+
return {
|
|
15
|
+
kind: 'expr',
|
|
16
|
+
node: output.node,
|
|
17
|
+
runtimeImports: output.runtimeImports,
|
|
18
|
+
};
|
|
19
|
+
case 'stmt':
|
|
20
|
+
return {
|
|
21
|
+
kind: 'stmt',
|
|
22
|
+
nodes: output.nodes,
|
|
23
|
+
runtimeImports: output.runtimeImports,
|
|
24
|
+
};
|
|
25
|
+
case 'scope_exit':
|
|
26
|
+
return {
|
|
27
|
+
cleanupStatements: output.cleanupStatements,
|
|
28
|
+
kind: 'scope_exit',
|
|
29
|
+
runtimeImports: output.runtimeImports,
|
|
30
|
+
};
|
|
31
|
+
case 'value_rewrite':
|
|
32
|
+
throw new Error('Value-rewrite macro outputs must be handled by the advanced macro adapter.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function createExpandMacroPlaceholderFromDefinition(definition, macroName, preparedProgram) {
|
|
36
|
+
return (resolved) => {
|
|
37
|
+
try {
|
|
38
|
+
const definitionMetadata = getLoadedMacroDefinitionMetadata(definition);
|
|
39
|
+
const expansionMode = definitionMetadata?.expansionMode ?? definition.expansionMode ??
|
|
40
|
+
'replace';
|
|
41
|
+
const runtimeResolver = preparedProgram && definitionMetadata?.moduleFileName
|
|
42
|
+
? createMacroRuntimeImportResolver(preparedProgram, resolved.placeholder.invocation.fileName, definitionMetadata.moduleFileName)
|
|
43
|
+
: null;
|
|
44
|
+
const compilerHost = preparedProgram?.preparedHost.host;
|
|
45
|
+
const hostAccess = preparedProgram && definitionMetadata?.moduleFileName
|
|
46
|
+
? createHostAccess({
|
|
47
|
+
env: compilerHost?.soundscriptEnvSnapshot?.(),
|
|
48
|
+
fileExists: preparedProgram.preparedHost.host.fileExists.bind(preparedProgram.preparedHost.host),
|
|
49
|
+
macroFileName: definitionMetadata.moduleFileName,
|
|
50
|
+
projectDirectory: preparedProgram.preparedHost.host.getCurrentDirectory?.() ??
|
|
51
|
+
ts.sys.getCurrentDirectory(),
|
|
52
|
+
readBytes: compilerHost?.soundscriptReadBytes?.bind(compilerHost),
|
|
53
|
+
readFile: preparedProgram.preparedHost.host.readFile.bind(preparedProgram.preparedHost.host),
|
|
54
|
+
})
|
|
55
|
+
: undefined;
|
|
56
|
+
const baseContext = preparedProgram
|
|
57
|
+
? createAdvancedMacroContext(preparedProgram, resolved, undefined, runtimeResolver, hostAccess)
|
|
58
|
+
: createUnsupportedAdvancedContext(createMacroContext(resolved, runtimeResolver));
|
|
59
|
+
const decodedSignature = validateMacroInvocationSignature(definition, baseContext);
|
|
60
|
+
validateDeclarationMacroPlacement(resolved, baseContext);
|
|
61
|
+
const parsedSyntax = parseMacroSyntaxNodeForDefinition(definition, baseContext);
|
|
62
|
+
const context = {
|
|
63
|
+
...baseContext,
|
|
64
|
+
parsedSyntax() {
|
|
65
|
+
return parsedSyntax;
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
const output = definition.expand(context, decodedSignature);
|
|
69
|
+
if (!isMacroOutput(output)) {
|
|
70
|
+
throw new Error(`Macro "${macroName}" must return a value created by ctx.output.expr(...), ctx.output.stmt(...), ctx.output.stmts(...), ctx.controlFlow.rewriteWithValue(...), or ctx.controlFlow.deferCleanup(...).`);
|
|
71
|
+
}
|
|
72
|
+
if (isMacroValueRewriteOutput(output)) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const lowered = lowerMacroOutput(output);
|
|
76
|
+
if (resolved.placeholder.invocation.declarationSpan && expansionMode === 'augment') {
|
|
77
|
+
return augmentDeclarationExpansion(resolved, baseContext, lowered);
|
|
78
|
+
}
|
|
79
|
+
return lowered;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof MacroError) {
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
86
|
+
throw createMacroError(resolved, message);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function collectDeclaredNamesFromBindingName(bindingName, names) {
|
|
91
|
+
if (ts.isIdentifier(bindingName)) {
|
|
92
|
+
names.add(bindingName.text);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
for (const element of bindingName.elements) {
|
|
96
|
+
if (ts.isOmittedExpression(element)) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
collectDeclaredNamesFromBindingName(element.name, names);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function collectPrimaryStatementNames(statement) {
|
|
103
|
+
if ((ts.isClassDeclaration(statement) ||
|
|
104
|
+
ts.isFunctionDeclaration(statement) ||
|
|
105
|
+
ts.isInterfaceDeclaration(statement) ||
|
|
106
|
+
ts.isTypeAliasDeclaration(statement) ||
|
|
107
|
+
ts.isEnumDeclaration(statement) ||
|
|
108
|
+
ts.isModuleDeclaration(statement)) &&
|
|
109
|
+
statement.name) {
|
|
110
|
+
return [statement.name.text];
|
|
111
|
+
}
|
|
112
|
+
if (ts.isVariableStatement(statement)) {
|
|
113
|
+
const names = new Set();
|
|
114
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
115
|
+
collectDeclaredNamesFromBindingName(declaration.name, names);
|
|
116
|
+
}
|
|
117
|
+
return [...names];
|
|
118
|
+
}
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
function augmentDeclarationExpansion(resolved, ctx, lowered) {
|
|
122
|
+
if (lowered.kind !== 'stmt') {
|
|
123
|
+
throw createMacroError(resolved, `${ctx.name} declaration macros with expansionMode "augment" must emit statements.`);
|
|
124
|
+
}
|
|
125
|
+
const declarationName = resolved.placeholder.invocation.declarationName;
|
|
126
|
+
if (declarationName) {
|
|
127
|
+
const duplicate = lowered.nodes.find((statement) => collectPrimaryStatementNames(statement).includes(declarationName));
|
|
128
|
+
if (duplicate) {
|
|
129
|
+
throw createMacroError(resolved, `${ctx.name} declaration macros with expansionMode "augment" cannot emit a declaration named "${declarationName}" because the original declaration is preserved.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const preservedDeclaration = synthesizeHostNode(parseSingleHostStatement(resolved.placeholder.invocation.fileName, 'macro_augment_decl', ctx.syntax.declaration().text(), `${ctx.name} declaration macros with expansionMode "augment" must preserve a valid declaration.`));
|
|
133
|
+
if (resolved.placeholder.invocation.preserveDeclaration === false) {
|
|
134
|
+
return lowered;
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
...lowered,
|
|
138
|
+
nodes: [
|
|
139
|
+
preservedDeclaration,
|
|
140
|
+
...lowered.nodes,
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function validateDeclarationMacroPlacement(resolved, ctx) {
|
|
145
|
+
if (!resolved.placeholder.invocation.declarationSpan) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const parent = resolved.callExpression.parent;
|
|
149
|
+
if (ts.isExpressionStatement(parent) && ts.isSourceFile(parent.parent)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
ctx.error(`${ctx.name} declaration macros currently only support module-scope declarations.`);
|
|
153
|
+
}
|
|
154
|
+
function createUnsupportedAdvancedContext(baseContext) {
|
|
155
|
+
return {
|
|
156
|
+
...baseContext,
|
|
157
|
+
controlFlow: {
|
|
158
|
+
deferCleanup() {
|
|
159
|
+
throw new Error('This macro requires advanced control-flow support, but no prepared program was available.');
|
|
160
|
+
},
|
|
161
|
+
freshBinding() {
|
|
162
|
+
throw new Error('This macro requires advanced control-flow support, but no prepared program was available.');
|
|
163
|
+
},
|
|
164
|
+
placement() {
|
|
165
|
+
throw new Error('This macro requires advanced control-flow support, but no prepared program was available.');
|
|
166
|
+
},
|
|
167
|
+
rewriteWithValue() {
|
|
168
|
+
throw new Error('This macro requires advanced control-flow support, but no prepared program was available.');
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
reflect: {
|
|
172
|
+
declarationShape() {
|
|
173
|
+
throw new Error('This macro requires declaration/type reflection, but no prepared program was available.');
|
|
174
|
+
},
|
|
175
|
+
typeShape() {
|
|
176
|
+
throw new Error('This macro requires declaration/type reflection, but no prepared program was available.');
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
semantics: {
|
|
180
|
+
argExpanded() {
|
|
181
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
182
|
+
},
|
|
183
|
+
argType() {
|
|
184
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
185
|
+
},
|
|
186
|
+
awaitedType() {
|
|
187
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
188
|
+
},
|
|
189
|
+
classDeclarationOfType() {
|
|
190
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
191
|
+
},
|
|
192
|
+
classifyCanonicalFailureType() {
|
|
193
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
194
|
+
},
|
|
195
|
+
classifyCanonicalResultCarrierType() {
|
|
196
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
197
|
+
},
|
|
198
|
+
classifyCanonicalResultType() {
|
|
199
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
200
|
+
},
|
|
201
|
+
classifyTryCarrierType() {
|
|
202
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
203
|
+
},
|
|
204
|
+
exprType() {
|
|
205
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
206
|
+
},
|
|
207
|
+
enclosingFunction() {
|
|
208
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
209
|
+
},
|
|
210
|
+
enclosingFunctionCanonicalResult() {
|
|
211
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
212
|
+
},
|
|
213
|
+
finiteCases() {
|
|
214
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
215
|
+
},
|
|
216
|
+
isAssignable() {
|
|
217
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
218
|
+
},
|
|
219
|
+
localDeclarationHasAnnotation() {
|
|
220
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
221
|
+
},
|
|
222
|
+
nullType() {
|
|
223
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
224
|
+
},
|
|
225
|
+
parameterType() {
|
|
226
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
227
|
+
},
|
|
228
|
+
primaryExprEnclosingFunction() {
|
|
229
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
230
|
+
},
|
|
231
|
+
primaryExprEnclosingFunctionCanonicalResult() {
|
|
232
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
233
|
+
},
|
|
234
|
+
primaryExprExpanded() {
|
|
235
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
236
|
+
},
|
|
237
|
+
primaryExprPrelude() {
|
|
238
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
239
|
+
},
|
|
240
|
+
primaryExprCanonicalResultCarrier() {
|
|
241
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
242
|
+
},
|
|
243
|
+
primaryExprCanonicalResult() {
|
|
244
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
245
|
+
},
|
|
246
|
+
primaryExprContainsMacroInvocations() {
|
|
247
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
248
|
+
},
|
|
249
|
+
primaryExprTryCarrier() {
|
|
250
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
251
|
+
},
|
|
252
|
+
primaryExprType() {
|
|
253
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
254
|
+
},
|
|
255
|
+
readSet() {
|
|
256
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
257
|
+
},
|
|
258
|
+
undefinedType() {
|
|
259
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
260
|
+
},
|
|
261
|
+
valueBindingCallableInScope() {
|
|
262
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
263
|
+
},
|
|
264
|
+
valueBindingInScope() {
|
|
265
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
266
|
+
},
|
|
267
|
+
writeSet() {
|
|
268
|
+
throw new Error('This macro requires semantic queries, but no prepared program was available.');
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|