ttsc 0.30.3 → 0.31.0
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/cmd/graphbench/main.go +2 -3
- package/cmd/graphdump/main.go +42 -16
- package/cmd/graphdump/run_declares_the_capability_its_output_carries_test.go +32 -18
- package/cmd/graphdump/run_reports_an_unknown_flag_without_exiting_the_process_test.go +10 -9
- package/cmd/graphdump/run_reports_an_unloadable_project_without_printing_a_dump_test.go +8 -7
- package/cmd/platform/command_operation_families_test.go +192 -0
- package/cmd/platform/main.go +11 -1
- package/cmd/ttsc/api_compile.go +166 -46
- package/cmd/ttsc/api_compile_branches_test.go +97 -10
- package/cmd/ttsc/api_transform.go +134 -46
- package/cmd/ttsc/api_transform_branches_test.go +10 -7
- package/cmd/ttsc/build.go +177 -68
- package/cmd/ttsc/build_branches_test.go +35 -7
- package/cmd/ttsc/cli_command_operation_families_test.go +1287 -0
- package/cmd/ttsc/cli_contract_helpers_test.go +82 -0
- package/cmd/ttsc/compiler_argument_cwd_test.go +57 -0
- package/cmd/ttsc/filter.go +31 -14
- package/cmd/ttsc/filter_resolves_flag_names_case_insensitively_test.go +10 -13
- package/cmd/ttsc/filter_strips_unknown_forwarded_flag_test.go +10 -16
- package/cmd/ttsc/flags_gen.go +2 -2
- package/cmd/ttsc/helpers_test.go +67 -10
- package/cmd/ttsc/main.go +122 -21
- package/cmd/ttsc/main_alias_branches_test.go +35 -9
- package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/ambient.d.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/main.ts +2 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/mytype.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/tsconfig.base.json +3 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/tsconfig.json +5 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/index.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/decorated/main.ts +10 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/decorated/types.ts +3 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/helpers.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/isolated.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/main.ts +7 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/nested/model.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/tsconfig.json +14 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPITransformUsesCurrentDirectory/index.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPITransformUsesCurrentDirectory/tsconfig.json +7 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildAllowsUnusedTypeParametersOnOverloadSignatures/index.ts +4 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildAllowsUnusedTypeParametersOnOverloadSignatures/tsconfig.json +11 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSemanticDiagnostics/index.ts +2 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSemanticDiagnostics/tsconfig.json +9 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSyntacticDiagnostics/index.ts +2 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSyntacticDiagnostics/tsconfig.json +8 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksUnusedParameters/index.ts +3 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksUnusedParameters/tsconfig.json +10 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildEmitErrorRejectsManifest/index.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildEmitErrorRejectsManifest/tsconfig.json +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIReportsDiagnosticsWithoutEmit/index.ts +1 -0
- package/cmd/ttsc/testdata/cli_operation_families/TestCLIReportsDiagnosticsWithoutEmit/tsconfig.json +8 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/emit.json +8 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/flag-shaped.json +7 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/index.ts +2 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/nested/tsconfig.app.json +11 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/outside.json +8 -0
- package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/tsconfig.json +8 -0
- package/cmd/ttscgraph/auxiliary_identity_state_tracks_retargets_not_source_contents_test.go +26 -15
- package/cmd/ttscgraph/disk_realpath_other.go +2 -0
- package/cmd/ttscgraph/dump.go +46 -29
- package/cmd/ttscgraph/prepared_projection.go +61 -0
- package/cmd/ttscgraph/projection_fixture_test.go +96 -0
- package/cmd/ttscgraph/run_dump_claims_artifacts_only_when_it_asked_test.go +30 -5
- package/cmd/ttscgraph/run_dump_declares_the_capability_its_output_carries_test.go +6 -1
- package/cmd/ttscgraph/run_dump_emits_only_checker_verified_member_relations_test.go +12 -5
- package/cmd/ttscgraph/run_dump_prints_the_graph_as_json_test.go +17 -12
- package/cmd/ttscgraph/run_help_version_and_bad_flags_exit_codes_test.go +8 -3
- package/cmd/ttscgraph/serve.go +116 -79
- package/cmd/ttscgraph/serve_adopts_a_republished_artifact_set_test.go +16 -167
- package/cmd/ttscgraph/serve_adopts_a_republished_set_over_the_shard_protocol_test.go +122 -0
- package/cmd/ttscgraph/serve_answers_a_project_that_implements_its_own_ambient_declaration_test.go +35 -7
- package/cmd/ttscgraph/serve_early_error_encode_failure_is_observable_test.go +5 -0
- package/cmd/ttscgraph/serve_error_response_still_names_its_mode_test.go +10 -5
- package/cmd/ttscgraph/serve_git_ignore_projection_test.go +150 -0
- package/cmd/ttscgraph/serve_keeps_a_startup_set_a_client_never_mentions_test.go +69 -0
- package/cmd/ttscgraph/serve_object_members_refresh_without_identity_collisions_test.go +82 -0
- package/cmd/ttscgraph/serve_phase_trace_accounts_for_load_failure_test.go +9 -3
- package/cmd/ttscgraph/serve_phase_trace_is_opt_in_and_payload_free_test.go +12 -6
- package/cmd/ttscgraph/serve_projects_an_artifact_no_source_owns_test.go +13 -16
- package/cmd/ttscgraph/serve_protocol_fails_the_stream_on_an_unaddressable_request_line_test.go +10 -9
- package/cmd/ttscgraph/serve_protocol_negotiates_incremental_shards_test.go +37 -2
- package/cmd/ttscgraph/serve_protocol_retries_session_creation_test.go +7 -2
- package/cmd/ttscgraph/serve_protocol_reuses_session_test.go +13 -3
- package/cmd/ttscgraph/serve_session_applies_source_edit_incrementally_test.go +12 -7
- package/cmd/ttscgraph/serve_session_fails_closed_on_deleted_config_test.go +12 -7
- package/cmd/ttscgraph/serve_session_fails_closed_on_invalid_config_test.go +8 -3
- package/cmd/ttscgraph/serve_session_keeps_base_url_fallback_unchanged_test.go +7 -2
- package/cmd/ttscgraph/serve_session_keeps_change_detection_live_after_initial_dump_error_test.go +66 -0
- package/cmd/ttscgraph/serve_session_keeps_esm_directory_candidate_unchanged_test.go +12 -3
- package/cmd/ttscgraph/serve_session_keeps_exports_blocked_file_candidates_unchanged_test.go +8 -3
- package/cmd/ttscgraph/serve_session_keeps_inactive_conditional_export_unchanged_test.go +12 -3
- package/cmd/ttscgraph/serve_session_keeps_lower_priority_module_candidate_unchanged_test.go +14 -8
- package/cmd/ttscgraph/serve_session_keeps_lower_priority_paths_pattern_unchanged_test.go +12 -3
- package/cmd/ttscgraph/serve_session_keeps_missing_literal_root_unchanged_test.go +7 -2
- package/cmd/ttscgraph/serve_session_keeps_nonlongest_root_dirs_candidate_unchanged_test.go +12 -3
- package/cmd/ttscgraph/serve_session_rebuilds_import_graph_change_test.go +17 -8
- package/cmd/ttscgraph/serve_session_reloads_commonjs_package_entry_for_esm_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_created_literal_root_test.go +7 -2
- package/cmd/ttscgraph/serve_session_reloads_extended_config_change_test.go +9 -4
- package/cmd/ttscgraph/serve_session_reloads_module_suffix_candidate_test.go +13 -4
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_conditional_export_test.go +13 -8
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_config_types_test.go +7 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_excluded_import_test.go +11 -3
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_export_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_import_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_path_alias_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_reference_path_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_root_dirs_target_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_newly_resolved_type_reference_test.go +11 -2
- package/cmd/ttscgraph/serve_session_reloads_root_file_set_test.go +11 -5
- package/cmd/ttscgraph/serve_session_reloads_source_deleted_during_load_test.go +16 -9
- package/cmd/ttscgraph/serve_session_reloads_superseding_module_candidates_test.go +18 -13
- package/cmd/ttscgraph/serve_session_reloads_transitive_project_reference_test.go +14 -5
- package/cmd/ttscgraph/serve_session_reloads_when_program_plugin_linked_test.go +13 -8
- package/cmd/ttscgraph/serve_session_retries_a_pending_dump_before_unchanged_test.go +62 -0
- package/cmd/ttscgraph/serve_session_reuses_unchanged_preamble_source_test.go +21 -0
- package/cmd/ttscgraph/serve_session_reuses_unchanged_snapshot_test.go +12 -7
- package/cmd/ttscgraph/serve_session_revisits_source_edited_during_load_test.go +18 -8
- package/cmd/ttscgraph/serve_session_tolerates_os_invalid_resolution_candidate_test.go +13 -9
- package/cmd/ttscgraph/serve_session_tracks_all_module_specifier_forms_test.go +12 -3
- package/cmd/ttscgraph/serve_session_tracks_diamond_project_references_once_test.go +12 -8
- package/cmd/ttscgraph/serve_shards.go +356 -279
- package/cmd/ttscgraph/serve_shards_abandoned_generation_converges_on_retry_test.go +41 -16
- package/cmd/ttscgraph/serve_shards_delete_removed_source_test.go +14 -4
- package/cmd/ttscgraph/serve_shards_external_endpoints_test.go +18 -2
- package/cmd/ttscgraph/serve_shards_keep_source_distributed_dependencies_at_the_boundary_test.go +36 -5
- package/cmd/ttscgraph/serve_shards_match_full_dump_oracle_test.go +12 -3
- package/cmd/ttscgraph/serve_shards_merge_pending_and_new_edits_test.go +36 -3
- package/cmd/ttscgraph/serve_shards_prune_unreferenced_external_endpoints_test.go +18 -2
- package/cmd/ttscgraph/serve_shards_publish_created_source_test.go +16 -13
- package/cmd/ttscgraph/serve_shards_rebuild_declaration_edit_test.go +14 -4
- package/cmd/ttscgraph/serve_shards_refresh_cross_file_implementation_test.go +24 -5
- package/cmd/ttscgraph/serve_shards_refresh_dependent_diagnostics_test.go +30 -7
- package/cmd/ttscgraph/serve_shards_rename_moves_source_identity_test.go +14 -11
- package/cmd/ttscgraph/serve_shards_retry_preserves_committed_generation_test.go +17 -7
- package/cmd/ttscgraph/serve_shards_reuse_unaffected_sources_test.go +21 -7
- package/cmd/ttscgraph/serve_snapshot_proves_its_program_without_a_second_read_test.go +57 -16
- package/cmd/ttscgraph/serve_source_encoding_test.go +133 -0
- package/cmd/ttscserver/command_operation_families_test.go +207 -0
- package/cmd/ttscserver/main.go +121 -39
- package/cmd/ttscserver/resolve_launch_uses_native_flag_authority_test.go +147 -0
- package/cmd/ttscserver/run_lsp_forwards_execute_command_advertisement_flags_test.go +7 -0
- package/cmd/ttscserver/run_lsp_prefers_tsgo_flag_test.go +13 -1
- package/cmd/ttscserver/run_lsp_reports_getwd_error_test.go +5 -0
- package/cmd/ttscserver/run_lsp_reports_server_error_test.go +10 -3
- package/cmd/ttscserver/run_lsp_uses_native_plugin_manifest_source_test.go +13 -10
- package/cmd/ttscserver/run_lsp_uses_tsgo_environment_test.go +10 -3
- package/driver/authored_region_maps_positions_around_the_preamble_test.go +95 -0
- package/driver/build_information_uses_selected_output_identity_test.go +148 -0
- package/driver/check_observations.go +67 -0
- package/driver/config_discovery.go +93 -24
- package/driver/declaration_shape.go +9 -0
- package/driver/diagnostics_preamble.go +8 -7
- package/driver/emit_containment.go +29 -8
- package/driver/emit_plugin.go +106 -36
- package/driver/emit_plugin_output.go +26 -2
- package/driver/emit_provenance.go +155 -0
- package/driver/graph.go +54 -20
- package/driver/host.go +26 -3
- package/driver/input_observation.go +78 -16
- package/driver/input_observation_test.go +34 -11
- package/driver/lsp.go +401 -30
- package/driver/overlay.go +69 -2
- package/driver/plugins.go +256 -24
- package/driver/private_result.go +43 -0
- package/driver/program.go +439 -95
- package/driver/resolution_candidates.go +63 -14
- package/driver/resolution_candidates_test.go +28 -0
- package/driver/resolutioninputs/recorder.cjs +1149 -0
- package/driver/resolutioninputs/resolutioninputs.go +37 -0
- package/driver/rewrite.go +373 -420
- package/driver/session.go +80 -12
- package/driver/sourcemap_preamble.go +38 -16
- package/driver/transform_dependencies.go +38 -10
- package/driver/transform_dependencies_declares_every_file_without_a_contributor_test.go +9 -8
- package/driver/transform_dependencies_drops_a_self_reported_dependency_test.go +7 -6
- package/driver/transform_dependencies_keys_a_reported_path_like_the_envelope_test.go +9 -9
- package/driver/transform_dependencies_requires_every_contributor_to_declare_test.go +10 -5
- package/driver/transform_dependencies_stays_silent_for_an_undeclared_contributor_test.go +8 -6
- package/driver/transform_dependencies_withdraws_completeness_after_an_unusable_dependency_test.go +9 -5
- package/driver/transform_source_map.go +388 -0
- package/driver/windowsjunction/create_preserves_existing_directory_windows_test.go +48 -0
- package/driver/windowsjunction/create_treats_paths_as_data_windows_test.go +55 -0
- package/driver/windowsjunction/windowsjunction.go +17 -1
- package/go.mod +10 -10
- package/go.sum +10 -10
- package/internal/cwd/cwd.go +13 -0
- package/internal/e2etrace/artifact.go +147 -0
- package/internal/e2etrace/completion_hints.go +35 -0
- package/internal/e2etrace/completion_hints_test.go +76 -0
- package/internal/e2etrace/e2etrace.go +303 -0
- package/internal/e2etrace/output.go +50 -0
- package/internal/graph/artifacts.go +69 -12
- package/internal/graph/artifacts_index_what_a_plugin_published_test.go +19 -8
- package/internal/graph/artifacts_survive_a_partial_rebuild_test.go +11 -12
- package/internal/graph/assigned_implementations_of_declaration_file_symbols_leave_no_edge_source_test.go +10 -12
- package/internal/graph/assigned_implementations_of_node_modules_symbols_leave_no_edge_source_test.go +7 -1
- package/internal/graph/build.go +122 -38
- package/internal/graph/build_files_reuses_committed_cross_file_endpoints_test.go +9 -3
- package/internal/graph/build_keeps_source_distributed_dependencies_at_the_external_boundary_test.go +10 -1
- package/internal/graph/build_records_a_node_per_top_level_declaration_test.go +10 -4
- package/internal/graph/build_releases_the_scratch_it_no_longer_reads_test.go +22 -15
- package/internal/graph/decorators.go +18 -0
- package/internal/graph/decorators_capture_name_and_literal_arguments_test.go +9 -4
- package/internal/graph/diagnostics.go +21 -8
- package/internal/graph/doc_refs_are_the_use_the_checker_already_counts_test.go +25 -13
- package/internal/graph/doc_refs_resolve_documentation_links_test.go +19 -15
- package/internal/graph/doc_tags.go +28 -19
- package/internal/graph/doc_tags_are_claimed_before_they_are_read_test.go +16 -6
- package/internal/graph/doc_tags_capture_every_unrecognized_tag_test.go +9 -2
- package/internal/graph/doc_tags_read_only_what_the_parser_attached_test.go +12 -8
- package/internal/graph/doc_tags_stop_at_the_external_boundary_test.go +11 -1
- package/internal/graph/doc_tags_survive_line_endings_and_repeated_blocks_test.go +16 -6
- package/internal/graph/dump.go +200 -51
- package/internal/graph/dump_checkout_paths_are_stable_test.go +9 -2
- package/internal/graph/dump_diagnostics_ride_the_generation_that_built_it_test.go +10 -11
- package/internal/graph/dump_evidence_skips_leading_trivia_test.go +8 -2
- package/internal/graph/dump_is_a_function_of_the_source_test.go +12 -13
- package/internal/graph/dump_never_serializes_a_list_as_null_test.go +9 -9
- package/internal/graph/dump_path_mapper_caches_alias_resolution_test.go +10 -2
- package/internal/graph/dump_path_mapper_rejects_unportable_roots_and_collisions_test.go +53 -0
- package/internal/graph/{dump_paths_are_portable_and_injective_test.go → dump_path_mapper_uses_portable_coordinates_test.go} +8 -43
- package/internal/graph/dump_paths.go +61 -25
- package/internal/graph/dump_paths_canonicalize_windows_short_root_test.go +45 -8
- package/internal/graph/dump_rejects_provenance_only_path_errors_test.go +5 -0
- package/internal/graph/dump_serializes_the_full_graph_test.go +13 -19
- package/internal/graph/dump_symlink_project_publishes_matching_base_test.go +8 -0
- package/internal/graph/dump_uses_ecma_line_terminators_test.go +12 -6
- package/internal/graph/duplicate_variable_object_members_keep_first_declaration_test.go +11 -8
- package/internal/graph/edge_spans_point_to_resolved_usage_test.go +13 -5
- package/internal/graph/edges.go +44 -47
- package/internal/graph/edges_cover_class_level_references_test.go +14 -11
- package/internal/graph/enum_initializer_calls_are_edges_test.go +13 -3
- package/internal/graph/enum_members_carry_their_names_on_the_enum_node_test.go +19 -26
- package/internal/graph/exports.go +3 -5
- package/internal/graph/file_diagnostics_match_tsgo_code_and_location_test.go +9 -4
- package/internal/graph/file_diagnostics_report_code_column_and_message_test.go +11 -5
- package/internal/graph/function_locals_do_not_collide_test.go +27 -7
- package/internal/graph/gitignore.go +25 -12
- package/internal/graph/graph.go +167 -52
- package/internal/graph/heritage_edges_cover_implements_and_interface_extends_test.go +11 -3
- package/internal/graph/heritage_edges_keep_extends_and_implements_to_same_base_test.go +6 -0
- package/internal/graph/heritage_edges_record_extends_versus_implements_origin_test.go +9 -3
- package/internal/graph/heritage_edges_traverse_barrels_and_stop_at_external_leaves_test.go +11 -4
- package/internal/graph/line_model.go +44 -25
- package/internal/graph/literals.go +6 -7
- package/internal/graph/literals_are_absent_when_the_type_admits_more_than_it_can_name_test.go +10 -5
- package/internal/graph/literals_cover_enum_members_the_graph_has_no_nodes_for_test.go +15 -17
- package/internal/graph/literals_do_not_depend_on_declaration_line_wrapping_test.go +10 -9
- package/internal/graph/literals_render_every_value_in_typescript_source_form_test.go +11 -11
- package/internal/graph/literals_resolve_through_alias_indirection_test.go +11 -11
- package/internal/graph/member_relation_edges_follow_checker_validity_test.go +11 -2
- package/internal/graph/member_relation_edges_preserve_checker_boundaries_test.go +11 -1
- package/internal/graph/member_relation_edges_reject_checker_invalid_pairs_test.go +12 -7
- package/internal/graph/namespace_dotted_form_qualifies_deeply_test.go +12 -3
- package/internal/graph/namespace_members_become_qualified_nodes_and_edges_test.go +12 -2
- package/internal/graph/node_identity_is_position_invariant_test.go +8 -2
- package/internal/graph/node_ids_preserve_hash_bearing_components_test.go +10 -2
- package/internal/graph/node_modifiers_emit_union_strings_test.go +13 -12
- package/internal/graph/nodes_are_marked_exported_through_the_export_table_test.go +12 -14
- package/internal/graph/object_literal_declarations_resolve_calls_test.go +170 -0
- package/internal/graph/object_literal_members_ride_on_the_snapshot_test.go +14 -13
- package/internal/graph/object_member_signatures_preserve_literal_whitespace_test.go +11 -7
- package/internal/graph/object_members.go +100 -1
- package/internal/graph/overload_implementation_replaces_signature_test.go +13 -2
- package/internal/graph/property_member_edges_remain_owner_visible_test.go +9 -3
- package/internal/graph/provenance.go +172 -87
- package/internal/graph/resolve.go +46 -12
- package/internal/graph/resolve_prefers_implementation_declaration_test.go +10 -2
- package/internal/graph/resolve_unwraps_barrel_reexport_to_real_declaration_test.go +16 -20
- package/internal/graph/source.go +16 -6
- package/internal/graph/source_texts_cover_every_resident_program_source_test.go +11 -7
- package/internal/graph/type_ref_edges_cover_typeof_as_satisfies_test.go +21 -2
- package/internal/graph/type_ref_edges_resolve_named_types_across_files_test.go +8 -3
- package/internal/graph/value_access_edges_cover_properties_test.go +11 -3
- package/internal/graph/value_call_edges_attribute_function_assignments_to_members_test.go +10 -4
- package/internal/graph/value_call_edges_cover_jsx_components_test.go +12 -8
- package/internal/graph/value_call_edges_cover_methods_and_constructors_test.go +12 -9
- package/internal/graph/value_call_edges_cover_variable_bound_callables_test.go +9 -3
- package/internal/graph/value_call_edges_do_not_double_record_invoked_member_access_test.go +10 -3
- package/internal/graph/value_call_edges_record_construct_versus_call_origin_test.go +12 -9
- package/internal/graph/value_call_edges_resolve_across_files_and_dedupe_test.go +10 -3
- package/internal/graph/value_call_edges_skip_self_and_unresolved_test.go +16 -5
- package/internal/graph/wire_node_ids_share_alias_resolution_test.go +10 -4
- package/internal/graphsymbols/position_helpers_follow_ecma_line_terminators_test.go +16 -4
- package/internal/graphsymbols/provider.go +278 -113
- package/internal/lspserver/lsp_clean_didopen_refreshes_compiler_state_test.go +14 -12
- package/internal/lspserver/lsp_completion_gate_never_refuses_a_matching_line_test.go +7 -1
- package/internal/lspserver/lsp_completion_hints_longest_trigger_wins_test.go +30 -5
- package/internal/lspserver/lsp_completion_hints_nearest_trigger_wins_test.go +5 -0
- package/internal/lspserver/lsp_completion_merges_into_upstream_response_test.go +23 -10
- package/internal/lspserver/lsp_completion_nearest_hint_replaces_nearest_filter_test.go +7 -1
- package/internal/lspserver/lsp_completion_preserves_completion_list_extensions_test.go +13 -5
- package/internal/lspserver/lsp_completion_refuses_hints_inside_a_string_literal_test.go +11 -7
- package/internal/lspserver/lsp_completion_replaces_full_filter_in_rank_order_test.go +12 -2
- package/internal/lspserver/lsp_completion_request.go +5 -26
- package/internal/lspserver/lsp_completion_scope.go +13 -10
- package/internal/lspserver/lsp_completion_scope_bench_test.go +11 -5
- package/internal/lspserver/lsp_completion_scope_classifies_regex_statement_and_operator_boundaries_test.go +8 -1
- package/internal/lspserver/lsp_completion_scope_ignores_jsdoc_bytes_in_literals_test.go +11 -10
- package/internal/lspserver/lsp_completion_scope_refuses_regex_hints_test.go +7 -3
- package/internal/lspserver/lsp_completion_trigger_uses_last_rune_test.go +6 -0
- package/internal/lspserver/lsp_deleted_watched_file_withdraws_plugin_diagnostics_test.go +11 -10
- package/internal/lspserver/lsp_didsave_keeps_the_incremental_changed_uri_path_test.go +12 -9
- package/internal/lspserver/lsp_document_diagnostics_omits_cached_project_when_current_result_has_none_test.go +17 -5
- package/internal/lspserver/lsp_envelope.go +84 -11
- package/internal/lspserver/lsp_executable_project_input_change_requests_launcher_restart_test.go +12 -9
- package/internal/lspserver/lsp_external_watched_change_retains_program_test.go +8 -2
- package/internal/lspserver/lsp_frame.go +42 -10
- package/internal/lspserver/lsp_hints_absence_is_not_an_error_test.go +16 -15
- package/internal/lspserver/lsp_hints_refresh_coalesces_concurrent_requests_test.go +21 -12
- package/internal/lspserver/lsp_hints_refresh_ignores_a_superseded_generation_test.go +20 -12
- package/internal/lspserver/lsp_hints_refresh_keeps_each_producer_isolated_test.go +30 -9
- package/internal/lspserver/lsp_hints_refresh_replaces_the_session_snapshot_test.go +25 -18
- package/internal/lspserver/lsp_hints_refresh_scheduled_by_editor_events_test.go +12 -12
- package/internal/lspserver/lsp_hints_refresh_serves_completion_while_running_test.go +21 -8
- package/internal/lspserver/lsp_index_byte_from_bounds_its_search_start_test.go +9 -7
- package/internal/lspserver/lsp_initialize_constrains_position_encoding_to_utf16_test.go +57 -21
- package/internal/lspserver/lsp_late_completion_trigger_is_reported_once_test.go +16 -17
- package/internal/lspserver/lsp_native_completion_hints_decode_flat_lint_wire_test.go +8 -2
- package/internal/lspserver/lsp_native_completion_hints_grouped_compatibility_boundary_test.go +5 -0
- package/internal/lspserver/lsp_native_plugin_source.go +381 -202
- package/internal/lspserver/lsp_native_plugin_source_ends_the_session_on_a_selection_input_test.go +234 -0
- package/internal/lspserver/lsp_native_reply_policies_test.go +475 -0
- package/internal/lspserver/lsp_native_reply_policy.go +232 -0
- package/internal/lspserver/lsp_native_resident.go +171 -57
- package/internal/lspserver/lsp_plugin.go +372 -68
- package/internal/lspserver/lsp_plugin_completion_resolve_stays_local_test.go +13 -4
- package/internal/lspserver/lsp_plugin_selection_inputs.go +283 -0
- package/internal/lspserver/lsp_plugin_selection_inputs_follow_directory_case_semantics_windows_test.go +81 -0
- package/internal/lspserver/lsp_position_conversions_span_astral_and_combining_runes_test.go +33 -11
- package/internal/lspserver/lsp_project_context_transport_identity_test.go +14 -2
- package/internal/lspserver/lsp_project_diagnostics.go +25 -4
- package/internal/lspserver/lsp_project_diagnostics_capability_is_independent_test.go +13 -2
- package/internal/lspserver/lsp_project_diagnostics_program_input_overlap_refreshes_all_producers_test.go +14 -4
- package/internal/lspserver/lsp_project_diagnostics_refresh_accumulates_owner_freshness_test.go +8 -2
- package/internal/lspserver/lsp_project_diagnostics_refresh_keeps_each_producer_last_good_test.go +10 -5
- package/internal/lspserver/lsp_project_diagnostics_refreshes_only_input_owners_test.go +14 -2
- package/internal/lspserver/lsp_project_diagnostics_resume_preserves_generation_test.go +8 -2
- package/internal/lspserver/lsp_project_diagnostics_translates_relative_client_project_test.go +15 -11
- package/internal/lspserver/lsp_project_input_ownership_resolves_declared_spellings_test.go +17 -8
- package/internal/lspserver/lsp_project_input_path_key_windows.go +16 -16
- package/internal/lspserver/lsp_project_input_path_key_windows_test.go +34 -18
- package/internal/lspserver/lsp_project_input_registration.go +5 -1
- package/internal/lspserver/lsp_project_input_registration_rechecks_selection_baseline_test.go +10 -4
- package/internal/lspserver/lsp_project_input_registration_reconciles_rejected_pending_request_test.go +5 -0
- package/internal/lspserver/lsp_project_input_registration_shapes_patterns_test.go +9 -3
- package/internal/lspserver/lsp_project_input_watchers_anchor_missing_paths_test.go +8 -3
- package/internal/lspserver/lsp_project_inputs.go +203 -59
- package/internal/lspserver/lsp_project_inputs_match_missing_exact_and_glob_test.go +10 -6
- package/internal/lspserver/lsp_project_inputs_reject_invalid_and_foreign_snapshots_test.go +25 -2
- package/internal/lspserver/lsp_proxy.go +239 -80
- package/internal/lspserver/lsp_refresh.go +16 -1
- package/internal/lspserver/lsp_reload_directories_compare_immediate_topology_test.go +66 -19
- package/internal/lspserver/lsp_reload_directories_separate_glob_territory_test.go +26 -6
- package/internal/lspserver/lsp_reload_file_fingerprint_preserves_raw_symlink_target_test.go +12 -6
- package/internal/lspserver/lsp_reload_fingerprints_read_a_junction_as_a_link_test.go +76 -0
- package/internal/lspserver/lsp_resident_falls_back_when_serve_unsupported_test.go +20 -13
- package/internal/lspserver/lsp_resident_invalidation_broadcasts_program_input_overlap_test.go +9 -4
- package/internal/lspserver/lsp_resident_invalidation_targets_project_input_owners_test.go +6 -1
- package/internal/lspserver/lsp_resident_maps_verb_args_test.go +5 -0
- package/internal/lspserver/lsp_same_transport_entries_are_deduplicated_test.go +10 -1
- package/internal/lspserver/lsp_server.go +124 -21
- package/internal/lspserver/lsp_symbols.go +92 -13
- package/internal/lspserver/lsp_watched_file_changes_reach_compiler_caches_test.go +11 -10
- package/internal/sourceprocess/complete_group.go +70 -0
- package/internal/sourceprocess/complete_group_preserves_original_wait_and_requires_independent_absence_test.go +145 -0
- package/internal/sourceprocess/contain_unix.go +143 -0
- package/internal/sourceprocess/contain_windows.go +442 -0
- package/internal/sourceprocess/darwin_group_retirement_preserves_phase_evidence_test.go +287 -0
- package/internal/sourceprocess/observe_exit_darwin.go +57 -0
- package/internal/sourceprocess/observe_exit_linux.go +27 -0
- package/internal/sourceprocess/observe_exit_other.go +11 -0
- package/internal/sourceprocess/reap_linux.go +31 -0
- package/internal/sourceprocess/reap_other.go +10 -0
- package/internal/sourceprocess/request_preserves_native_command_inputs_test.go +86 -0
- package/internal/sourceprocess/run.go +216 -0
- package/internal/sourceprocess/target_windows.go +211 -0
- package/internal/sourceprocess/windows_job_accounting_rejects_invalid_boundary_test.go +97 -0
- package/internal/sourceprocess/windows_target_owns_suspended_admission_test.go +179 -0
- package/internal/watchhelper/run.go +32 -0
- package/internal/watchhelper/run_linux.go +323 -0
- package/internal/watchhelper/run_linux_test.go +418 -0
- package/internal/watchhelper/run_other.go +16 -0
- package/internal/watchhelper/watchhelper.go +100 -0
- package/lib/TtscCompiler.d.ts +118 -21
- package/lib/TtscCompiler.js +175 -179
- package/lib/TtscCompiler.js.map +1 -1
- package/lib/TtscService.d.ts +66 -18
- package/lib/TtscService.js +81 -24
- package/lib/TtscService.js.map +1 -1
- package/lib/TtscServiceRequestOptions.d.ts +21 -0
- package/lib/TtscServiceRequestOptions.js +3 -0
- package/lib/TtscServiceRequestOptions.js.map +1 -0
- package/lib/compiler/internal/CapturedProcessOutput.d.ts +61 -0
- package/lib/compiler/internal/CapturedProcessOutput.js +3 -0
- package/lib/compiler/internal/CapturedProcessOutput.js.map +1 -0
- package/lib/compiler/internal/CompilerArgumentsInspection.d.ts +53 -0
- package/lib/compiler/internal/CompilerArgumentsInspection.js +173 -0
- package/lib/compiler/internal/CompilerArgumentsInspection.js.map +1 -0
- package/lib/compiler/internal/EmitOwnershipIndex.d.ts +92 -0
- package/lib/compiler/internal/EmitOwnershipIndex.js +215 -0
- package/lib/compiler/internal/EmitOwnershipIndex.js.map +1 -0
- package/lib/compiler/internal/PrivateCompilerOutput.d.ts +67 -0
- package/lib/compiler/internal/PrivateCompilerOutput.js +245 -0
- package/lib/compiler/internal/PrivateCompilerOutput.js.map +1 -0
- package/lib/compiler/internal/ResidentCheckProcess.d.ts +127 -0
- package/lib/compiler/internal/ResidentCheckProcess.js +403 -0
- package/lib/compiler/internal/ResidentCheckProcess.js.map +1 -0
- package/lib/compiler/internal/ResidentCheckProcessOptions.d.ts +29 -0
- package/lib/compiler/internal/ResidentCheckProcessOptions.js +3 -0
- package/lib/compiler/internal/ResidentCheckProcessOptions.js.map +1 -0
- package/lib/compiler/internal/ResidentCheckRequest.d.ts +37 -0
- package/lib/compiler/internal/ResidentCheckRequest.js +3 -0
- package/lib/compiler/internal/ResidentCheckRequest.js.map +1 -0
- package/lib/compiler/internal/ResidentCheckResult.d.ts +23 -0
- package/lib/compiler/internal/ResidentCheckResult.js +3 -0
- package/lib/compiler/internal/ResidentCheckResult.js.map +1 -0
- package/lib/compiler/internal/ResidentCheckTelemetry.d.ts +33 -0
- package/lib/compiler/internal/ResidentCheckTelemetry.js +3 -0
- package/lib/compiler/internal/ResidentCheckTelemetry.js.map +1 -0
- package/lib/compiler/internal/ResidentReplyKind.d.ts +18 -0
- package/lib/compiler/internal/ResidentReplyKind.js +3 -0
- package/lib/compiler/internal/ResidentReplyKind.js.map +1 -0
- package/lib/compiler/internal/ResidentTransformProcess.d.ts +83 -0
- package/lib/compiler/internal/ResidentTransformProcess.js +261 -0
- package/lib/compiler/internal/ResidentTransformProcess.js.map +1 -0
- package/lib/compiler/internal/ResidentTransformProcessOptions.d.ts +27 -0
- package/lib/compiler/internal/ResidentTransformProcessOptions.js +3 -0
- package/lib/compiler/internal/ResidentTransformProcessOptions.js.map +1 -0
- package/lib/compiler/internal/ResidentTransformReply.d.ts +51 -0
- package/lib/compiler/internal/ResidentTransformReply.js +79 -0
- package/lib/compiler/internal/ResidentTransformReply.js.map +1 -0
- package/lib/compiler/internal/ResidentTransformRequestOptions.d.ts +16 -0
- package/lib/compiler/internal/ResidentTransformRequestOptions.js +3 -0
- package/lib/compiler/internal/ResidentTransformRequestOptions.js.map +1 -0
- package/lib/compiler/internal/ResidentTransformRequests.d.ts +102 -0
- package/lib/compiler/internal/ResidentTransformRequests.js +172 -0
- package/lib/compiler/internal/ResidentTransformRequests.js.map +1 -0
- package/lib/compiler/internal/StartedResidentTransform.d.ts +27 -0
- package/lib/compiler/internal/StartedResidentTransform.js +3 -0
- package/lib/compiler/internal/StartedResidentTransform.js.map +1 -0
- package/lib/compiler/internal/TransformProjectWorkerReply.d.ts +34 -0
- package/lib/compiler/internal/TransformProjectWorkerReply.js +3 -0
- package/lib/compiler/internal/TransformProjectWorkerReply.js.map +1 -0
- package/lib/compiler/internal/TransformProjectWorkerRequest.d.ts +39 -0
- package/lib/compiler/internal/TransformProjectWorkerRequest.js +3 -0
- package/lib/compiler/internal/TransformProjectWorkerRequest.js.map +1 -0
- package/lib/compiler/internal/build/BuildExecution.d.ts +359 -0
- package/lib/compiler/internal/build/BuildExecution.js +977 -0
- package/lib/compiler/internal/build/BuildExecution.js.map +1 -0
- package/lib/compiler/internal/build/BuildTiming.d.ts +99 -0
- package/lib/compiler/internal/build/BuildTiming.js +113 -0
- package/lib/compiler/internal/build/BuildTiming.js.map +1 -0
- package/lib/compiler/internal/build/CompilerDiagnostics.d.ts +82 -0
- package/lib/compiler/internal/build/CompilerDiagnostics.js +270 -0
- package/lib/compiler/internal/build/CompilerDiagnostics.js.map +1 -0
- package/lib/compiler/internal/build/NativePluginArguments.d.ts +114 -0
- package/lib/compiler/internal/build/NativePluginArguments.js +255 -0
- package/lib/compiler/internal/build/NativePluginArguments.js.map +1 -0
- package/lib/compiler/internal/build/PassthroughFlags.d.ts +137 -0
- package/lib/compiler/internal/build/PassthroughFlags.js +213 -0
- package/lib/compiler/internal/build/PassthroughFlags.js.map +1 -0
- package/lib/compiler/internal/build/PluginFailureDiagnostics.d.ts +48 -0
- package/lib/compiler/internal/build/PluginFailureDiagnostics.js +68 -0
- package/lib/compiler/internal/build/PluginFailureDiagnostics.js.map +1 -0
- package/lib/compiler/internal/build/ResidentCheckEntryPlan.d.ts +38 -0
- package/lib/compiler/internal/build/ResidentCheckEntryPlan.js +3 -0
- package/lib/compiler/internal/build/ResidentCheckEntryPlan.js.map +1 -0
- package/lib/compiler/internal/build/ResidentCheckWatchChange.d.ts +30 -0
- package/lib/compiler/internal/build/ResidentCheckWatchChange.js +3 -0
- package/lib/compiler/internal/build/ResidentCheckWatchChange.js.map +1 -0
- package/lib/compiler/internal/build/ResidentCheckWatchSession.d.ts +113 -0
- package/lib/compiler/internal/build/ResidentCheckWatchSession.js +378 -0
- package/lib/compiler/internal/build/ResidentCheckWatchSession.js.map +1 -0
- package/lib/compiler/internal/build/RunBuildOptions.d.ts +130 -0
- package/lib/compiler/internal/build/RunBuildOptions.js +3 -0
- package/lib/compiler/internal/build/RunBuildOptions.js.map +1 -0
- package/lib/compiler/internal/build/TsgoArguments.d.ts +168 -0
- package/lib/compiler/internal/build/TsgoArguments.js +324 -0
- package/lib/compiler/internal/build/TsgoArguments.js.map +1 -0
- package/lib/compiler/internal/build/appendBuildOutput.d.ts +41 -0
- package/lib/compiler/internal/build/appendBuildOutput.js +182 -0
- package/lib/compiler/internal/build/appendBuildOutput.js.map +1 -0
- package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.d.ts +20 -0
- package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.js +40 -0
- package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.js.map +1 -0
- package/lib/compiler/internal/build/createProcessDiagnostic.d.ts +19 -0
- package/lib/compiler/internal/build/createProcessDiagnostic.js +30 -0
- package/lib/compiler/internal/build/createProcessDiagnostic.js.map +1 -0
- package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.d.ts +22 -0
- package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.js +59 -0
- package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.js.map +1 -0
- package/lib/compiler/internal/build/mergeProjectInputSnapshots.d.ts +28 -0
- package/lib/compiler/internal/build/mergeProjectInputSnapshots.js +121 -0
- package/lib/compiler/internal/build/mergeProjectInputSnapshots.js.map +1 -0
- package/lib/compiler/internal/build/normalizeBuildOutput.d.ts +29 -0
- package/lib/compiler/internal/build/normalizeBuildOutput.js +72 -0
- package/lib/compiler/internal/build/normalizeBuildOutput.js.map +1 -0
- package/lib/compiler/internal/build/parseProjectInputSnapshot.d.ts +26 -0
- package/lib/compiler/internal/build/parseProjectInputSnapshot.js +68 -0
- package/lib/compiler/internal/build/parseProjectInputSnapshot.js.map +1 -0
- package/lib/compiler/internal/build/planResidentCheckEntries.d.ts +21 -0
- package/lib/compiler/internal/build/planResidentCheckEntries.js +45 -0
- package/lib/compiler/internal/build/planResidentCheckEntries.js.map +1 -0
- package/lib/compiler/internal/build/privateRuntimeRootDir.d.ts +20 -0
- package/lib/compiler/internal/build/privateRuntimeRootDir.js +35 -0
- package/lib/compiler/internal/build/privateRuntimeRootDir.js.map +1 -0
- package/lib/compiler/internal/build/residentCheckRequest.d.ts +22 -0
- package/lib/compiler/internal/build/residentCheckRequest.js +42 -0
- package/lib/compiler/internal/build/residentCheckRequest.js.map +1 -0
- package/lib/compiler/internal/build/runBuild.d.ts +22 -0
- package/lib/compiler/internal/build/runBuild.js +44 -0
- package/lib/compiler/internal/build/runBuild.js.map +1 -0
- package/lib/compiler/internal/build/runExternalEmitProvenance.d.ts +61 -0
- package/lib/compiler/internal/build/runExternalEmitProvenance.js +451 -0
- package/lib/compiler/internal/build/runExternalEmitProvenance.js.map +1 -0
- package/lib/compiler/internal/build/takeResidentCheckEntryRequest.d.ts +18 -0
- package/lib/compiler/internal/build/takeResidentCheckEntryRequest.js +28 -0
- package/lib/compiler/internal/build/takeResidentCheckEntryRequest.js.map +1 -0
- package/lib/compiler/internal/buildNativeCompiler.d.ts +16 -1
- package/lib/compiler/internal/buildNativeCompiler.js +14 -2
- package/lib/compiler/internal/buildNativeCompiler.js.map +1 -1
- package/lib/compiler/internal/captureProcessOutput.d.ts +23 -21
- package/lib/compiler/internal/captureProcessOutput.js +40 -26
- package/lib/compiler/internal/captureProcessOutput.js.map +1 -1
- package/lib/compiler/internal/compileProjectInMemory.d.ts +30 -7
- package/lib/compiler/internal/compileProjectInMemory.js +103 -83
- package/lib/compiler/internal/compileProjectInMemory.js.map +1 -1
- package/lib/compiler/internal/ensureExecutable.d.ts +15 -0
- package/lib/compiler/internal/ensureExecutable.js +40 -0
- package/lib/compiler/internal/ensureExecutable.js.map +1 -0
- package/lib/compiler/internal/findNearestGoMod.d.ts +23 -0
- package/lib/compiler/internal/findNearestGoMod.js +48 -0
- package/lib/compiler/internal/findNearestGoMod.js.map +1 -0
- package/lib/compiler/internal/isOutsideRelativePath.d.ts +18 -0
- package/lib/compiler/internal/isOutsideRelativePath.js +30 -0
- package/lib/compiler/internal/isOutsideRelativePath.js.map +1 -0
- package/lib/compiler/internal/outputText.d.ts +16 -0
- package/lib/compiler/internal/outputText.js +25 -0
- package/lib/compiler/internal/outputText.js.map +1 -0
- package/lib/compiler/internal/packageRootDir.d.ts +25 -0
- package/lib/compiler/internal/packageRootDir.js +47 -0
- package/lib/compiler/internal/packageRootDir.js.map +1 -0
- package/lib/compiler/internal/parseNativeTransformOutput.d.ts +88 -0
- package/lib/compiler/internal/parseNativeTransformOutput.js +552 -0
- package/lib/compiler/internal/parseNativeTransformOutput.js.map +1 -0
- package/lib/compiler/internal/project/CompilerProjectSelection.d.ts +80 -0
- package/lib/compiler/internal/project/CompilerProjectSelection.js +187 -0
- package/lib/compiler/internal/project/CompilerProjectSelection.js.map +1 -0
- package/lib/compiler/internal/project/ConfigJsonText.d.ts +50 -0
- package/lib/compiler/internal/project/ConfigJsonText.js +61 -0
- package/lib/compiler/internal/project/ConfigJsonText.js.map +1 -0
- package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.d.ts +48 -0
- package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.js +119 -0
- package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.js.map +1 -0
- package/lib/compiler/internal/project/createNativeProjectContextArgs.d.ts +11 -8
- package/lib/compiler/internal/project/createNativeProjectContextArgs.js +15 -17
- package/lib/compiler/internal/project/createNativeProjectContextArgs.js.map +1 -1
- package/lib/compiler/internal/project/createNativeProjectContextJson.d.ts +19 -0
- package/lib/compiler/internal/project/createNativeProjectContextJson.js +27 -0
- package/lib/compiler/internal/project/createNativeProjectContextJson.js.map +1 -0
- package/lib/compiler/internal/project/parseJsonc.d.ts +42 -0
- package/lib/compiler/internal/project/parseJsonc.js +317 -0
- package/lib/compiler/internal/project/parseJsonc.js.map +1 -0
- package/lib/compiler/internal/project/readJsonFile.d.ts +21 -0
- package/lib/compiler/internal/project/readJsonFile.js +38 -0
- package/lib/compiler/internal/project/readJsonFile.js.map +1 -0
- package/lib/compiler/internal/project/readJsoncFile.d.ts +20 -0
- package/lib/compiler/internal/project/readJsoncFile.js +47 -0
- package/lib/compiler/internal/project/readJsoncFile.js.map +1 -0
- package/lib/compiler/internal/project/readProjectConfig.d.ts +29 -2
- package/lib/compiler/internal/project/readProjectConfig.js +105 -168
- package/lib/compiler/internal/project/readProjectConfig.js.map +1 -1
- package/lib/compiler/internal/project/resolveOwningProjectConfig.d.ts +65 -0
- package/lib/compiler/internal/project/resolveOwningProjectConfig.js +248 -0
- package/lib/compiler/internal/project/resolveOwningProjectConfig.js.map +1 -0
- package/lib/compiler/internal/project/resolveProjectConfig.d.ts +17 -14
- package/lib/compiler/internal/project/resolveProjectConfig.js +19 -122
- package/lib/compiler/internal/project/resolveProjectConfig.js.map +1 -1
- package/lib/compiler/internal/project/resolveProjectIdentity.d.ts +32 -0
- package/lib/compiler/internal/project/resolveProjectIdentity.js +144 -0
- package/lib/compiler/internal/project/resolveProjectIdentity.js.map +1 -0
- package/lib/compiler/internal/project/resolveTsconfigExtends.d.ts +38 -0
- package/lib/compiler/internal/project/resolveTsconfigExtends.js +163 -0
- package/lib/compiler/internal/project/resolveTsconfigExtends.js.map +1 -0
- package/lib/compiler/internal/project/selectReferencedProject.d.ts +26 -0
- package/lib/compiler/internal/project/selectReferencedProject.js +48 -0
- package/lib/compiler/internal/project/selectReferencedProject.js.map +1 -0
- package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.d.ts +34 -0
- package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.js +55 -0
- package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.js.map +1 -0
- package/lib/compiler/internal/readEffectiveCompilerOptions.d.ts +54 -0
- package/lib/compiler/internal/readEffectiveCompilerOptions.js +116 -0
- package/lib/compiler/internal/readEffectiveCompilerOptions.js.map +1 -0
- package/lib/compiler/internal/resolveBinary.d.ts +17 -1
- package/lib/compiler/internal/resolveBinary.js +24 -9
- package/lib/compiler/internal/resolveBinary.js.map +1 -1
- package/lib/compiler/internal/resolveTsgo.d.ts +22 -7
- package/lib/compiler/internal/resolveTsgo.js +25 -9
- package/lib/compiler/internal/resolveTsgo.js.map +1 -1
- package/lib/compiler/internal/runNativeCheckWithObservations.d.ts +41 -0
- package/lib/compiler/internal/runNativeCheckWithObservations.js +185 -0
- package/lib/compiler/internal/runNativeCheckWithObservations.js.map +1 -0
- package/lib/compiler/internal/runSingleFileEmit.d.ts +26 -5
- package/lib/compiler/internal/runSingleFileEmit.js +82 -27
- package/lib/compiler/internal/runSingleFileEmit.js.map +1 -1
- package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.d.ts +2 -0
- package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.js +6 -0
- package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.js.map +1 -0
- package/lib/compiler/internal/sharedHost/SidecarEnvironment.d.ts +90 -0
- package/lib/compiler/internal/sharedHost/SidecarEnvironment.js +153 -0
- package/lib/compiler/internal/sharedHost/SidecarEnvironment.js.map +1 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.d.ts +7 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.js +11 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.js.map +1 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.d.ts +7 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.js +11 -0
- package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.js.map +1 -0
- package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.d.ts +24 -0
- package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.js +46 -0
- package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.js.map +1 -0
- package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.d.ts +15 -0
- package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.js +23 -0
- package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.js.map +1 -0
- package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.d.ts +23 -0
- package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.js +33 -0
- package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.js.map +1 -0
- package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.d.ts +27 -0
- package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.js +41 -0
- package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.js.map +1 -0
- package/lib/compiler/internal/sharedHost/isLinkedTransform.d.ts +16 -0
- package/lib/compiler/internal/sharedHost/isLinkedTransform.js +21 -0
- package/lib/compiler/internal/sharedHost/isLinkedTransform.js.map +1 -0
- package/lib/compiler/internal/sharedHost/linkedTransformPlugins.d.ts +19 -0
- package/lib/compiler/internal/sharedHost/linkedTransformPlugins.js +25 -0
- package/lib/compiler/internal/sharedHost/linkedTransformPlugins.js.map +1 -0
- package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.d.ts +25 -0
- package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.js +35 -0
- package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.js.map +1 -0
- package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.d.ts +26 -0
- package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.js +36 -0
- package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.js.map +1 -0
- package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.d.ts +22 -0
- package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.js +32 -0
- package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.js.map +1 -0
- package/lib/compiler/internal/spawnNative.d.ts +15 -16
- package/lib/compiler/internal/spawnNative.js +20 -48
- package/lib/compiler/internal/spawnNative.js.map +1 -1
- package/lib/compiler/internal/startResidentTransform.d.ts +26 -17
- package/lib/compiler/internal/startResidentTransform.js +51 -36
- package/lib/compiler/internal/startResidentTransform.js.map +1 -1
- package/lib/compiler/internal/transformProjectInMemory.d.ts +42 -5
- package/lib/compiler/internal/transformProjectInMemory.js +197 -471
- package/lib/compiler/internal/transformProjectInMemory.js.map +1 -1
- package/lib/compiler/internal/transformProjectInWorker.d.ts +49 -0
- package/lib/compiler/internal/transformProjectInWorker.js +168 -0
- package/lib/compiler/internal/transformProjectInWorker.js.map +1 -0
- package/lib/compiler/internal/transformProjectWorker.js +37 -0
- package/lib/compiler/internal/transformProjectWorker.js.map +1 -0
- package/lib/flags/AnySubcommand.d.ts +18 -0
- package/lib/flags/AnySubcommand.js +3 -0
- package/lib/flags/AnySubcommand.js.map +1 -0
- package/lib/flags/COMPILER_ENUM_WHITESPACE.d.ts +2 -0
- package/lib/flags/COMPILER_ENUM_WHITESPACE.js +38 -0
- package/lib/flags/COMPILER_ENUM_WHITESPACE.js.map +1 -0
- package/lib/flags/COMPILER_OPTIONS.d.ts +6 -0
- package/lib/flags/COMPILER_OPTIONS.js +509 -0
- package/lib/flags/COMPILER_OPTIONS.js.map +1 -0
- package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.d.ts +2 -0
- package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js +13 -0
- package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js.map +1 -0
- package/lib/flags/COMPILER_OPTION_KINDS.d.ts +2 -0
- package/lib/flags/COMPILER_OPTION_KINDS.js +14 -0
- package/lib/flags/COMPILER_OPTION_KINDS.js.map +1 -0
- package/lib/flags/CompilerOptionSpec.d.ts +27 -0
- package/lib/flags/CompilerOptionSpec.js +3 -0
- package/lib/flags/CompilerOptionSpec.js.map +1 -0
- package/lib/flags/FLAG_BY_TOKEN.d.ts +8 -0
- package/lib/flags/FLAG_BY_TOKEN.js +34 -0
- package/lib/flags/FLAG_BY_TOKEN.js.map +1 -0
- package/lib/flags/FLAG_SCHEMA.d.ts +35 -0
- package/lib/flags/{schema.js → FLAG_SCHEMA.js} +47 -153
- package/lib/flags/FLAG_SCHEMA.js.map +1 -0
- package/lib/flags/FlagKind.d.ts +22 -0
- package/lib/flags/FlagKind.js +3 -0
- package/lib/flags/FlagKind.js.map +1 -0
- package/lib/flags/FlagLayer.d.ts +19 -0
- package/lib/flags/FlagLayer.js +3 -0
- package/lib/flags/FlagLayer.js.map +1 -0
- package/lib/flags/FlagSpec.d.ts +104 -0
- package/lib/flags/FlagSpec.js +3 -0
- package/lib/flags/FlagSpec.js.map +1 -0
- package/lib/flags/ParseOptions.d.ts +92 -0
- package/lib/flags/ParseOptions.js +3 -0
- package/lib/flags/ParseOptions.js.map +1 -0
- package/lib/flags/ParseResult.d.ts +37 -0
- package/lib/flags/ParseResult.js +3 -0
- package/lib/flags/ParseResult.js.map +1 -0
- package/lib/flags/TtscSubcommand.d.ts +14 -0
- package/lib/flags/TtscSubcommand.js +3 -0
- package/lib/flags/TtscSubcommand.js.map +1 -0
- package/lib/flags/TtsxSubcommand.d.ts +13 -0
- package/lib/flags/TtsxSubcommand.js +3 -0
- package/lib/flags/TtsxSubcommand.js.map +1 -0
- package/lib/flags/ValueValidator.d.ts +14 -0
- package/lib/flags/ValueValidator.js +3 -0
- package/lib/flags/ValueValidator.js.map +1 -0
- package/lib/flags/buildGoAllowList.d.ts +18 -0
- package/lib/flags/buildGoAllowList.js +45 -0
- package/lib/flags/buildGoAllowList.js.map +1 -0
- package/lib/flags/flagsForSubcommand.d.ts +18 -0
- package/lib/flags/flagsForSubcommand.js +23 -0
- package/lib/flags/flagsForSubcommand.js.map +1 -0
- package/lib/flags/getBoolean.d.ts +19 -0
- package/lib/flags/getBoolean.js +27 -0
- package/lib/flags/getBoolean.js.map +1 -0
- package/lib/flags/getNumber.d.ts +16 -0
- package/lib/flags/getNumber.js +24 -0
- package/lib/flags/getNumber.js.map +1 -0
- package/lib/flags/getString.d.ts +16 -0
- package/lib/flags/getString.js +24 -0
- package/lib/flags/getString.js.map +1 -0
- package/lib/flags/getStringList.d.ts +19 -0
- package/lib/flags/getStringList.js +24 -0
- package/lib/flags/getStringList.js.map +1 -0
- package/lib/flags/normalizeCompilerEnumValue.d.ts +20 -0
- package/lib/flags/normalizeCompilerEnumValue.js +40 -0
- package/lib/flags/normalizeCompilerEnumValue.js.map +1 -0
- package/lib/flags/normalizeFlagToken.d.ts +28 -0
- package/lib/flags/normalizeFlagToken.js +38 -0
- package/lib/flags/normalizeFlagToken.js.map +1 -0
- package/lib/flags/parseFlags.d.ts +18 -0
- package/lib/flags/parseFlags.js +288 -0
- package/lib/flags/parseFlags.js.map +1 -0
- package/lib/flags/readCompilerOptionOccurrence.d.ts +34 -0
- package/lib/flags/readCompilerOptionOccurrence.js +81 -0
- package/lib/flags/readCompilerOptionOccurrence.js.map +1 -0
- package/lib/flags/readCompilerOptionValues.d.ts +33 -0
- package/lib/flags/readCompilerOptionValues.js +58 -0
- package/lib/flags/readCompilerOptionValues.js.map +1 -0
- package/lib/flags/resolveFlagSpec.d.ts +21 -0
- package/lib/flags/resolveFlagSpec.js +32 -0
- package/lib/flags/resolveFlagSpec.js.map +1 -0
- package/lib/index.d.ts +8 -3
- package/lib/index.js +10 -3
- package/lib/index.js.map +1 -1
- package/lib/internal/CanonicalTempDirectoryOperations.d.ts +73 -0
- package/lib/internal/CanonicalTempDirectoryOperations.js +3 -0
- package/lib/internal/CanonicalTempDirectoryOperations.js.map +1 -0
- package/lib/internal/CompilerContextSnapshot.d.ts +66 -0
- package/lib/internal/CompilerContextSnapshot.js +121 -0
- package/lib/internal/CompilerContextSnapshot.js.map +1 -0
- package/lib/internal/CompilerResultAdapter.d.ts +129 -0
- package/lib/internal/CompilerResultAdapter.js +247 -0
- package/lib/internal/CompilerResultAdapter.js.map +1 -0
- package/lib/internal/E2ETrace.d.ts +219 -0
- package/lib/internal/E2ETrace.js +541 -0
- package/lib/internal/E2ETrace.js.map +1 -0
- package/lib/internal/IJavaScriptRuntimeCapabilities.d.ts +48 -0
- package/lib/internal/IJavaScriptRuntimeCapabilities.js +3 -0
- package/lib/internal/IJavaScriptRuntimeCapabilities.js.map +1 -0
- package/lib/internal/OwnedNativeProcess.d.ts +66 -0
- package/lib/internal/OwnedNativeProcess.js +317 -0
- package/lib/internal/OwnedNativeProcess.js.map +1 -0
- package/lib/internal/OwnedSynchronousProcess.d.ts +158 -0
- package/lib/internal/OwnedSynchronousProcess.js +171 -0
- package/lib/internal/OwnedSynchronousProcess.js.map +1 -0
- package/lib/internal/RetireLockDirectoryOperations.d.ts +77 -0
- package/lib/internal/RetireLockDirectoryOperations.js +3 -0
- package/lib/internal/RetireLockDirectoryOperations.js.map +1 -0
- package/lib/internal/SafeCacheCleanupTarget.d.ts +39 -0
- package/lib/internal/SafeCacheCleanupTarget.js +3 -0
- package/lib/internal/SafeCacheCleanupTarget.js.map +1 -0
- package/lib/internal/SourceNativeRetirement.d.ts +384 -0
- package/lib/internal/SourceNativeRetirement.js +892 -0
- package/lib/internal/SourceNativeRetirement.js.map +1 -0
- package/lib/internal/SpawnSyncOutputFiles.d.ts +28 -0
- package/lib/internal/SpawnSyncOutputFiles.js +3 -0
- package/lib/internal/SpawnSyncOutputFiles.js.map +1 -0
- package/lib/internal/cacheEntryExists.d.ts +13 -0
- package/lib/internal/cacheEntryExists.js +32 -0
- package/lib/internal/cacheEntryExists.js.map +1 -0
- package/lib/internal/createCanonicalTempDirectory.d.ts +23 -13
- package/lib/internal/createCanonicalTempDirectory.js +31 -12
- package/lib/internal/createCanonicalTempDirectory.js.map +1 -1
- package/lib/internal/isContendedCandidateRename.d.ts +27 -0
- package/lib/internal/isContendedCandidateRename.js +37 -0
- package/lib/internal/isContendedCandidateRename.js.map +1 -0
- package/lib/internal/isSpawnSyncFdExhaustion.d.ts +16 -0
- package/lib/internal/isSpawnSyncFdExhaustion.js +23 -0
- package/lib/internal/isSpawnSyncFdExhaustion.js.map +1 -0
- package/lib/internal/javascriptRuntimeCapabilities.d.ts +20 -0
- package/lib/internal/javascriptRuntimeCapabilities.js +142 -0
- package/lib/internal/javascriptRuntimeCapabilities.js.map +1 -0
- package/lib/internal/nativeBinary.d.ts +11 -0
- package/lib/internal/nativeBinary.js +16 -0
- package/lib/internal/nativeBinary.js.map +1 -0
- package/lib/internal/parseWindowsDirectoryCaseSensitivity.d.ts +24 -0
- package/lib/internal/parseWindowsDirectoryCaseSensitivity.js +47 -0
- package/lib/internal/parseWindowsDirectoryCaseSensitivity.js.map +1 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentity.d.ts +43 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentity.js +3 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentity.js.map +1 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityContext.d.ts +176 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityContext.js +3 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityContext.js.map +1 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.d.ts +100 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.js +3 -0
- package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.js.map +1 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentity.d.ts +20 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentity.js +3 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentity.js.map +1 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.d.ts +20 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.js +3 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.js.map +1 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.d.ts +20 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.js +3 -0
- package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.js.map +1 -0
- package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.d.ts +25 -0
- package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.js +336 -0
- package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.js.map +1 -0
- package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.d.ts +28 -0
- package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.js +33 -0
- package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.js.map +1 -0
- package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.d.ts +20 -0
- package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.js +33 -0
- package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.js.map +1 -0
- package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.d.ts +15 -0
- package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.js +22 -0
- package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.js.map +1 -0
- package/lib/internal/pathIdentity/resolveFilesystemPath.d.ts +22 -0
- package/lib/internal/pathIdentity/resolveFilesystemPath.js +44 -0
- package/lib/internal/pathIdentity/resolveFilesystemPath.js.map +1 -0
- package/lib/internal/pathIdentity/resolvePhysicalPath.d.ts +21 -0
- package/lib/internal/pathIdentity/resolvePhysicalPath.js +35 -0
- package/lib/internal/pathIdentity/resolvePhysicalPath.js.map +1 -0
- package/lib/internal/pathIdentity/resolveProjectInputPath.d.ts +14 -0
- package/lib/internal/pathIdentity/resolveProjectInputPath.js +21 -0
- package/lib/internal/pathIdentity/resolveProjectInputPath.js.map +1 -0
- package/lib/internal/pluginSource.d.ts +26 -0
- package/lib/internal/pluginSource.js +43 -0
- package/lib/internal/pluginSource.js.map +1 -0
- package/lib/internal/projectInputPathIdentity.d.ts +27 -31
- package/lib/internal/projectInputPathIdentity.js +37 -275
- package/lib/internal/projectInputPathIdentity.js.map +1 -1
- package/lib/internal/resolveNodeBinary.d.ts +9 -7
- package/lib/internal/resolveNodeBinary.js +14 -120
- package/lib/internal/resolveNodeBinary.js.map +1 -1
- package/lib/internal/resolveSafeCacheCleanupTargets.d.ts +27 -8
- package/lib/internal/resolveSafeCacheCleanupTargets.js +44 -11
- package/lib/internal/resolveSafeCacheCleanupTargets.js.map +1 -1
- package/lib/internal/restoreCompilerError.d.ts +21 -0
- package/lib/internal/restoreCompilerError.js +164 -0
- package/lib/internal/restoreCompilerError.js.map +1 -0
- package/lib/internal/retireLockDirectory.d.ts +45 -0
- package/lib/internal/retireLockDirectory.js +152 -0
- package/lib/internal/retireLockDirectory.js.map +1 -0
- package/lib/internal/runHoldingLock.d.ts +30 -0
- package/lib/internal/runHoldingLock.js +53 -0
- package/lib/internal/runHoldingLock.js.map +1 -0
- package/lib/internal/runtimeExecutableIdentity.d.ts +20 -0
- package/lib/internal/runtimeExecutableIdentity.js +171 -0
- package/lib/internal/runtimeExecutableIdentity.js.map +1 -0
- package/lib/internal/serializeCompilerError.d.ts +28 -0
- package/lib/internal/serializeCompilerError.js +138 -0
- package/lib/internal/serializeCompilerError.js.map +1 -0
- package/lib/internal/spawnSyncResilient.d.ts +31 -0
- package/lib/internal/spawnSyncResilient.js +50 -0
- package/lib/internal/spawnSyncResilient.js.map +1 -0
- package/lib/internal/spawnSyncWithLowDescriptors.d.ts +30 -0
- package/lib/internal/spawnSyncWithLowDescriptors.js +194 -0
- package/lib/internal/spawnSyncWithLowDescriptors.js.map +1 -0
- package/lib/internal/tsconfig.d.ts +16 -0
- package/lib/internal/tsconfig.js +33 -0
- package/lib/internal/tsconfig.js.map +1 -0
- package/lib/launcher/internal/PendingResidentCheckWatchChanges.d.ts +56 -0
- package/lib/launcher/internal/PendingResidentCheckWatchChanges.js +97 -0
- package/lib/launcher/internal/PendingResidentCheckWatchChanges.js.map +1 -0
- package/lib/launcher/internal/TtscBuildMode.d.ts +14 -0
- package/lib/launcher/internal/TtscBuildMode.js +3 -0
- package/lib/launcher/internal/TtscBuildMode.js.map +1 -0
- package/lib/launcher/internal/TtsxEntryOptions.d.ts +50 -0
- package/lib/launcher/internal/TtsxEntryOptions.js +94 -0
- package/lib/launcher/internal/TtsxEntryOptions.js.map +1 -0
- package/lib/launcher/internal/assertNoSolutionBuild.d.ts +17 -10
- package/lib/launcher/internal/assertNoSolutionBuild.js +16 -9
- package/lib/launcher/internal/assertNoSolutionBuild.js.map +1 -1
- package/lib/launcher/internal/assertTtsxNoWatch.d.ts +25 -0
- package/lib/launcher/internal/assertTtsxNoWatch.js +46 -0
- package/lib/launcher/internal/assertTtsxNoWatch.js.map +1 -0
- package/lib/launcher/internal/buildSingleRootProject.d.ts +108 -0
- package/lib/launcher/internal/buildSingleRootProject.js +229 -0
- package/lib/launcher/internal/buildSingleRootProject.js.map +1 -0
- package/lib/launcher/internal/getCompilerVersionText.d.ts +14 -1
- package/lib/launcher/internal/getCompilerVersionText.js +21 -6
- package/lib/launcher/internal/getCompilerVersionText.js.map +1 -1
- package/lib/launcher/internal/inlineServedSourceMap.d.ts +35 -0
- package/lib/launcher/internal/inlineServedSourceMap.js +255 -0
- package/lib/launcher/internal/inlineServedSourceMap.js.map +1 -0
- package/lib/launcher/internal/linkVirtualEntry.d.ts +31 -0
- package/lib/launcher/internal/linkVirtualEntry.js +87 -0
- package/lib/launcher/internal/linkVirtualEntry.js.map +1 -0
- package/lib/launcher/internal/parseCommonJsExports.d.ts +17 -0
- package/lib/launcher/internal/{commonJsExportMetadata.js → parseCommonJsExports.js} +13 -3
- package/lib/launcher/internal/parseCommonJsExports.js.map +1 -0
- package/lib/launcher/internal/parseTtscBuildArgs.d.ts +34 -0
- package/lib/launcher/internal/parseTtscBuildArgs.js +97 -0
- package/lib/launcher/internal/parseTtscBuildArgs.js.map +1 -0
- package/lib/launcher/internal/parseTtsxCLI.d.ts +35 -0
- package/lib/launcher/internal/parseTtsxCLI.js +187 -0
- package/lib/launcher/internal/parseTtsxCLI.js.map +1 -0
- package/lib/launcher/internal/prepareExecution.d.ts +49 -5
- package/lib/launcher/internal/prepareExecution.js +360 -324
- package/lib/launcher/internal/prepareExecution.js.map +1 -1
- package/lib/launcher/internal/prepareTtscBuildMode.d.ts +23 -0
- package/lib/launcher/internal/prepareTtscBuildMode.js +58 -0
- package/lib/launcher/internal/prepareTtscBuildMode.js.map +1 -0
- package/lib/launcher/internal/resolveCacheDir.d.ts +12 -3
- package/lib/launcher/internal/resolveCacheDir.js +12 -3
- package/lib/launcher/internal/resolveCacheDir.js.map +1 -1
- package/lib/launcher/internal/resolveSingleFileOutput.d.ts +35 -0
- package/lib/launcher/internal/resolveSingleFileOutput.js +115 -0
- package/lib/launcher/internal/resolveSingleFileOutput.js.map +1 -0
- package/lib/launcher/internal/resolveTtscserverBinary.d.ts +15 -3
- package/lib/launcher/internal/resolveTtscserverBinary.js +19 -5
- package/lib/launcher/internal/resolveTtscserverBinary.js.map +1 -1
- package/lib/launcher/internal/runTtsc.d.ts +23 -23
- package/lib/launcher/internal/runTtsc.js +336 -286
- package/lib/launcher/internal/runTtsc.js.map +1 -1
- package/lib/launcher/internal/runTtsx.d.ts +32 -4
- package/lib/launcher/internal/runTtsx.js +286 -138
- package/lib/launcher/internal/runTtsx.js.map +1 -1
- package/lib/launcher/internal/runtime/CommonJsRuntimeSource.d.ts +92 -0
- package/lib/launcher/internal/runtime/CommonJsRuntimeSource.js +354 -0
- package/lib/launcher/internal/runtime/CommonJsRuntimeSource.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildAdmission.d.ts +72 -0
- package/lib/launcher/internal/runtime/DependencyBuildAdmission.js +120 -0
- package/lib/launcher/internal/runtime/DependencyBuildAdmission.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildGeneration.d.ts +185 -0
- package/lib/launcher/internal/runtime/DependencyBuildGeneration.js +153 -0
- package/lib/launcher/internal/runtime/DependencyBuildGeneration.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockFence.d.ts +22 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockFence.js +3 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockFence.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockLease.d.ts +22 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockLease.js +3 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockLease.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockObservation.d.ts +41 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockObservation.js +3 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockObservation.js.map +1 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.d.ts +83 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.js +126 -0
- package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.js.map +1 -0
- package/lib/launcher/internal/runtime/OwnedProjectSource.d.ts +112 -0
- package/lib/launcher/internal/runtime/OwnedProjectSource.js +59 -0
- package/lib/launcher/internal/runtime/OwnedProjectSource.js.map +1 -0
- package/lib/launcher/internal/runtime/OwningModuleOptions.d.ts +21 -0
- package/lib/launcher/internal/runtime/OwningModuleOptions.js +3 -0
- package/lib/launcher/internal/runtime/OwningModuleOptions.js.map +1 -0
- package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.d.ts +89 -0
- package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.js +115 -0
- package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.js.map +1 -0
- package/lib/launcher/internal/runtime/ProcessOwnedDirectory.d.ts +168 -0
- package/lib/launcher/internal/runtime/ProcessOwnedDirectory.js +251 -0
- package/lib/launcher/internal/runtime/ProcessOwnedDirectory.js.map +1 -0
- package/lib/launcher/internal/runtime/ResolveResult.d.ts +24 -0
- package/lib/launcher/internal/runtime/ResolveResult.js +3 -0
- package/lib/launcher/internal/runtime/ResolveResult.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeEmitProvenance.d.ts +38 -0
- package/lib/launcher/internal/runtime/RuntimeEmitProvenance.js +60 -0
- package/lib/launcher/internal/runtime/RuntimeEmitProvenance.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeEntryPreparer.d.ts +22 -0
- package/lib/launcher/internal/runtime/RuntimeEntryPreparer.js +3 -0
- package/lib/launcher/internal/runtime/RuntimeEntryPreparer.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeFilesystem.d.ts +52 -0
- package/lib/launcher/internal/runtime/RuntimeFilesystem.js +73 -0
- package/lib/launcher/internal/runtime/RuntimeFilesystem.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeHookOptions.d.ts +22 -0
- package/lib/launcher/internal/runtime/RuntimeHookOptions.js +3 -0
- package/lib/launcher/internal/runtime/RuntimeHookOptions.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.d.ts +53 -0
- package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.js +88 -0
- package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.d.ts +78 -0
- package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.js +256 -0
- package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeManifest.d.ts +65 -0
- package/lib/launcher/internal/runtime/RuntimeManifest.js +3 -0
- package/lib/launcher/internal/runtime/RuntimeManifest.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeManifestRegistry.d.ts +95 -0
- package/lib/launcher/internal/runtime/RuntimeManifestRegistry.js +268 -0
- package/lib/launcher/internal/runtime/RuntimeManifestRegistry.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeModuleFormat.d.ts +60 -0
- package/lib/launcher/internal/runtime/RuntimeModuleFormat.js +249 -0
- package/lib/launcher/internal/runtime/RuntimeModuleFormat.js.map +1 -0
- package/lib/launcher/internal/runtime/RuntimeProjectOwnership.d.ts +50 -0
- package/lib/launcher/internal/runtime/RuntimeProjectOwnership.js +134 -0
- package/lib/launcher/internal/runtime/RuntimeProjectOwnership.js.map +1 -0
- package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.d.ts +11 -0
- package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.js +15 -0
- package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.js.map +1 -0
- package/lib/launcher/internal/runtime/acquireDependencyBuildLock.d.ts +22 -0
- package/lib/launcher/internal/runtime/acquireDependencyBuildLock.js +74 -0
- package/lib/launcher/internal/runtime/acquireDependencyBuildLock.js.map +1 -0
- package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.d.ts +30 -0
- package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.js +83 -0
- package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.js.map +1 -0
- package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.d.ts +30 -0
- package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.js +52 -0
- package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.js.map +1 -0
- package/lib/launcher/internal/runtime/commonJsExportNames.d.ts +21 -0
- package/lib/launcher/internal/runtime/commonJsExportNames.js +68 -0
- package/lib/launcher/internal/runtime/commonJsExportNames.js.map +1 -0
- package/lib/launcher/internal/runtime/commonJsImportFacade.d.ts +32 -0
- package/lib/launcher/internal/runtime/commonJsImportFacade.js +56 -0
- package/lib/launcher/internal/runtime/commonJsImportFacade.js.map +1 -0
- package/lib/launcher/internal/runtime/dependencyCacheKey.d.ts +36 -0
- package/lib/launcher/internal/runtime/dependencyCacheKey.js +57 -0
- package/lib/launcher/internal/runtime/dependencyCacheKey.js.map +1 -0
- package/lib/launcher/internal/runtime/dependencyCacheRoot.d.ts +32 -0
- package/lib/launcher/internal/runtime/dependencyCacheRoot.js +98 -0
- package/lib/launcher/internal/runtime/dependencyCacheRoot.js.map +1 -0
- package/lib/launcher/internal/runtime/inspectDependencyBuildLock.d.ts +23 -0
- package/lib/launcher/internal/runtime/inspectDependencyBuildLock.js +126 -0
- package/lib/launcher/internal/runtime/inspectDependencyBuildLock.js.map +1 -0
- package/lib/launcher/internal/runtime/installRuntimeHooks.d.ts +58 -0
- package/lib/launcher/internal/runtime/installRuntimeHooks.js +1988 -0
- package/lib/launcher/internal/runtime/installRuntimeHooks.js.map +1 -0
- package/lib/launcher/internal/runtime/interopProbe.d.ts +8 -0
- package/lib/launcher/internal/runtime/interopProbe.js +3 -0
- package/lib/launcher/internal/runtime/interopProbe.js.map +1 -0
- package/lib/launcher/internal/runtime/isLocalProcessGone.d.ts +33 -0
- package/lib/launcher/internal/runtime/isLocalProcessGone.js +60 -0
- package/lib/launcher/internal/runtime/isLocalProcessGone.js.map +1 -0
- package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.d.ts +28 -0
- package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.js +50 -0
- package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.js.map +1 -0
- package/lib/launcher/internal/runtime/projectModuleOptions.d.ts +16 -0
- package/lib/launcher/internal/runtime/projectModuleOptions.js +28 -0
- package/lib/launcher/internal/runtime/projectModuleOptions.js.map +1 -0
- package/lib/launcher/internal/runtime/readDependencyCache.d.ts +28 -0
- package/lib/launcher/internal/runtime/readDependencyCache.js +83 -0
- package/lib/launcher/internal/runtime/readDependencyCache.js.map +1 -0
- package/lib/launcher/internal/runtime/realPath.d.ts +22 -0
- package/lib/launcher/internal/runtime/realPath.js +37 -0
- package/lib/launcher/internal/runtime/realPath.js.map +1 -0
- package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.d.ts +17 -0
- package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.js +23 -0
- package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.js.map +1 -0
- package/lib/launcher/internal/runtime/releaseDependencyBuildLock.d.ts +17 -0
- package/lib/launcher/internal/runtime/releaseDependencyBuildLock.js +23 -0
- package/lib/launcher/internal/runtime/releaseDependencyBuildLock.js.map +1 -0
- package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.d.ts +34 -0
- package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.js +88 -0
- package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.js.map +1 -0
- package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.d.ts +20 -0
- package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.js +30 -0
- package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.js.map +1 -0
- package/lib/launcher/internal/runtime/runtimeRunKey.d.ts +24 -0
- package/lib/launcher/internal/runtime/runtimeRunKey.js +36 -0
- package/lib/launcher/internal/runtime/runtimeRunKey.js.map +1 -0
- package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.d.ts +21 -0
- package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.js +29 -0
- package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.js.map +1 -0
- package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.d.ts +35 -0
- package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.js +76 -0
- package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.js.map +1 -0
- package/lib/launcher/internal/runtimeCompilerArgs.d.ts +35 -6
- package/lib/launcher/internal/runtimeCompilerArgs.js +87 -58
- package/lib/launcher/internal/runtimeCompilerArgs.js.map +1 -1
- package/lib/launcher/internal/runtimeEmitProfile.d.ts +39 -0
- package/lib/launcher/internal/runtimeEmitProfile.js +56 -0
- package/lib/launcher/internal/runtimeEmitProfile.js.map +1 -0
- package/lib/launcher/internal/runtimeHookPreload.js +4 -4
- package/lib/launcher/internal/runtimeHookPreload.js.map +1 -1
- package/lib/launcher/internal/runtimeOwnerPreload.d.ts +1 -0
- package/lib/launcher/internal/runtimeOwnerPreload.js +43 -0
- package/lib/launcher/internal/runtimeOwnerPreload.js.map +1 -0
- package/lib/launcher/internal/singleRootProjectConfig.d.ts +34 -0
- package/lib/launcher/internal/singleRootProjectConfig.js +39 -0
- package/lib/launcher/internal/singleRootProjectConfig.js.map +1 -0
- package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.d.ts +61 -0
- package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.js +3 -0
- package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.js.map +1 -0
- package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.d.ts +95 -0
- package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.js +270 -0
- package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.js.map +1 -0
- package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.d.ts +46 -0
- package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.js +91 -0
- package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.js.map +1 -0
- package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.d.ts +21 -0
- package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.js +39 -0
- package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.js.map +1 -0
- package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.d.ts +18 -0
- package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.js +27 -0
- package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.js.map +1 -0
- package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.d.ts +26 -0
- package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.js +62 -0
- package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.js.map +1 -0
- package/lib/launcher/internal/ttscserver/needsStdio.d.ts +17 -0
- package/lib/launcher/internal/ttscserver/needsStdio.js +36 -0
- package/lib/launcher/internal/ttscserver/needsStdio.js.map +1 -0
- package/lib/launcher/internal/ttscserver/runTtscserver.d.ts +25 -0
- package/lib/launcher/internal/ttscserver/runTtscserver.js +439 -0
- package/lib/launcher/internal/ttscserver/runTtscserver.js.map +1 -0
- package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.d.ts +29 -0
- package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.js +3 -0
- package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.js.map +1 -0
- package/lib/launcher/internal/watch/DirectoryWatcher.d.ts +44 -0
- package/lib/launcher/internal/watch/DirectoryWatcher.js +3 -0
- package/lib/launcher/internal/watch/DirectoryWatcher.js.map +1 -0
- package/lib/launcher/internal/watch/FseventsStreams.d.ts +87 -0
- package/lib/launcher/internal/watch/FseventsStreams.js +266 -0
- package/lib/launcher/internal/watch/FseventsStreams.js.map +1 -0
- package/lib/launcher/internal/watch/ProjectInputWatchRules.d.ts +92 -0
- package/lib/launcher/internal/watch/ProjectInputWatchRules.js +163 -0
- package/lib/launcher/internal/watch/ProjectInputWatchRules.js.map +1 -0
- package/lib/launcher/internal/watch/WatchInputChange.d.ts +29 -0
- package/lib/launcher/internal/watch/WatchInputChange.js +3 -0
- package/lib/launcher/internal/watch/WatchInputChange.js.map +1 -0
- package/lib/launcher/internal/watch/WatchPaths.d.ts +101 -0
- package/lib/launcher/internal/watch/WatchPaths.js +150 -0
- package/lib/launcher/internal/watch/WatchPaths.js.map +1 -0
- package/lib/launcher/internal/watch/WatchTopology.d.ts +384 -0
- package/lib/launcher/internal/{watchTopology.js → watch/WatchTopology.js} +726 -799
- package/lib/launcher/internal/watch/WatchTopology.js.map +1 -0
- package/lib/launcher/internal/watch/literalGlobRoot.d.ts +22 -0
- package/lib/launcher/internal/watch/literalGlobRoot.js +45 -0
- package/lib/launcher/internal/watch/literalGlobRoot.js.map +1 -0
- package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.d.ts +40 -0
- package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.js +69 -0
- package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.d.ts +19 -0
- package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.js +52 -0
- package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.d.ts +21 -0
- package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.js +55 -0
- package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputEventShouldNotify.d.ts +21 -0
- package/lib/launcher/internal/watch/projectInputEventShouldNotify.js +23 -0
- package/lib/launcher/internal/watch/projectInputEventShouldNotify.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.d.ts +27 -0
- package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.js +54 -0
- package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.d.ts +26 -0
- package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.js +100 -0
- package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.d.ts +37 -0
- package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.js +54 -0
- package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputTopologyMayAffect.d.ts +23 -0
- package/lib/launcher/internal/watch/projectInputTopologyMayAffect.js +67 -0
- package/lib/launcher/internal/watch/projectInputTopologyMayAffect.js.map +1 -0
- package/lib/launcher/internal/watch/projectInputWatchDirectories.d.ts +22 -0
- package/lib/launcher/internal/watch/projectInputWatchDirectories.js +30 -0
- package/lib/launcher/internal/watch/projectInputWatchDirectories.js.map +1 -0
- package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.d.ts +22 -0
- package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.js +45 -0
- package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.js.map +1 -0
- package/lib/launcher/internal/watch/syncWatchers.d.ts +25 -0
- package/lib/launcher/internal/watch/syncWatchers.js +61 -0
- package/lib/launcher/internal/watch/syncWatchers.js.map +1 -0
- package/lib/launcher/internal/watch/watchDirectory.d.ts +28 -0
- package/lib/launcher/internal/watch/watchDirectory.js +46 -0
- package/lib/launcher/internal/watch/watchDirectory.js.map +1 -0
- package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.d.ts +28 -0
- package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.js +38 -0
- package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.js.map +1 -0
- package/lib/launcher/ttscserver.js +1 -1
- package/lib/launcher/ttscserver.js.map +1 -1
- package/lib/launcher/ttsx.js +2 -3
- package/lib/launcher/ttsx.js.map +1 -1
- package/lib/plugin/CapabilityPluginResolver.d.ts +140 -0
- package/lib/plugin/CapabilityPluginResolver.js +400 -0
- package/lib/plugin/CapabilityPluginResolver.js.map +1 -0
- package/lib/plugin/ITtscCapabilityPlugin.d.ts +87 -0
- package/lib/plugin/ITtscCapabilityPlugin.js +3 -0
- package/lib/plugin/ITtscCapabilityPlugin.js.map +1 -0
- package/lib/plugin/internal/CapabilityPluginResult.d.ts +66 -0
- package/lib/plugin/internal/CapabilityPluginResult.js +86 -0
- package/lib/plugin/internal/CapabilityPluginResult.js.map +1 -0
- package/lib/plugin/internal/CapabilityResolutionFormat.d.ts +114 -0
- package/lib/plugin/internal/CapabilityResolutionFormat.js +229 -0
- package/lib/plugin/internal/CapabilityResolutionFormat.js.map +1 -0
- package/lib/plugin/internal/ITtscCapabilityPluginSource.d.ts +35 -0
- package/lib/plugin/internal/ITtscCapabilityPluginSource.js +3 -0
- package/lib/plugin/internal/ITtscCapabilityPluginSource.js.map +1 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionEntry.d.ts +49 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionEntry.js +3 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionEntry.js.map +1 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.d.ts +21 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.js +3 -0
- package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.js.map +1 -0
- package/lib/plugin/internal/capabilityPluginWorker.d.ts +1 -0
- package/lib/plugin/internal/capabilityPluginWorker.js +178 -0
- package/lib/plugin/internal/capabilityPluginWorker.js.map +1 -0
- package/lib/plugin/internal/decodeCapabilityCommandReply.d.ts +23 -0
- package/lib/plugin/internal/decodeCapabilityCommandReply.js +25 -0
- package/lib/plugin/internal/decodeCapabilityCommandReply.js.map +1 -0
- package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.d.ts +15 -0
- package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.js +182 -0
- package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.js.map +1 -0
- package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.d.ts +11 -0
- package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.js +62 -0
- package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.js.map +1 -0
- package/lib/plugin/internal/load/PluginDescriptorAdmission.d.ts +46 -0
- package/lib/plugin/internal/load/PluginDescriptorAdmission.js +72 -0
- package/lib/plugin/internal/load/PluginDescriptorAdmission.js.map +1 -0
- package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.d.ts +154 -0
- package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.js +317 -0
- package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.js.map +1 -0
- package/lib/plugin/internal/load/PluginPackageResolution.d.ts +208 -0
- package/lib/plugin/internal/load/PluginPackageResolution.js +593 -0
- package/lib/plugin/internal/load/PluginPackageResolution.js.map +1 -0
- package/lib/plugin/internal/load/ProjectPluginEntries.d.ts +60 -0
- package/lib/plugin/internal/load/ProjectPluginEntries.js +164 -0
- package/lib/plugin/internal/load/ProjectPluginEntries.js.map +1 -0
- package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.d.ts +13 -0
- package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.js +21 -0
- package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.js.map +1 -0
- package/lib/plugin/internal/load/collectProjectHostInputs.d.ts +16 -0
- package/lib/plugin/internal/load/collectProjectHostInputs.js +66 -0
- package/lib/plugin/internal/load/collectProjectHostInputs.js.map +1 -0
- package/lib/plugin/internal/load/composePluginSources.d.ts +20 -0
- package/lib/plugin/internal/load/composePluginSources.js +95 -0
- package/lib/plugin/internal/load/composePluginSources.js.map +1 -0
- package/lib/plugin/internal/load/declaresHostInputReads.d.ts +24 -0
- package/lib/plugin/internal/load/declaresHostInputReads.js +48 -0
- package/lib/plugin/internal/load/declaresHostInputReads.js.map +1 -0
- package/lib/plugin/internal/load/hasProjectPluginEntries.d.ts +21 -0
- package/lib/plugin/internal/load/hasProjectPluginEntries.js +29 -0
- package/lib/plugin/internal/load/hasProjectPluginEntries.js.map +1 -0
- package/lib/plugin/internal/load/hashHostInputPaths.d.ts +17 -0
- package/lib/plugin/internal/load/hashHostInputPaths.js +46 -0
- package/lib/plugin/internal/load/hashHostInputPaths.js.map +1 -0
- package/lib/plugin/internal/load/isRelativePluginSpecifier.d.ts +22 -0
- package/lib/plugin/internal/load/isRelativePluginSpecifier.js +33 -0
- package/lib/plugin/internal/load/isRelativePluginSpecifier.js.map +1 -0
- package/lib/plugin/internal/load/loadProjectPlugins.d.ts +113 -0
- package/lib/plugin/internal/load/loadProjectPlugins.js +1615 -0
- package/lib/plugin/internal/load/loadProjectPlugins.js.map +1 -0
- package/lib/plugin/internal/load/moduleResolutionBaseSelects.d.ts +42 -0
- package/lib/plugin/internal/load/moduleResolutionBaseSelects.js +51 -0
- package/lib/plugin/internal/load/moduleResolutionBaseSelects.js.map +1 -0
- package/lib/plugin/internal/load/observeImportSearchRoots.d.ts +29 -0
- package/lib/plugin/internal/load/observeImportSearchRoots.js +38 -0
- package/lib/plugin/internal/load/observeImportSearchRoots.js.map +1 -0
- package/lib/plugin/internal/load/pluginLabel.d.ts +15 -0
- package/lib/plugin/internal/load/pluginLabel.js +25 -0
- package/lib/plugin/internal/load/pluginLabel.js.map +1 -0
- package/lib/plugin/internal/load/realpathHostInput.d.ts +14 -0
- package/lib/plugin/internal/load/realpathHostInput.js +29 -0
- package/lib/plugin/internal/load/realpathHostInput.js.map +1 -0
- package/lib/plugin/internal/load/realpathHostInputPaths.d.ts +17 -0
- package/lib/plugin/internal/load/realpathHostInputPaths.js +28 -0
- package/lib/plugin/internal/load/realpathHostInputPaths.js.map +1 -0
- package/lib/plugin/internal/load/rejectJsTransformFunctions.d.ts +13 -0
- package/lib/plugin/internal/load/rejectJsTransformFunctions.js +22 -0
- package/lib/plugin/internal/load/rejectJsTransformFunctions.js.map +1 -0
- package/lib/plugin/internal/load/requirePluginSource.d.ts +14 -0
- package/lib/plugin/internal/load/requirePluginSource.js +38 -0
- package/lib/plugin/internal/load/requirePluginSource.js.map +1 -0
- package/lib/plugin/internal/load/resolveNativeSource.d.ts +29 -0
- package/lib/plugin/internal/load/resolveNativeSource.js +37 -0
- package/lib/plugin/internal/load/resolveNativeSource.js.map +1 -0
- package/lib/plugin/internal/load/validatePluginContributors.d.ts +22 -0
- package/lib/plugin/internal/load/validatePluginContributors.js +86 -0
- package/lib/plugin/internal/load/validatePluginContributors.js.map +1 -0
- package/lib/plugin/internal/load/validatePluginSource.d.ts +14 -0
- package/lib/plugin/internal/load/validatePluginSource.js +21 -0
- package/lib/plugin/internal/load/validatePluginSource.js.map +1 -0
- package/lib/plugin/internal/load/visitImportMappedCandidates.d.ts +36 -0
- package/lib/plugin/internal/load/visitImportMappedCandidates.js +45 -0
- package/lib/plugin/internal/load/visitImportMappedCandidates.js.map +1 -0
- package/lib/plugin/internal/pluginDescriptorFailureReason.d.ts +23 -0
- package/lib/plugin/internal/pluginDescriptorFailureReason.js +43 -0
- package/lib/plugin/internal/pluginDescriptorFailureReason.js.map +1 -0
- package/lib/plugin/internal/pluginDescriptorProcessFailure.d.ts +28 -0
- package/lib/plugin/internal/pluginDescriptorProcessFailure.js +37 -0
- package/lib/plugin/internal/pluginDescriptorProcessFailure.js.map +1 -0
- package/lib/plugin/internal/readCapabilityResolution.d.ts +42 -0
- package/lib/plugin/internal/readCapabilityResolution.js +158 -0
- package/lib/plugin/internal/readCapabilityResolution.js.map +1 -0
- package/lib/plugin/internal/receiveCapabilityFailure.d.ts +21 -0
- package/lib/plugin/internal/receiveCapabilityFailure.js +28 -0
- package/lib/plugin/internal/receiveCapabilityFailure.js.map +1 -0
- package/lib/plugin/internal/source/CachePrunePolicy.d.ts +42 -0
- package/lib/plugin/internal/source/CachePrunePolicy.js +47 -0
- package/lib/plugin/internal/source/CachePrunePolicy.js.map +1 -0
- package/lib/plugin/internal/source/GoBuildCacheCoordination.d.ts +159 -0
- package/lib/plugin/internal/source/GoBuildCacheCoordination.js +475 -0
- package/lib/plugin/internal/source/GoBuildCacheCoordination.js.map +1 -0
- package/lib/plugin/internal/source/GoSourceInputs.d.ts +124 -0
- package/lib/plugin/internal/source/GoSourceInputs.js +180 -0
- package/lib/plugin/internal/source/GoSourceInputs.js.map +1 -0
- package/lib/plugin/internal/source/GoToolResolution.d.ts +125 -0
- package/lib/plugin/internal/source/GoToolResolution.js +278 -0
- package/lib/plugin/internal/source/GoToolResolution.js.map +1 -0
- package/lib/plugin/internal/source/IGoBuildCachePruneOptions.d.ts +30 -0
- package/lib/plugin/internal/source/IGoBuildCachePruneOptions.js +3 -0
- package/lib/plugin/internal/source/IGoBuildCachePruneOptions.js.map +1 -0
- package/lib/plugin/internal/source/IPluginCachePruneOptions.d.ts +33 -0
- package/lib/plugin/internal/source/IPluginCachePruneOptions.js +3 -0
- package/lib/plugin/internal/source/IPluginCachePruneOptions.js.map +1 -0
- package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.d.ts +27 -0
- package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.js +3 -0
- package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.js.map +1 -0
- package/lib/plugin/internal/source/ITtscBuildContributor.d.ts +18 -0
- package/lib/plugin/internal/source/ITtscBuildContributor.js +3 -0
- package/lib/plugin/internal/source/ITtscBuildContributor.js.map +1 -0
- package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.d.ts +25 -0
- package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.js +3 -0
- package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.js.map +1 -0
- package/lib/plugin/internal/source/NativeSourcePackages.d.ts +155 -0
- package/lib/plugin/internal/source/NativeSourcePackages.js +317 -0
- package/lib/plugin/internal/source/NativeSourcePackages.js.map +1 -0
- package/lib/plugin/internal/source/PluginBinaryUse.d.ts +66 -0
- package/lib/plugin/internal/source/PluginBinaryUse.js +163 -0
- package/lib/plugin/internal/source/PluginBinaryUse.js.map +1 -0
- package/lib/plugin/internal/source/PluginBinaryWaitResult.d.ts +34 -0
- package/lib/plugin/internal/source/PluginBinaryWaitResult.js +3 -0
- package/lib/plugin/internal/source/PluginBinaryWaitResult.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.d.ts +90 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.js +207 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.d.ts +128 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.js +209 -0
- package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildLockFence.d.ts +25 -0
- package/lib/plugin/internal/source/PluginBuildLockFence.js +3 -0
- package/lib/plugin/internal/source/PluginBuildLockFence.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildLockLease.d.ts +29 -0
- package/lib/plugin/internal/source/PluginBuildLockLease.js +3 -0
- package/lib/plugin/internal/source/PluginBuildLockLease.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildLockObservation.d.ts +42 -0
- package/lib/plugin/internal/source/PluginBuildLockObservation.js +3 -0
- package/lib/plugin/internal/source/PluginBuildLockObservation.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildLockOwner.d.ts +126 -0
- package/lib/plugin/internal/source/PluginBuildLockOwner.js +165 -0
- package/lib/plugin/internal/source/PluginBuildLockOwner.js.map +1 -0
- package/lib/plugin/internal/source/PluginBuildLockProtocol.d.ts +234 -0
- package/lib/plugin/internal/source/PluginBuildLockProtocol.js +287 -0
- package/lib/plugin/internal/source/PluginBuildLockProtocol.js.map +1 -0
- package/lib/plugin/internal/source/SourceBuildCacheLayout.d.ts +183 -0
- package/lib/plugin/internal/source/SourceBuildCacheLayout.js +291 -0
- package/lib/plugin/internal/source/SourceBuildCacheLayout.js.map +1 -0
- package/lib/plugin/internal/source/SourceBuildFilesystemOperations.d.ts +32 -0
- package/lib/plugin/internal/source/SourceBuildFilesystemOperations.js +3 -0
- package/lib/plugin/internal/source/SourceBuildFilesystemOperations.js.map +1 -0
- package/lib/plugin/internal/source/SourcePluginAdmission.d.ts +80 -0
- package/lib/plugin/internal/source/SourcePluginAdmission.js +114 -0
- package/lib/plugin/internal/source/SourcePluginAdmission.js.map +1 -0
- package/lib/plugin/internal/source/SourcePluginWorkspace.d.ts +122 -0
- package/lib/plugin/internal/source/SourcePluginWorkspace.js +307 -0
- package/lib/plugin/internal/source/SourcePluginWorkspace.js.map +1 -0
- package/lib/plugin/internal/source/acquirePluginBuildLock.d.ts +35 -0
- package/lib/plugin/internal/source/acquirePluginBuildLock.js +176 -0
- package/lib/plugin/internal/source/acquirePluginBuildLock.js.map +1 -0
- package/lib/plugin/internal/source/autoQuoteGoModToken.d.ts +24 -0
- package/lib/plugin/internal/source/autoQuoteGoModToken.js +110 -0
- package/lib/plugin/internal/source/autoQuoteGoModToken.js.map +1 -0
- package/lib/plugin/internal/source/buildSourcePlugin.d.ts +86 -0
- package/lib/plugin/internal/source/buildSourcePlugin.js +857 -0
- package/lib/plugin/internal/source/buildSourcePlugin.js.map +1 -0
- package/lib/plugin/internal/source/collectPluginSourceDirectories.d.ts +30 -0
- package/lib/plugin/internal/source/collectPluginSourceDirectories.js +77 -0
- package/lib/plugin/internal/source/collectPluginSourceDirectories.js.map +1 -0
- package/lib/plugin/internal/source/collectPluginSourceFiles.d.ts +40 -0
- package/lib/plugin/internal/source/collectPluginSourceFiles.js +95 -0
- package/lib/plugin/internal/source/collectPluginSourceFiles.js.map +1 -0
- package/lib/plugin/internal/source/computeCacheKey.d.ts +73 -0
- package/lib/plugin/internal/source/computeCacheKey.js +113 -0
- package/lib/plugin/internal/source/computeCacheKey.js.map +1 -0
- package/lib/plugin/internal/source/copiesPluginSourceEntry.d.ts +33 -0
- package/lib/plugin/internal/source/copiesPluginSourceEntry.js +57 -0
- package/lib/plugin/internal/source/copiesPluginSourceEntry.js.map +1 -0
- package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.d.ts +22 -0
- package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.js +60 -0
- package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.js.map +1 -0
- package/lib/plugin/internal/source/ensureExecutableGoToolchain.d.ts +25 -0
- package/lib/plugin/internal/source/ensureExecutableGoToolchain.js +96 -0
- package/lib/plugin/internal/source/ensureExecutableGoToolchain.js.map +1 -0
- package/lib/plugin/internal/source/formatDuration.d.ts +18 -0
- package/lib/plugin/internal/source/formatDuration.js +36 -0
- package/lib/plugin/internal/source/formatDuration.js.map +1 -0
- package/lib/plugin/internal/source/formatGoWorkPath.d.ts +35 -0
- package/lib/plugin/internal/source/formatGoWorkPath.js +42 -0
- package/lib/plugin/internal/source/formatGoWorkPath.js.map +1 -0
- package/lib/plugin/internal/source/hashPluginBuildEnvironment.d.ts +47 -0
- package/lib/plugin/internal/source/hashPluginBuildEnvironment.js +663 -0
- package/lib/plugin/internal/source/hashPluginBuildEnvironment.js.map +1 -0
- package/lib/plugin/internal/source/inspectPluginBuildLock.d.ts +29 -0
- package/lib/plugin/internal/source/inspectPluginBuildLock.js +285 -0
- package/lib/plugin/internal/source/inspectPluginBuildLock.js.map +1 -0
- package/lib/plugin/internal/source/isPathWithin.d.ts +16 -0
- package/lib/plugin/internal/source/isPathWithin.js +28 -0
- package/lib/plugin/internal/source/isPathWithin.js.map +1 -0
- package/lib/plugin/internal/source/legacyGlobalCacheTargets.d.ts +24 -0
- package/lib/plugin/internal/source/legacyGlobalCacheTargets.js +60 -0
- package/lib/plugin/internal/source/legacyGlobalCacheTargets.js.map +1 -0
- package/lib/plugin/internal/source/pluginBuildEnvironment.d.ts +31 -0
- package/lib/plugin/internal/source/pluginBuildEnvironment.js +47 -0
- package/lib/plugin/internal/source/pluginBuildEnvironment.js.map +1 -0
- package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.d.ts +1 -0
- package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.js +24 -0
- package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.js.map +1 -0
- package/lib/plugin/internal/source/pluginBuildVersions.d.ts +31 -0
- package/lib/plugin/internal/source/pluginBuildVersions.js +65 -0
- package/lib/plugin/internal/source/pluginBuildVersions.js.map +1 -0
- package/lib/plugin/internal/source/pluginModuleReplaceDirectories.d.ts +40 -0
- package/lib/plugin/internal/source/pluginModuleReplaceDirectories.js +81 -0
- package/lib/plugin/internal/source/pluginModuleReplaceDirectories.js.map +1 -0
- package/lib/plugin/internal/source/pluginSourceCovers.d.ts +32 -0
- package/lib/plugin/internal/source/pluginSourceCovers.js +54 -0
- package/lib/plugin/internal/source/pluginSourceCovers.js.map +1 -0
- package/lib/plugin/internal/source/pluginSourceDigest.d.ts +40 -0
- package/lib/plugin/internal/source/pluginSourceDigest.js +60 -0
- package/lib/plugin/internal/source/pluginSourceDigest.js.map +1 -0
- package/lib/plugin/internal/source/pluginSourceFilesSignature.d.ts +38 -0
- package/lib/plugin/internal/source/pluginSourceFilesSignature.js +53 -0
- package/lib/plugin/internal/source/pluginSourceFilesSignature.js.map +1 -0
- package/lib/plugin/internal/source/pluginSourceState.d.ts +47 -0
- package/lib/plugin/internal/source/pluginSourceState.js +63 -0
- package/lib/plugin/internal/source/pluginSourceState.js.map +1 -0
- package/lib/plugin/internal/source/pluginSourceStateHolds.d.ts +34 -0
- package/lib/plugin/internal/source/pluginSourceStateHolds.js +45 -0
- package/lib/plugin/internal/source/pluginSourceStateHolds.js.map +1 -0
- package/lib/plugin/internal/source/processPluginBuildEnvironment.d.ts +33 -0
- package/lib/plugin/internal/source/processPluginBuildEnvironment.js +40 -0
- package/lib/plugin/internal/source/processPluginBuildEnvironment.js.map +1 -0
- package/lib/plugin/internal/source/pruneCacheFileRoot.d.ts +34 -0
- package/lib/plugin/internal/source/pruneCacheFileRoot.js +120 -0
- package/lib/plugin/internal/source/pruneCacheFileRoot.js.map +1 -0
- package/lib/plugin/internal/source/pruneGoBuildCacheRoot.d.ts +28 -0
- package/lib/plugin/internal/source/pruneGoBuildCacheRoot.js +185 -0
- package/lib/plugin/internal/source/pruneGoBuildCacheRoot.js.map +1 -0
- package/lib/plugin/internal/source/prunePluginCacheRoot.d.ts +46 -0
- package/lib/plugin/internal/source/prunePluginCacheRoot.js +446 -0
- package/lib/plugin/internal/source/prunePluginCacheRoot.js.map +1 -0
- package/lib/plugin/internal/source/prunesPluginSourceDirectory.d.ts +21 -0
- package/lib/plugin/internal/source/prunesPluginSourceDirectory.js +28 -0
- package/lib/plugin/internal/source/prunesPluginSourceDirectory.js.map +1 -0
- package/lib/plugin/internal/source/reclaimPluginBuildLock.d.ts +23 -0
- package/lib/plugin/internal/source/reclaimPluginBuildLock.js +48 -0
- package/lib/plugin/internal/source/reclaimPluginBuildLock.js.map +1 -0
- package/lib/plugin/internal/source/recordCacheFileUse.d.ts +22 -0
- package/lib/plugin/internal/source/recordCacheFileUse.js +43 -0
- package/lib/plugin/internal/source/recordCacheFileUse.js.map +1 -0
- package/lib/plugin/internal/source/releasePluginBuildLock.d.ts +33 -0
- package/lib/plugin/internal/source/releasePluginBuildLock.js +100 -0
- package/lib/plugin/internal/source/releasePluginBuildLock.js.map +1 -0
- package/lib/plugin/internal/source/resolveCleanTargets.d.ts +26 -0
- package/lib/plugin/internal/source/resolveCleanTargets.js +73 -0
- package/lib/plugin/internal/source/resolveCleanTargets.js.map +1 -0
- package/lib/plugin/internal/source/resolveGoCompiler.d.ts +29 -0
- package/lib/plugin/internal/source/resolveGoCompiler.js +62 -0
- package/lib/plugin/internal/source/resolveGoCompiler.js.map +1 -0
- package/lib/plugin/internal/source/resolvePluginCacheRoot.d.ts +21 -0
- package/lib/plugin/internal/source/resolvePluginCacheRoot.js +31 -0
- package/lib/plugin/internal/source/resolvePluginCacheRoot.js.map +1 -0
- package/lib/plugin/internal/source/resolvePluginGoModule.d.ts +34 -0
- package/lib/plugin/internal/source/resolvePluginGoModule.js +65 -0
- package/lib/plugin/internal/source/resolvePluginGoModule.js.map +1 -0
- package/lib/plugin/internal/source/resolveSourceBuildCachePaths.d.ts +21 -0
- package/lib/plugin/internal/source/resolveSourceBuildCachePaths.js +236 -0
- package/lib/plugin/internal/source/resolveSourceBuildCachePaths.js.map +1 -0
- package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.d.ts +29 -0
- package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.js +68 -0
- package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.js.map +1 -0
- package/lib/plugin/internal/source/spawnGoTool.d.ts +22 -0
- package/lib/plugin/internal/source/spawnGoTool.js +164 -0
- package/lib/plugin/internal/source/spawnGoTool.js.map +1 -0
- package/lib/plugin/internal/source/touchPluginCacheEntryInUse.d.ts +27 -0
- package/lib/plugin/internal/source/touchPluginCacheEntryInUse.js +48 -0
- package/lib/plugin/internal/source/touchPluginCacheEntryInUse.js.map +1 -0
- package/lib/plugin/internal/source/waitForPluginBinary.d.ts +36 -0
- package/lib/plugin/internal/source/waitForPluginBinary.js +94 -0
- package/lib/plugin/internal/source/waitForPluginBinary.js.map +1 -0
- package/lib/plugin/internal/source/windowsGoCommandArgs.d.ts +17 -0
- package/lib/plugin/internal/source/windowsGoCommandArgs.js +23 -0
- package/lib/plugin/internal/source/windowsGoCommandArgs.js.map +1 -0
- package/lib/plugin/internal/source/withGoBuildCacheLease.d.ts +37 -0
- package/lib/plugin/internal/source/withGoBuildCacheLease.js +87 -0
- package/lib/plugin/internal/source/withGoBuildCacheLease.js.map +1 -0
- package/lib/plugin/internal/writeCapabilityResolution.d.ts +80 -0
- package/lib/plugin/internal/writeCapabilityResolution.js +196 -0
- package/lib/plugin/internal/writeCapabilityResolution.js.map +1 -0
- package/lib/plugin/resolveCapabilityPlugins.d.ts +53 -32
- package/lib/plugin/resolveCapabilityPlugins.js +209 -38
- package/lib/plugin/resolveCapabilityPlugins.js.map +1 -1
- package/lib/register.js +20 -5
- package/lib/register.js.map +1 -1
- package/lib/structures/ITtscCompilerContext.d.ts +29 -11
- package/lib/structures/ITtscCompilerDiagnostic.d.ts +24 -7
- package/lib/structures/ITtscCompilerResult.d.ts +75 -25
- package/lib/structures/ITtscCompilerTransformation.d.ts +287 -64
- package/lib/structures/ITtscPlugin.d.ts +24 -8
- package/lib/structures/ITtscPluginCapabilities.d.ts +55 -5
- package/lib/structures/ITtscPluginContributor.d.ts +19 -8
- package/lib/structures/ITtscPluginFactoryContext.d.ts +12 -3
- package/lib/structures/ITtscProjectPluginConfig.d.ts +35 -10
- package/lib/structures/TtscPluginStage.d.ts +9 -0
- package/lib/structures/internal/ITtscLoadedNativePlugin.d.ts +19 -5
- package/lib/structures/internal/ITtscParsedProjectConfig.d.ts +29 -3
- package/lib/structures/internal/ITtscProjectIdentity.d.ts +21 -6
- package/lib/structures/internal/ITtscProjectInputSnapshot.d.ts +23 -8
- package/lib/structures/internal/ITtscProjectLocatorOptions.d.ts +18 -4
- package/lib/structures/internal/TtscBuildOptions.d.ts +33 -14
- package/lib/structures/internal/TtscBuildResult.d.ts +63 -4
- package/lib/structures/internal/TtscCommonOptions.d.ts +47 -14
- package/lib/structures/internal/TtscSingleFileEmitOptions.d.ts +46 -5
- package/package.json +26 -12
- package/shim/ast/enums_gen.go +4 -2
- package/shim/ast/go.mod +5 -5
- package/shim/ast/go.sum +10 -10
- package/shim/ast/lint.go +1088 -20
- package/shim/ast/parent.go +38 -22
- package/shim/ast/safe_text.go +48 -26
- package/shim/ast/shim.go +1307 -20
- package/shim/ast/test/next_jsdoc_comment_location_reaches_variable_statement_test.go +51 -0
- package/shim/ast/test/node_text_joins_multi_hop_qualified_name_test.go +24 -9
- package/shim/ast/test/node_text_joins_one_hop_qualified_name_test.go +9 -5
- package/shim/ast/test/node_text_returns_empty_for_nil_test.go +13 -5
- package/shim/ast/test/node_text_returns_identifier_text_test.go +12 -5
- package/shim/ast/test/node_text_skips_empty_qualified_left_test.go +35 -5
- package/shim/astnav/go.mod +5 -5
- package/shim/astnav/go.sum +12 -10
- package/shim/astnav/shim.go +9 -0
- package/shim/bundled/go.mod +7 -1
- package/shim/bundled/go.sum +12 -0
- package/shim/checker/enums_gen.go +4 -2
- package/shim/checker/extra-shim.json +6 -0
- package/shim/checker/go.mod +5 -5
- package/shim/checker/go.sum +10 -10
- package/shim/checker/node_builder_fields_gen.go +19 -0
- package/shim/checker/shim.go +827 -114
- package/shim/compiler/emit_sourcemap.go +68 -29
- package/shim/compiler/emitassemble.go +36 -2
- package/shim/compiler/emithook.go +13 -3
- package/shim/compiler/go.mod +5 -5
- package/shim/compiler/go.sum +10 -10
- package/shim/compiler/incremental.go +56 -20
- package/shim/compiler/resolution.go +92 -9
- package/shim/core/enums_gen.go +2 -2
- package/shim/core/go.mod +6 -1
- package/shim/core/go.sum +10 -0
- package/shim/core/modulekind.go +9 -0
- package/shim/core/shim.go +157 -6
- package/shim/diagnosticwriter/go.mod +10 -1
- package/shim/diagnosticwriter/go.sum +20 -0
- package/shim/diagnosticwriter/lint.go +188 -10
- package/shim/diagnosticwriter/shim.go +14 -0
- package/shim/lsp/go.mod +5 -5
- package/shim/lsp/go.sum +10 -10
- package/shim/lsp/shim.go +78 -2
- package/shim/parser/go.mod +10 -1
- package/shim/parser/go.sum +22 -0
- package/shim/printer/emithost.go +46 -1
- package/shim/printer/go.mod +5 -5
- package/shim/printer/go.sum +10 -10
- package/shim/printer/shim.go +114 -7
- package/shim/printer/sourcemap.go +55 -0
- package/shim/scanner/go.mod +10 -1
- package/shim/scanner/go.sum +20 -0
- package/shim/scanner/regexp.go +19 -4
- package/shim/scanner/shim.go +3 -0
- package/shim/stringutil/extra-shim.json +1 -0
- package/shim/stringutil/go.mod +5 -0
- package/shim/stringutil/go.sum +2 -0
- package/shim/stringutil/shim.go +119 -0
- package/shim/transformers/go.mod +5 -5
- package/shim/transformers/go.sum +12 -10
- package/shim/transformers/shim.go +12 -3
- package/shim/tsoptions/command_line_raw.go +44 -0
- package/shim/tsoptions/go.mod +10 -1
- package/shim/tsoptions/go.sum +22 -0
- package/shim/tsoptions/shim.go +1 -1
- package/shim/tspath/go.mod +1 -1
- package/shim/tspath/go.sum +6 -0
- package/shim/vfs/cachedvfs/go.mod +3 -1
- package/shim/vfs/cachedvfs/go.sum +12 -0
- package/shim/vfs/decode.go +26 -0
- package/shim/vfs/decode_test.go +42 -0
- package/shim/vfs/go.mod +7 -1
- package/shim/vfs/go.sum +12 -0
- package/shim/vfs/osvfs/go.mod +7 -1
- package/shim/vfs/osvfs/go.sum +12 -0
- package/src/TtscCompiler.ts +223 -234
- package/src/TtscService.ts +87 -31
- package/src/TtscServiceRequestOptions.ts +21 -0
- package/src/compiler/internal/CapturedProcessOutput.ts +69 -0
- package/src/compiler/internal/CompilerArgumentsInspection.ts +184 -0
- package/src/compiler/internal/EmitOwnershipIndex.ts +254 -0
- package/src/compiler/internal/PrivateCompilerOutput.ts +330 -0
- package/src/compiler/internal/ResidentCheckProcess.ts +445 -0
- package/src/compiler/internal/ResidentCheckProcessOptions.ts +32 -0
- package/src/compiler/internal/ResidentCheckRequest.ts +39 -0
- package/src/compiler/internal/ResidentCheckResult.ts +24 -0
- package/src/compiler/internal/ResidentCheckTelemetry.ts +36 -0
- package/src/compiler/internal/ResidentReplyKind.ts +18 -0
- package/src/compiler/internal/ResidentTransformProcess.ts +299 -0
- package/src/compiler/internal/ResidentTransformProcessOptions.ts +30 -0
- package/src/compiler/internal/ResidentTransformReply.ts +79 -0
- package/src/compiler/internal/ResidentTransformRequestOptions.ts +16 -0
- package/src/compiler/internal/ResidentTransformRequests.ts +198 -0
- package/src/compiler/internal/StartedResidentTransform.ts +29 -0
- package/src/compiler/internal/TransformProjectWorkerReply.ts +37 -0
- package/src/compiler/internal/TransformProjectWorkerRequest.ts +42 -0
- package/src/compiler/internal/build/BuildExecution.ts +1261 -0
- package/src/compiler/internal/build/BuildTiming.ts +145 -0
- package/src/compiler/internal/build/CompilerDiagnostics.ts +307 -0
- package/src/compiler/internal/build/NativePluginArguments.ts +302 -0
- package/src/compiler/internal/build/PassthroughFlags.ts +229 -0
- package/src/compiler/internal/build/PluginFailureDiagnostics.ts +70 -0
- package/src/compiler/internal/build/ResidentCheckEntryPlan.ts +42 -0
- package/src/compiler/internal/build/ResidentCheckWatchChange.ts +33 -0
- package/src/compiler/internal/build/ResidentCheckWatchSession.ts +501 -0
- package/src/compiler/internal/build/RunBuildOptions.ts +145 -0
- package/src/compiler/internal/build/TsgoArguments.ts +349 -0
- package/src/compiler/internal/build/appendBuildOutput.ts +218 -0
- package/src/compiler/internal/build/bufferResidentCheckEntryRequests.ts +52 -0
- package/src/compiler/internal/build/createProcessDiagnostic.ts +32 -0
- package/src/compiler/internal/build/isAbsoluteLocalProjectInputPath.ts +55 -0
- package/src/compiler/internal/build/mergeProjectInputSnapshots.ts +147 -0
- package/src/compiler/internal/build/normalizeBuildOutput.ts +89 -0
- package/src/compiler/internal/build/parseProjectInputSnapshot.ts +91 -0
- package/src/compiler/internal/build/planResidentCheckEntries.ts +55 -0
- package/src/compiler/internal/build/privateRuntimeRootDir.ts +33 -0
- package/src/compiler/internal/build/residentCheckRequest.ts +41 -0
- package/src/compiler/internal/build/runBuild.ts +61 -0
- package/src/compiler/internal/build/runExternalEmitProvenance.ts +566 -0
- package/src/compiler/internal/build/takeResidentCheckEntryRequest.ts +31 -0
- package/src/compiler/internal/buildNativeCompiler.ts +19 -2
- package/src/compiler/internal/captureProcessOutput.ts +39 -37
- package/src/compiler/internal/compileProjectInMemory.ts +139 -92
- package/src/compiler/internal/ensureExecutable.ts +32 -0
- package/src/compiler/internal/findNearestGoMod.ts +43 -0
- package/src/compiler/internal/isOutsideRelativePath.ts +26 -0
- package/src/compiler/internal/outputText.ts +21 -0
- package/src/compiler/internal/packageRootDir.ts +43 -0
- package/src/compiler/internal/parseNativeTransformOutput.ts +722 -0
- package/src/compiler/internal/project/CompilerProjectSelection.ts +204 -0
- package/src/compiler/internal/project/ConfigJsonText.ts +55 -0
- package/src/compiler/internal/project/compilerUsesCaseSensitiveFileNames.ts +124 -0
- package/src/compiler/internal/project/createNativeProjectContextArgs.ts +14 -19
- package/src/compiler/internal/project/createNativeProjectContextJson.ts +28 -0
- package/src/compiler/internal/project/parseJsonc.ts +318 -0
- package/src/compiler/internal/project/readJsonFile.ts +34 -0
- package/src/compiler/internal/project/readJsoncFile.ts +46 -0
- package/src/compiler/internal/project/readProjectConfig.ts +137 -200
- package/src/compiler/internal/project/resolveOwningProjectConfig.ts +278 -0
- package/src/compiler/internal/project/resolveProjectConfig.ts +18 -127
- package/src/compiler/internal/project/resolveProjectIdentity.ts +153 -0
- package/src/compiler/internal/project/resolveTsconfigExtends.ts +175 -0
- package/src/compiler/internal/project/selectReferencedProject.ts +54 -0
- package/src/compiler/internal/project/tsconfigExtendsFileCandidates.ts +54 -0
- package/src/compiler/internal/readEffectiveCompilerOptions.ts +126 -0
- package/src/compiler/internal/resolveBinary.ts +25 -9
- package/src/compiler/internal/resolveTsgo.ts +31 -11
- package/src/compiler/internal/runNativeCheckWithObservations.ts +211 -0
- package/src/compiler/internal/runSingleFileEmit.ts +92 -27
- package/src/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.ts +2 -0
- package/src/compiler/internal/sharedHost/SidecarEnvironment.ts +151 -0
- package/src/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.ts +7 -0
- package/src/compiler/internal/sharedHost/TSGO_ARGS_ENV.ts +7 -0
- package/src/compiler/internal/sharedHost/assertSharedHostCompatibility.ts +48 -0
- package/src/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.ts +27 -0
- package/src/compiler/internal/sharedHost/clearInheritedTsgoArgs.ts +41 -0
- package/src/compiler/internal/sharedHost/inheritedSidecarEnv.ts +45 -0
- package/src/compiler/internal/sharedHost/isLinkedTransform.ts +19 -0
- package/src/compiler/internal/sharedHost/linkedTransformPlugins.ts +25 -0
- package/src/compiler/internal/sharedHost/publishLinkedTransformPlugins.ts +42 -0
- package/src/compiler/internal/sharedHost/resolvePluginConfigDir.ts +33 -0
- package/src/compiler/internal/sharedHost/selectSharedHostPlugin.ts +35 -0
- package/src/compiler/internal/spawnNative.ts +20 -41
- package/src/compiler/internal/startResidentTransform.ts +66 -53
- package/src/compiler/internal/transformProjectInMemory.ts +356 -634
- package/src/compiler/internal/transformProjectInWorker.ts +170 -0
- package/src/compiler/internal/transformProjectWorker.ts +43 -0
- package/src/flags/AnySubcommand.ts +19 -0
- package/src/flags/COMPILER_ENUM_WHITESPACE.ts +35 -0
- package/src/flags/COMPILER_OPTIONS.ts +512 -0
- package/src/flags/COMPILER_OPTION_ASCII_FOLDS.ts +13 -0
- package/src/flags/COMPILER_OPTION_KINDS.ts +14 -0
- package/src/flags/CompilerOptionSpec.ts +30 -0
- package/src/flags/FLAG_BY_TOKEN.ts +40 -0
- package/src/flags/{schema.ts → FLAG_SCHEMA.ts} +43 -318
- package/src/flags/FlagKind.ts +22 -0
- package/src/flags/FlagLayer.ts +24 -0
- package/src/flags/FlagSpec.ts +118 -0
- package/src/flags/ParseOptions.ts +103 -0
- package/src/flags/ParseResult.ts +44 -0
- package/src/flags/TtscSubcommand.ts +22 -0
- package/src/flags/TtsxSubcommand.ts +13 -0
- package/src/flags/ValueValidator.ts +14 -0
- package/src/flags/buildGoAllowList.ts +43 -0
- package/src/flags/flagsForSubcommand.ts +22 -0
- package/src/flags/getBoolean.ts +27 -0
- package/src/flags/getNumber.ts +24 -0
- package/src/flags/getString.ts +24 -0
- package/src/flags/getStringList.ts +24 -0
- package/src/flags/normalizeCompilerEnumValue.ts +41 -0
- package/src/flags/normalizeFlagToken.ts +38 -0
- package/src/flags/parseFlags.ts +371 -0
- package/src/flags/readCompilerOptionOccurrence.ts +107 -0
- package/src/flags/readCompilerOptionValues.ts +68 -0
- package/src/flags/resolveFlagSpec.ts +29 -0
- package/src/index.ts +9 -3
- package/src/internal/CanonicalTempDirectoryOperations.ts +73 -0
- package/src/internal/CompilerContextSnapshot.ts +139 -0
- package/src/internal/CompilerResultAdapter.ts +320 -0
- package/src/internal/E2ETrace.ts +674 -0
- package/src/internal/IJavaScriptRuntimeCapabilities.ts +50 -0
- package/src/internal/OwnedNativeProcess.ts +417 -0
- package/src/internal/OwnedSynchronousProcess.ts +220 -0
- package/src/internal/RetireLockDirectoryOperations.ts +81 -0
- package/src/internal/SafeCacheCleanupTarget.ts +41 -0
- package/src/internal/SourceNativeRetirement.ts +1109 -0
- package/src/internal/SpawnSyncOutputFiles.ts +29 -0
- package/src/internal/cacheEntryExists.ts +24 -0
- package/src/internal/createCanonicalTempDirectory.ts +35 -18
- package/src/internal/isContendedCandidateRename.ts +35 -0
- package/src/internal/isSpawnSyncFdExhaustion.ts +19 -0
- package/src/internal/javascriptRuntimeCapabilities.ts +166 -0
- package/src/internal/nativeBinary.ts +11 -0
- package/src/internal/parseWindowsDirectoryCaseSensitivity.ts +50 -0
- package/src/internal/pathIdentity/FilesystemPathIdentity.ts +44 -0
- package/src/internal/pathIdentity/FilesystemPathIdentityContext.ts +182 -0
- package/src/internal/pathIdentity/FilesystemPathIdentityOperations.ts +106 -0
- package/src/internal/pathIdentity/ProjectInputPathIdentity.ts +21 -0
- package/src/internal/pathIdentity/ProjectInputPathIdentityContext.ts +21 -0
- package/src/internal/pathIdentity/ProjectInputPathIdentityOperations.ts +22 -0
- package/src/internal/pathIdentity/createFilesystemPathIdentityContext.ts +437 -0
- package/src/internal/pathIdentity/createProjectInputPathIdentityContext.ts +34 -0
- package/src/internal/pathIdentity/isFilesystemPathIdentityWithin.ts +32 -0
- package/src/internal/pathIdentity/isProjectInputPathIdentityWithin.ts +22 -0
- package/src/internal/pathIdentity/resolveFilesystemPath.ts +43 -0
- package/src/internal/pathIdentity/resolvePhysicalPath.ts +31 -0
- package/src/internal/pathIdentity/resolveProjectInputPath.ts +18 -0
- package/src/internal/pluginSource.ts +26 -0
- package/src/internal/projectInputPathIdentity.ts +26 -387
- package/src/internal/resolveNodeBinary.ts +13 -142
- package/src/internal/resolveSafeCacheCleanupTargets.ts +51 -19
- package/src/internal/restoreCompilerError.ts +175 -0
- package/src/internal/retireLockDirectory.ts +166 -0
- package/src/internal/runHoldingLock.ts +55 -0
- package/src/internal/runtimeExecutableIdentity.ts +212 -0
- package/src/internal/serializeCompilerError.ts +145 -0
- package/src/internal/spawnSyncResilient.ts +62 -0
- package/src/internal/spawnSyncWithLowDescriptors.ts +227 -0
- package/src/internal/tsconfig.ts +16 -0
- package/src/launcher/internal/PendingResidentCheckWatchChanges.ts +94 -0
- package/src/launcher/internal/TtscBuildMode.ts +14 -0
- package/src/launcher/internal/TtsxEntryOptions.ts +92 -0
- package/src/launcher/internal/assertNoSolutionBuild.ts +17 -10
- package/src/launcher/internal/assertTtsxNoWatch.ts +49 -0
- package/src/launcher/internal/buildSingleRootProject.ts +303 -0
- package/src/launcher/internal/getCompilerVersionText.ts +20 -5
- package/src/launcher/internal/inlineServedSourceMap.ts +294 -0
- package/src/launcher/internal/linkVirtualEntry.ts +88 -0
- package/src/launcher/internal/{commonJsExportMetadata.ts → parseCommonJsExports.ts} +12 -2
- package/src/launcher/internal/parseTtscBuildArgs.ts +103 -0
- package/src/launcher/internal/parseTtsxCLI.ts +183 -0
- package/src/launcher/internal/prepareExecution.ts +474 -362
- package/src/launcher/internal/prepareTtscBuildMode.ts +64 -0
- package/src/launcher/internal/resolveCacheDir.ts +12 -3
- package/src/launcher/internal/resolveSingleFileOutput.ts +145 -0
- package/src/launcher/internal/resolveTtscserverBinary.ts +20 -5
- package/src/launcher/internal/runTtsc.ts +394 -326
- package/src/launcher/internal/runTtsx.ts +349 -151
- package/src/launcher/internal/runtime/CommonJsRuntimeSource.ts +365 -0
- package/src/launcher/internal/runtime/DependencyBuildAdmission.ts +159 -0
- package/src/launcher/internal/runtime/DependencyBuildGeneration.ts +236 -0
- package/src/launcher/internal/runtime/DependencyBuildLockFence.ts +22 -0
- package/src/launcher/internal/runtime/DependencyBuildLockLease.ts +22 -0
- package/src/launcher/internal/runtime/DependencyBuildLockObservation.ts +49 -0
- package/src/launcher/internal/runtime/DependencyBuildLockProtocol.ts +137 -0
- package/src/launcher/internal/runtime/OwnedProjectSource.ts +140 -0
- package/src/launcher/internal/runtime/OwningModuleOptions.ts +22 -0
- package/src/launcher/internal/runtime/PluginDescriptorInputObservation.ts +112 -0
- package/src/launcher/internal/runtime/ProcessOwnedDirectory.ts +325 -0
- package/src/launcher/internal/runtime/ResolveResult.ts +26 -0
- package/src/launcher/internal/runtime/RuntimeEmitProvenance.ts +58 -0
- package/src/launcher/internal/runtime/RuntimeEntryPreparer.ts +23 -0
- package/src/launcher/internal/runtime/RuntimeFilesystem.ts +64 -0
- package/src/launcher/internal/runtime/RuntimeHookOptions.ts +23 -0
- package/src/launcher/internal/runtime/RuntimeIsolatedEmit.ts +88 -0
- package/src/launcher/internal/runtime/RuntimeLoaderCapabilities.ts +256 -0
- package/src/launcher/internal/runtime/RuntimeManifest.ts +77 -0
- package/src/launcher/internal/runtime/RuntimeManifestRegistry.ts +309 -0
- package/src/launcher/internal/runtime/RuntimeModuleFormat.ts +275 -0
- package/src/launcher/internal/runtime/RuntimeProjectOwnership.ts +139 -0
- package/src/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.ts +11 -0
- package/src/launcher/internal/runtime/acquireDependencyBuildLock.ts +97 -0
- package/src/launcher/internal/runtime/checkNodeRuntimeSupport.ts +94 -0
- package/src/launcher/internal/runtime/claimRuntimeProjectDirectory.ts +54 -0
- package/src/launcher/internal/runtime/commonJsExportNames.ts +57 -0
- package/src/launcher/internal/runtime/commonJsImportFacade.ts +62 -0
- package/src/launcher/internal/runtime/dependencyCacheKey.ts +82 -0
- package/src/launcher/internal/runtime/dependencyCacheRoot.ts +112 -0
- package/src/launcher/internal/runtime/inspectDependencyBuildLock.ts +162 -0
- package/src/launcher/internal/runtime/installRuntimeHooks.ts +2442 -0
- package/src/launcher/internal/runtime/interopProbe.ts +8 -0
- package/src/launcher/internal/runtime/isLocalProcessGone.ts +67 -0
- package/src/launcher/internal/runtime/observeMappedDescriptorResolution.ts +74 -0
- package/src/launcher/internal/runtime/projectModuleOptions.ts +28 -0
- package/src/launcher/internal/runtime/readDependencyCache.ts +89 -0
- package/src/launcher/internal/runtime/realPath.ts +30 -0
- package/src/launcher/internal/runtime/reclaimDependencyBuildLock.ts +27 -0
- package/src/launcher/internal/runtime/releaseDependencyBuildLock.ts +27 -0
- package/src/launcher/internal/runtime/resolveRuntimeCleanTargets.ts +93 -0
- package/src/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.ts +32 -0
- package/src/launcher/internal/runtime/runtimeRunKey.ts +31 -0
- package/src/launcher/internal/runtime/selectRuntimePluginPolicy.ts +28 -0
- package/src/launcher/internal/runtime/withRuntimeDirectoryLock.ts +92 -0
- package/src/launcher/internal/runtimeCompilerArgs.ts +91 -62
- package/src/launcher/internal/runtimeEmitProfile.ts +70 -0
- package/src/launcher/internal/runtimeHookPreload.ts +3 -3
- package/src/launcher/internal/runtimeOwnerPreload.ts +43 -0
- package/src/launcher/internal/singleRootProjectConfig.ts +38 -0
- package/src/launcher/internal/ttscserver/ILSPPluginSelectionInputs.ts +65 -0
- package/src/launcher/internal/ttscserver/LSPProjectInputDigest.ts +331 -0
- package/src/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.ts +107 -0
- package/src/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.ts +41 -0
- package/src/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.ts +36 -0
- package/src/launcher/internal/ttscserver/materializeLSPPluginManifest.ts +60 -0
- package/src/launcher/internal/ttscserver/needsStdio.ts +32 -0
- package/src/launcher/internal/ttscserver/runTtscserver.ts +592 -0
- package/src/launcher/internal/watch/CompilerDirectoryWatchEventPlan.ts +31 -0
- package/src/launcher/internal/watch/DirectoryWatcher.ts +45 -0
- package/src/launcher/internal/watch/FseventsStreams.ts +303 -0
- package/src/launcher/internal/watch/ProjectInputWatchRules.ts +179 -0
- package/src/launcher/internal/watch/WatchInputChange.ts +31 -0
- package/src/launcher/internal/watch/WatchPaths.ts +156 -0
- package/src/launcher/internal/{watchTopology.ts → watch/WatchTopology.ts} +867 -962
- package/src/launcher/internal/watch/literalGlobRoot.ts +40 -0
- package/src/launcher/internal/watch/planCompilerDirectoryWatchEvent.ts +83 -0
- package/src/launcher/internal/watch/projectInputActiveWatchDirectories.ts +47 -0
- package/src/launcher/internal/watch/projectInputAvailableWatchDirectory.ts +56 -0
- package/src/launcher/internal/watch/projectInputEventShouldNotify.ts +23 -0
- package/src/launcher/internal/watch/projectInputMembershipInvalidatesProgram.ts +63 -0
- package/src/launcher/internal/watch/projectInputReloadEventShouldNotify.ts +127 -0
- package/src/launcher/internal/watch/projectInputReplacementStrandsWatchers.ts +57 -0
- package/src/launcher/internal/watch/projectInputTopologyMayAffect.ts +73 -0
- package/src/launcher/internal/watch/projectInputWatchDirectories.ts +33 -0
- package/src/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.ts +49 -0
- package/src/launcher/internal/watch/syncWatchers.ts +64 -0
- package/src/launcher/internal/watch/watchDirectory.ts +53 -0
- package/src/launcher/internal/watch/watchDirectoryThroughFsWatch.ts +47 -0
- package/src/launcher/ttscserver.ts +1 -1
- package/src/launcher/ttsx.ts +2 -3
- package/src/plugin/CapabilityPluginResolver.ts +549 -0
- package/src/plugin/ITtscCapabilityPlugin.ts +93 -0
- package/src/plugin/internal/CapabilityPluginResult.ts +99 -0
- package/src/plugin/internal/CapabilityResolutionFormat.ts +248 -0
- package/src/plugin/internal/ITtscCapabilityPluginSource.ts +37 -0
- package/src/plugin/internal/ITtscCapabilityResolutionEntry.ts +57 -0
- package/src/plugin/internal/ITtscCapabilityResolutionPlugin.ts +22 -0
- package/src/plugin/internal/capabilityPluginWorker.ts +216 -0
- package/src/plugin/internal/decodeCapabilityCommandReply.ts +27 -0
- package/src/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.ts +182 -0
- package/src/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.ts +59 -0
- package/src/plugin/internal/load/PluginDescriptorAdmission.ts +75 -0
- package/src/plugin/internal/load/PluginDescriptorEvaluationCache.ts +432 -0
- package/src/plugin/internal/load/PluginPackageResolution.ts +711 -0
- package/src/plugin/internal/load/ProjectPluginEntries.ts +232 -0
- package/src/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.ts +34 -0
- package/src/plugin/internal/load/collectProjectHostInputs.ts +88 -0
- package/src/plugin/internal/load/composePluginSources.ts +121 -0
- package/src/plugin/internal/load/declaresHostInputReads.ts +52 -0
- package/src/plugin/internal/load/hasProjectPluginEntries.ts +33 -0
- package/src/plugin/internal/load/hashHostInputPaths.ts +44 -0
- package/src/plugin/internal/load/isRelativePluginSpecifier.ts +31 -0
- package/src/plugin/internal/load/loadProjectPlugins.ts +2242 -0
- package/src/plugin/internal/load/moduleResolutionBaseSelects.ts +59 -0
- package/src/plugin/internal/load/observeImportSearchRoots.ts +42 -0
- package/src/plugin/internal/load/pluginLabel.ts +28 -0
- package/src/plugin/internal/load/realpathHostInput.ts +22 -0
- package/src/plugin/internal/load/realpathHostInputPaths.ts +27 -0
- package/src/plugin/internal/load/rejectJsTransformFunctions.ts +23 -0
- package/src/plugin/internal/load/requirePluginSource.ts +34 -0
- package/src/plugin/internal/load/resolveNativeSource.ts +42 -0
- package/src/plugin/internal/load/validatePluginContributors.ts +102 -0
- package/src/plugin/internal/load/validatePluginSource.ts +19 -0
- package/src/plugin/internal/load/visitImportMappedCandidates.ts +63 -0
- package/src/plugin/internal/pluginDescriptorFailureReason.ts +35 -0
- package/src/plugin/internal/pluginDescriptorProcessFailure.ts +48 -0
- package/src/plugin/internal/readCapabilityResolution.ts +193 -0
- package/src/plugin/internal/receiveCapabilityFailure.ts +27 -0
- package/src/plugin/internal/source/CachePrunePolicy.ts +47 -0
- package/src/plugin/internal/source/GoBuildCacheCoordination.ts +588 -0
- package/src/plugin/internal/source/GoSourceInputs.ts +182 -0
- package/src/plugin/internal/source/GoToolResolution.ts +312 -0
- package/src/plugin/internal/source/IGoBuildCachePruneOptions.ts +34 -0
- package/src/plugin/internal/source/IPluginCachePruneOptions.ts +38 -0
- package/src/plugin/internal/source/IPluginModuleReplaceDirectory.ts +30 -0
- package/src/plugin/internal/source/ITtscBuildContributor.ts +19 -0
- package/src/plugin/internal/source/ITtscSourceBuildCachePaths.ts +28 -0
- package/src/plugin/internal/source/NativeSourcePackages.ts +368 -0
- package/src/plugin/internal/source/PluginBinaryUse.ts +159 -0
- package/src/plugin/internal/source/PluginBinaryWaitResult.ts +34 -0
- package/src/plugin/internal/source/PluginBuildEnvironmentReadings.ts +231 -0
- package/src/plugin/internal/source/PluginBuildEnvironmentWitness.ts +233 -0
- package/src/plugin/internal/source/PluginBuildLockFence.ts +26 -0
- package/src/plugin/internal/source/PluginBuildLockLease.ts +31 -0
- package/src/plugin/internal/source/PluginBuildLockObservation.ts +48 -0
- package/src/plugin/internal/source/PluginBuildLockOwner.ts +225 -0
- package/src/plugin/internal/source/PluginBuildLockProtocol.ts +342 -0
- package/src/plugin/internal/source/SourceBuildCacheLayout.ts +303 -0
- package/src/plugin/internal/source/SourceBuildFilesystemOperations.ts +32 -0
- package/src/plugin/internal/source/SourcePluginAdmission.ts +127 -0
- package/src/plugin/internal/source/SourcePluginWorkspace.ts +446 -0
- package/src/plugin/internal/source/acquirePluginBuildLock.ts +222 -0
- package/src/plugin/internal/source/autoQuoteGoModToken.ts +113 -0
- package/src/plugin/internal/source/buildSourcePlugin.ts +1197 -0
- package/src/plugin/internal/source/collectPluginSourceDirectories.ts +70 -0
- package/src/plugin/internal/source/collectPluginSourceFiles.ts +90 -0
- package/src/plugin/internal/source/computeCacheKey.ts +190 -0
- package/src/plugin/internal/source/copiesPluginSourceEntry.ts +52 -0
- package/src/plugin/internal/source/createExternalSourceSnapshotLayout.ts +66 -0
- package/src/plugin/internal/source/ensureExecutableGoToolchain.ts +87 -0
- package/src/plugin/internal/source/formatDuration.ts +32 -0
- package/src/plugin/internal/source/formatGoWorkPath.ts +42 -0
- package/src/plugin/internal/source/hashPluginBuildEnvironment.ts +803 -0
- package/src/plugin/internal/source/inspectPluginBuildLock.ts +330 -0
- package/src/plugin/internal/source/isPathWithin.ts +24 -0
- package/src/plugin/internal/source/legacyGlobalCacheTargets.ts +71 -0
- package/src/plugin/internal/source/pluginBuildEnvironment.ts +59 -0
- package/src/plugin/internal/source/pluginBuildEnvironmentWorker.ts +30 -0
- package/src/plugin/internal/source/pluginBuildVersions.ts +75 -0
- package/src/plugin/internal/source/pluginModuleReplaceDirectories.ts +96 -0
- package/src/plugin/internal/source/pluginSourceCovers.ts +54 -0
- package/src/plugin/internal/source/pluginSourceDigest.ts +55 -0
- package/src/plugin/internal/source/pluginSourceFilesSignature.ts +54 -0
- package/src/plugin/internal/source/pluginSourceState.ts +69 -0
- package/src/plugin/internal/source/pluginSourceStateHolds.ts +45 -0
- package/src/plugin/internal/source/processPluginBuildEnvironment.ts +40 -0
- package/src/plugin/internal/source/pruneCacheFileRoot.ts +134 -0
- package/src/plugin/internal/source/pruneGoBuildCacheRoot.ts +228 -0
- package/src/plugin/internal/source/prunePluginCacheRoot.ts +507 -0
- package/src/plugin/internal/source/prunesPluginSourceDirectory.ts +25 -0
- package/src/plugin/internal/source/reclaimPluginBuildLock.ts +63 -0
- package/src/plugin/internal/source/recordCacheFileUse.ts +35 -0
- package/src/plugin/internal/source/releasePluginBuildLock.ts +125 -0
- package/src/plugin/internal/source/resolveCleanTargets.ts +84 -0
- package/src/plugin/internal/source/resolveGoCompiler.ts +92 -0
- package/src/plugin/internal/source/resolvePluginCacheRoot.ts +32 -0
- package/src/plugin/internal/source/resolvePluginGoModule.ts +69 -0
- package/src/plugin/internal/source/resolveSourceBuildCachePaths.ts +276 -0
- package/src/plugin/internal/source/selectPluginModuleReplaceDirectories.ts +80 -0
- package/src/plugin/internal/source/spawnGoTool.ts +204 -0
- package/src/plugin/internal/source/touchPluginCacheEntryInUse.ts +44 -0
- package/src/plugin/internal/source/waitForPluginBinary.ts +123 -0
- package/src/plugin/internal/source/windowsGoCommandArgs.ts +19 -0
- package/src/plugin/internal/source/withGoBuildCacheLease.ts +101 -0
- package/src/plugin/internal/writeCapabilityResolution.ts +266 -0
- package/src/plugin/resolveCapabilityPlugins.ts +242 -77
- package/src/register.ts +20 -7
- package/src/structures/ITtscCompilerContext.ts +29 -11
- package/src/structures/ITtscCompilerDiagnostic.ts +24 -7
- package/src/structures/ITtscCompilerResult.ts +75 -25
- package/src/structures/ITtscCompilerTransformation.ts +304 -64
- package/src/structures/ITtscPlugin.ts +24 -8
- package/src/structures/ITtscPluginCapabilities.ts +58 -5
- package/src/structures/ITtscPluginContributor.ts +19 -8
- package/src/structures/ITtscPluginFactoryContext.ts +12 -3
- package/src/structures/ITtscProjectPluginConfig.ts +35 -10
- package/src/structures/TtscPluginStage.ts +9 -0
- package/src/structures/internal/ITtscLoadedNativePlugin.ts +27 -5
- package/src/structures/internal/ITtscParsedProjectConfig.ts +37 -3
- package/src/structures/internal/ITtscProjectIdentity.ts +27 -6
- package/src/structures/internal/ITtscProjectInputSnapshot.ts +31 -8
- package/src/structures/internal/ITtscProjectLocatorOptions.ts +21 -4
- package/src/structures/internal/TtscBuildOptions.ts +38 -14
- package/src/structures/internal/TtscBuildResult.ts +74 -4
- package/src/structures/internal/TtscCommonOptions.ts +59 -14
- package/src/structures/internal/TtscSingleFileEmitOptions.ts +55 -5
- package/tools/gen_shims/main.go +124 -11
- package/tools/gen_shims/package_load_admission_rejects_incomplete_results_test.go +61 -0
- package/tools/gen_shims/private_field_support_preserves_upstream_layout_test.go +104 -0
- package/tools/shim_audit/enum_generation_preserves_existing_family_members_test.go +182 -0
- package/tools/shim_audit/enum_generation_refuses_removed_public_members_test.go +93 -0
- package/tools/shim_audit/main.go +166 -31
- package/tools/shim_audit/main_test.go +35 -0
- package/tools/shim_audit/producer_exemptions_require_rationale_test.go +5 -0
- package/tools/shim_audit/producer_surface_includes_exposed_methods_test.go +5 -0
- package/tools/shim_audit/producer_surface_rejects_unproducible_reference_test.go +5 -0
- package/tools/shim_audit/shim_dir_coverage_rejects_unregistered_shims_test.go +71 -0
- package/utility/command.go +48 -0
- package/utility/flags_gen.go +2 -2
- package/utility/host.go +282 -66
- package/utility/preamble_output.go +245 -0
- package/utility/preamble_output_test.go +90 -0
- package/utility/serve.go +61 -18
- package/cmd/ttscgraph/serve_graph_snapshot_version_matches_typescript_client_test.go +0 -32
- package/cmd/ttscgraph/serve_protocol_version_matches_the_typescript_client_test.go +0 -48
- package/cmd/ttscgraph/serve_session_retries_failed_dump_test.go +0 -103
- package/internal/graph/dump_schema_version_matches_the_typescript_client_test.go +0 -48
- package/internal/graph/edge_kinds_names_every_declared_kind_test.go +0 -49
- package/internal/graph/graph_kind_contracts_match_their_producers_test.go +0 -121
- package/internal/lspserver/lsp_launcher_reload_directory_fingerprint_parity_windows_test.go +0 -94
- package/internal/lspserver/lsp_project_diagnostics_resident_unsupported_falls_back_test.go +0 -123
- package/lib/compiler/internal/paths.d.ts +0 -27
- package/lib/compiler/internal/paths.js +0 -70
- package/lib/compiler/internal/paths.js.map +0 -1
- package/lib/compiler/internal/project/readConfigJson.d.ts +0 -30
- package/lib/compiler/internal/project/readConfigJson.js +0 -208
- package/lib/compiler/internal/project/readConfigJson.js.map +0 -1
- package/lib/compiler/internal/residentCheckProcess.d.ts +0 -44
- package/lib/compiler/internal/residentCheckProcess.js +0 -213
- package/lib/compiler/internal/residentCheckProcess.js.map +0 -1
- package/lib/compiler/internal/residentTransformProcess.d.ts +0 -65
- package/lib/compiler/internal/residentTransformProcess.js +0 -330
- package/lib/compiler/internal/residentTransformProcess.js.map +0 -1
- package/lib/compiler/internal/resolveEmittedJavaScript.d.ts +0 -25
- package/lib/compiler/internal/resolveEmittedJavaScript.js +0 -165
- package/lib/compiler/internal/resolveEmittedJavaScript.js.map +0 -1
- package/lib/compiler/internal/runBuild.d.ts +0 -152
- package/lib/compiler/internal/runBuild.js +0 -1694
- package/lib/compiler/internal/runBuild.js.map +0 -1
- package/lib/compiler/internal/sharedHostHelpers.d.ts +0 -79
- package/lib/compiler/internal/sharedHostHelpers.js +0 -134
- package/lib/compiler/internal/sharedHostHelpers.js.map +0 -1
- package/lib/flags/parser.d.ts +0 -97
- package/lib/flags/parser.js +0 -293
- package/lib/flags/parser.js.map +0 -1
- package/lib/flags/schema.d.ts +0 -191
- package/lib/flags/schema.js.map +0 -1
- package/lib/internal/windowsDirectoryCaseSensitivity.d.ts +0 -10
- package/lib/internal/windowsDirectoryCaseSensitivity.js +0 -34
- package/lib/internal/windowsDirectoryCaseSensitivity.js.map +0 -1
- package/lib/launcher/internal/commonJsExportMetadata.d.ts +0 -7
- package/lib/launcher/internal/commonJsExportMetadata.js.map +0 -1
- package/lib/launcher/internal/registerRuntimeHooks.js +0 -59
- package/lib/launcher/internal/registerRuntimeHooks.js.map +0 -1
- package/lib/launcher/internal/runTtscserver.d.ts +0 -35
- package/lib/launcher/internal/runTtscserver.js +0 -660
- package/lib/launcher/internal/runTtscserver.js.map +0 -1
- package/lib/launcher/internal/runtimeHooks.d.ts +0 -198
- package/lib/launcher/internal/runtimeHooks.js +0 -2579
- package/lib/launcher/internal/runtimeHooks.js.map +0 -1
- package/lib/launcher/internal/servedSourceMap.d.ts +0 -25
- package/lib/launcher/internal/servedSourceMap.js +0 -164
- package/lib/launcher/internal/servedSourceMap.js.map +0 -1
- package/lib/launcher/internal/singleFileOutput.d.ts +0 -16
- package/lib/launcher/internal/singleFileOutput.js +0 -103
- package/lib/launcher/internal/singleFileOutput.js.map +0 -1
- package/lib/launcher/internal/watchTopology.d.ts +0 -329
- package/lib/launcher/internal/watchTopology.js.map +0 -1
- package/lib/plugin/internal/buildSourcePlugin.d.ts +0 -298
- package/lib/plugin/internal/buildSourcePlugin.js +0 -3086
- package/lib/plugin/internal/buildSourcePlugin.js.map +0 -1
- package/lib/plugin/internal/capabilityResolutionCache.d.ts +0 -76
- package/lib/plugin/internal/capabilityResolutionCache.js +0 -224
- package/lib/plugin/internal/capabilityResolutionCache.js.map +0 -1
- package/lib/plugin/internal/descriptorProcessFailure.d.ts +0 -36
- package/lib/plugin/internal/descriptorProcessFailure.js +0 -62
- package/lib/plugin/internal/descriptorProcessFailure.js.map +0 -1
- package/lib/plugin/internal/loadProjectPlugins.d.ts +0 -74
- package/lib/plugin/internal/loadProjectPlugins.js +0 -2379
- package/lib/plugin/internal/loadProjectPlugins.js.map +0 -1
- package/src/compiler/internal/paths.ts +0 -68
- package/src/compiler/internal/project/readConfigJson.ts +0 -209
- package/src/compiler/internal/residentCheckProcess.ts +0 -259
- package/src/compiler/internal/residentTransformProcess.ts +0 -406
- package/src/compiler/internal/resolveEmittedJavaScript.ts +0 -197
- package/src/compiler/internal/runBuild.ts +0 -2345
- package/src/compiler/internal/sharedHostHelpers.ts +0 -154
- package/src/flags/parser.ts +0 -459
- package/src/internal/windowsDirectoryCaseSensitivity.ts +0 -33
- package/src/launcher/internal/registerRuntimeHooks.ts +0 -68
- package/src/launcher/internal/runTtscserver.ts +0 -841
- package/src/launcher/internal/runtimeHooks.ts +0 -3197
- package/src/launcher/internal/servedSourceMap.ts +0 -183
- package/src/launcher/internal/singleFileOutput.ts +0 -133
- package/src/plugin/internal/buildSourcePlugin.ts +0 -3990
- package/src/plugin/internal/capabilityResolutionCache.ts +0 -305
- package/src/plugin/internal/descriptorProcessFailure.ts +0 -69
- package/src/plugin/internal/loadProjectPlugins.ts +0 -3044
- package/tools/shim_audit/shim_dir_coverage_test.go +0 -25
- /package/lib/{launcher/internal/registerRuntimeHooks.d.ts → compiler/internal/transformProjectWorker.d.ts} +0 -0
|
@@ -1,2379 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PLUGIN_DESCRIPTOR_SHIM_SOURCE = exports.COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE = void 0;
|
|
7
|
-
exports.loadProjectPlugins = loadProjectPlugins;
|
|
8
|
-
exports.hashHostInputPaths = hashHostInputPaths;
|
|
9
|
-
exports.realpathHostInput = realpathHostInput;
|
|
10
|
-
exports.realpathHostInputPaths = realpathHostInputPaths;
|
|
11
|
-
exports.collectProjectHostInputs = collectProjectHostInputs;
|
|
12
|
-
exports.hasProjectPluginEntries = hasProjectPluginEntries;
|
|
13
|
-
const node_child_process_1 = __importDefault(require("node:child_process"));
|
|
14
|
-
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
15
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
16
|
-
const node_module_1 = require("node:module");
|
|
17
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
18
|
-
const node_url_1 = require("node:url");
|
|
19
|
-
const paths_1 = require("../../compiler/internal/paths");
|
|
20
|
-
const readConfigJson_1 = require("../../compiler/internal/project/readConfigJson");
|
|
21
|
-
const readProjectConfig_1 = require("../../compiler/internal/project/readProjectConfig");
|
|
22
|
-
const createCanonicalTempDirectory_1 = require("../../internal/createCanonicalTempDirectory");
|
|
23
|
-
const resolveNodeBinary_1 = require("../../internal/resolveNodeBinary");
|
|
24
|
-
const buildSourcePlugin_1 = require("./buildSourcePlugin");
|
|
25
|
-
const descriptorProcessFailure_1 = require("./descriptorProcessFailure");
|
|
26
|
-
const GO_MOD_SEARCH_MAX_DEPTH = 3;
|
|
27
|
-
/**
|
|
28
|
-
* Resolve, load, and build all native plugin sidecars for a TypeScript project.
|
|
29
|
-
*
|
|
30
|
-
* Reads the project config, discovers plugin entries (from tsconfig and package
|
|
31
|
-
* auto-discovery), validates and composes their descriptors, then invokes
|
|
32
|
-
* `buildSourcePlugin` to compile each Go source package into a cached binary.
|
|
33
|
-
* Returns the ordered native plugins, parsed project config, and exact
|
|
34
|
-
* JavaScript-host files that universally influence the loaded selection.
|
|
35
|
-
*
|
|
36
|
-
* @param options.binary - Absolute path to the ttsc native helper binary.
|
|
37
|
-
* @param options.cacheDir - Override the plugin binary cache directory.
|
|
38
|
-
* @param options.cwd - Working directory for resolving relative paths.
|
|
39
|
-
* @param options.entries - Explicit plugin entries; `false` disables all
|
|
40
|
-
* plugins (skips both tsconfig entries and package auto-discovery).
|
|
41
|
-
* @param options.env - Effective environment for source-plugin builds and
|
|
42
|
-
* isolated descriptor evaluators, including the `ttsx` fallback (`{
|
|
43
|
-
* ...process.env, ...context.env }`). Defaults to `process.env` for CLI
|
|
44
|
-
* callers, so ambient behavior is unchanged.
|
|
45
|
-
* @param options.file - Path to the tsconfig/jsconfig file.
|
|
46
|
-
* @param options.pluginConfigDir - Caller-declared anchor for plugin
|
|
47
|
-
* config-file discovery (see `ITtscPluginFactoryContext.pluginConfigDir`).
|
|
48
|
-
* @param options.projectRoot - Override the project root directory.
|
|
49
|
-
* @param options.tsconfig - Alias for `file`.
|
|
50
|
-
*/
|
|
51
|
-
function loadProjectPlugins(options) {
|
|
52
|
-
// Snapshot the caller environment before `withPluginLoaderEnv` injects
|
|
53
|
-
// host-owned Node/ttsx locators into process.env. Under a Bun parent the
|
|
54
|
-
// direct descriptor evaluator must remain Bun unless the caller explicitly
|
|
55
|
-
// selected another runtime.
|
|
56
|
-
const effectiveEnv = { ...(options.env ?? process.env) };
|
|
57
|
-
const projectSnapshot = readProjectHostInputSnapshot({
|
|
58
|
-
cwd: options.cwd,
|
|
59
|
-
file: options.file,
|
|
60
|
-
includePluginDiscovery: options.entries === undefined,
|
|
61
|
-
projectRoot: options.projectRoot,
|
|
62
|
-
tsconfig: options.tsconfig,
|
|
63
|
-
});
|
|
64
|
-
const { project } = projectSnapshot;
|
|
65
|
-
const projectHostInputs = projectSnapshot.hostInputs;
|
|
66
|
-
const projectHostInputHashes = projectSnapshot.hostInputHashes;
|
|
67
|
-
const projectHostInputRealpaths = projectSnapshot.hostInputRealpaths;
|
|
68
|
-
const entries = options.entries === false
|
|
69
|
-
? []
|
|
70
|
-
: resolvePluginEntries(project, options.entries).filter((entry) => entry.config.enabled !== false);
|
|
71
|
-
if (entries.length === 0) {
|
|
72
|
-
options.onWatchInputs?.([]);
|
|
73
|
-
return {
|
|
74
|
-
...collectHostInputSnapshot(project, {}, [], projectHostInputs, revalidateHostInputHashes(projectHostInputHashes, projectHostInputs), revalidateHostInputRealpaths(projectHostInputRealpaths, projectHostInputs)),
|
|
75
|
-
nativePlugins: [],
|
|
76
|
-
project,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
const cwd = node_path_1.default.resolve(options.cwd ?? process.cwd());
|
|
80
|
-
const context = {
|
|
81
|
-
binary: options.binary,
|
|
82
|
-
cwd,
|
|
83
|
-
...(options.pluginConfigDir === undefined || options.pluginConfigDir === ""
|
|
84
|
-
? {}
|
|
85
|
-
: { pluginConfigDir: node_path_1.default.resolve(cwd, options.pluginConfigDir) }),
|
|
86
|
-
projectRoot: project.root,
|
|
87
|
-
tsconfig: project.path,
|
|
88
|
-
};
|
|
89
|
-
const loadedEntries = withPluginLoaderEnv(() => entries.map((entry) => {
|
|
90
|
-
const specifier = entry.config.transform;
|
|
91
|
-
if (typeof specifier !== "string" || specifier.length === 0) {
|
|
92
|
-
throw new Error(`ttsc: plugin entry is missing a string "transform" field`);
|
|
93
|
-
}
|
|
94
|
-
const entryCandidates = collectModuleResolutionCandidates(specifier, node_path_1.default.join(entry.baseDir, "package.json"), undefined);
|
|
95
|
-
// Capture every candidate before resolution chooses the descriptor entry.
|
|
96
|
-
// A post-resolution snapshot could bless a higher-priority file created
|
|
97
|
-
// after the resolver had already selected the old entry.
|
|
98
|
-
const entryCandidateHashes = hashHostInputPaths(entryCandidates);
|
|
99
|
-
const entryCandidateRealpaths = realpathHostInputPaths(entryCandidates);
|
|
100
|
-
const request = resolvePluginRequest(specifier, entry.baseDir);
|
|
101
|
-
const loaded = loadPluginEntry(entry.config, { ...context, plugin: entry.config }, request, effectiveEnv);
|
|
102
|
-
const loadedHostInputHashes = mergeObservedHostInputHashes(loaded.hostInputHashes, hashHostInputPaths(Object.keys(loaded.hostInputHashes)));
|
|
103
|
-
const loadedHostInputRealpaths = mergeObservedHostInputRealpaths(loaded.hostInputRealpaths, realpathHostInputPaths(Object.keys(loaded.hostInputRealpaths)));
|
|
104
|
-
const hostInputHashes = mergeObservedHostInputHashes(entryCandidateHashes, loadedHostInputHashes);
|
|
105
|
-
const hostInputRealpaths = mergeObservedHostInputRealpaths(entryCandidateRealpaths, loadedHostInputRealpaths);
|
|
106
|
-
for (const input of loaded.hostInputs) {
|
|
107
|
-
const absolute = node_path_1.default.resolve(input);
|
|
108
|
-
if (!Object.prototype.hasOwnProperty.call(loadedHostInputHashes, absolute)) {
|
|
109
|
-
delete hostInputHashes[absolute];
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
...loaded,
|
|
114
|
-
hostInputHashes,
|
|
115
|
-
hostInputRealpaths,
|
|
116
|
-
hostInputs: [...loaded.hostInputs, ...entryCandidates],
|
|
117
|
-
request,
|
|
118
|
-
};
|
|
119
|
-
}));
|
|
120
|
-
const plugins = composePluginSources(entries, loadedEntries.map((entry) => entry.plugin));
|
|
121
|
-
const ttscVersion = readTtscVersion();
|
|
122
|
-
const tsgoVersion = readTsgoVersion(context.projectRoot);
|
|
123
|
-
const records = plugins.map((plugin, index) => {
|
|
124
|
-
const stage = resolvePluginStage(plugin);
|
|
125
|
-
validatePluginSource(plugin);
|
|
126
|
-
const contributors = validatePluginContributors(plugin);
|
|
127
|
-
const source = resolvePluginSource(plugin.source, context.projectRoot);
|
|
128
|
-
const kind = resolveNativeSourceKind(source, plugin, entries[index].config, index);
|
|
129
|
-
if (kind === "linked" && stage !== "transform") {
|
|
130
|
-
throw new Error(`ttsc: plugin "${pluginLabel(plugin, entries[index].config, index)}" source is a linked Go package, but only transform-stage plugins can be linked into a compiler host`);
|
|
131
|
-
}
|
|
132
|
-
const linkedContributorName = kind === "linked"
|
|
133
|
-
? `linked_${String(index).padStart(6, "0")}`
|
|
134
|
-
: undefined;
|
|
135
|
-
const hostInputs = validatePluginHostInputs(plugin, index);
|
|
136
|
-
const pluginHostInputHashes = validatePluginHostInputHashes(plugin, index, hostInputs);
|
|
137
|
-
const pluginHostInputRealpaths = validatePluginHostInputRealpaths(plugin, index, hostInputs);
|
|
138
|
-
return {
|
|
139
|
-
capabilities: plugin.capabilities,
|
|
140
|
-
contributors,
|
|
141
|
-
config: entries[index].config,
|
|
142
|
-
kind,
|
|
143
|
-
label: pluginLabel(plugin, entries[index].config, index),
|
|
144
|
-
linkedContributorName,
|
|
145
|
-
name: plugin.name,
|
|
146
|
-
reportsTypeScriptDiagnostics: plugin.reportsTypeScriptDiagnostics === true,
|
|
147
|
-
request: loadedEntries[index].request,
|
|
148
|
-
hostInputHashes: mergePluginHostInputHashes(loadedEntries[index].hostInputHashes, pluginHostInputHashes, loadedEntries[index].hostInputs, hostInputs),
|
|
149
|
-
hostInputRealpaths: mergePluginHostInputHashes(loadedEntries[index].hostInputRealpaths, pluginHostInputRealpaths, loadedEntries[index].hostInputs, hostInputs),
|
|
150
|
-
hostInputs: [...loadedEntries[index].hostInputs, ...hostInputs],
|
|
151
|
-
source,
|
|
152
|
-
stage,
|
|
153
|
-
};
|
|
154
|
-
});
|
|
155
|
-
options.onWatchInputs?.(records.flatMap((record) => [
|
|
156
|
-
record.source,
|
|
157
|
-
...(record.contributors?.map((contributor) => contributor.source) ?? []),
|
|
158
|
-
]));
|
|
159
|
-
const linkedContributors = records
|
|
160
|
-
.filter((record) => record.stage === "transform")
|
|
161
|
-
.flatMap((record) => record.kind === "linked"
|
|
162
|
-
? [{ name: record.linkedContributorName, source: record.source }]
|
|
163
|
-
: []);
|
|
164
|
-
const transformHosts = records.filter((record) => record.stage === "transform" && record.kind === "executable");
|
|
165
|
-
const hostContributors = linkedContributors.length === 0 ? undefined : linkedContributors;
|
|
166
|
-
const builtTransformHosts = new Map();
|
|
167
|
-
for (const record of transformHosts) {
|
|
168
|
-
builtTransformHosts.set(record, (0, buildSourcePlugin_1.buildSourcePlugin)({
|
|
169
|
-
baseDir: context.projectRoot,
|
|
170
|
-
cacheDir: options.cacheDir,
|
|
171
|
-
contributors: mergeContributors(record.contributors, hostContributors),
|
|
172
|
-
env: effectiveEnv,
|
|
173
|
-
pluginName: record.label,
|
|
174
|
-
source: record.source,
|
|
175
|
-
ttscVersion,
|
|
176
|
-
tsgoVersion,
|
|
177
|
-
}));
|
|
178
|
-
}
|
|
179
|
-
const fallbackDriverHost = transformHosts.length === 0 && linkedContributors.length !== 0
|
|
180
|
-
? (0, buildSourcePlugin_1.buildSourcePlugin)({
|
|
181
|
-
baseDir: context.projectRoot,
|
|
182
|
-
cacheDir: options.cacheDir,
|
|
183
|
-
contributors: linkedContributors,
|
|
184
|
-
env: effectiveEnv,
|
|
185
|
-
label: "linked plugin host",
|
|
186
|
-
pluginName: "linked-plugin-host",
|
|
187
|
-
source: node_path_1.default.join(ttscPackageRoot(), "cmd", "utility-host"),
|
|
188
|
-
ttscVersion,
|
|
189
|
-
tsgoVersion,
|
|
190
|
-
})
|
|
191
|
-
: undefined;
|
|
192
|
-
const selectedTransformHost = transformHosts.length === 0
|
|
193
|
-
? fallbackDriverHost
|
|
194
|
-
: builtTransformHosts.get(transformHosts[0]);
|
|
195
|
-
const nativePlugins = records.map((record) => {
|
|
196
|
-
const binary = record.stage === "transform" && record.kind === "linked"
|
|
197
|
-
? selectedTransformHost
|
|
198
|
-
: record.stage === "transform"
|
|
199
|
-
? builtTransformHosts.get(record)
|
|
200
|
-
: (0, buildSourcePlugin_1.buildSourcePlugin)({
|
|
201
|
-
baseDir: context.projectRoot,
|
|
202
|
-
cacheDir: options.cacheDir,
|
|
203
|
-
contributors: record.contributors,
|
|
204
|
-
env: effectiveEnv,
|
|
205
|
-
pluginName: record.label,
|
|
206
|
-
source: record.source,
|
|
207
|
-
ttscVersion,
|
|
208
|
-
tsgoVersion,
|
|
209
|
-
});
|
|
210
|
-
if (binary === undefined) {
|
|
211
|
-
throw new Error(`ttsc: plugin "${record.label}" is a linked Go package, but no compiler host is available`);
|
|
212
|
-
}
|
|
213
|
-
return {
|
|
214
|
-
binary,
|
|
215
|
-
capabilities: record.capabilities,
|
|
216
|
-
config: record.config,
|
|
217
|
-
contributors: record.contributors,
|
|
218
|
-
kind: record.kind,
|
|
219
|
-
name: record.name,
|
|
220
|
-
reportsTypeScriptDiagnostics: record.reportsTypeScriptDiagnostics,
|
|
221
|
-
source: record.source,
|
|
222
|
-
stage: record.stage,
|
|
223
|
-
};
|
|
224
|
-
});
|
|
225
|
-
return {
|
|
226
|
-
...collectHostInputSnapshot(project, context, records, projectHostInputs, revalidateHostInputHashes(projectHostInputHashes, projectHostInputs), revalidateHostInputRealpaths(projectHostInputRealpaths, projectHostInputs)),
|
|
227
|
-
nativePlugins: orderNativePlugins(nativePlugins),
|
|
228
|
-
project,
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Collect exact JavaScript-host files that universally influence the loaded
|
|
233
|
-
* transform. Program files belong to the native reference graph; this list is
|
|
234
|
-
* deliberately limited to config ancestry, descriptor entries, the project
|
|
235
|
-
* manifest controlling auto-discovery, and explicit plugin config files.
|
|
236
|
-
*/
|
|
237
|
-
function collectHostInputSnapshot(project, context, records, baselineInputs, baselineHashes, baselineRealpaths) {
|
|
238
|
-
const inputs = new Set(baselineInputs.map((file) => node_path_1.default.resolve(file)));
|
|
239
|
-
const configBase = context.pluginConfigDir ?? node_path_1.default.dirname(project.path);
|
|
240
|
-
for (const record of records) {
|
|
241
|
-
inputs.add(node_path_1.default.resolve(record.request));
|
|
242
|
-
for (const hostInput of record.hostInputs) {
|
|
243
|
-
inputs.add(node_path_1.default.resolve(hostInput));
|
|
244
|
-
}
|
|
245
|
-
const descriptorManifest = findNearestPackageJson(record.request);
|
|
246
|
-
if (descriptorManifest !== undefined) {
|
|
247
|
-
inputs.add(node_path_1.default.resolve(descriptorManifest));
|
|
248
|
-
}
|
|
249
|
-
const configFile = record.config.configFile;
|
|
250
|
-
if (typeof configFile === "string" && configFile.trim() !== "") {
|
|
251
|
-
inputs.add(node_path_1.default.isAbsolute(configFile)
|
|
252
|
-
? node_path_1.default.resolve(configFile)
|
|
253
|
-
: node_path_1.default.resolve(configBase, configFile));
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
const hostInputs = [...inputs].sort();
|
|
257
|
-
const evaluationHashes = mergeObservedHostInputHashes(baselineHashes, ...records.map((record) => record.hostInputHashes));
|
|
258
|
-
const evaluationRealpaths = mergeObservedHostInputRealpaths(baselineRealpaths, ...records.map((record) => record.hostInputRealpaths));
|
|
259
|
-
for (const record of records) {
|
|
260
|
-
for (const input of record.hostInputs) {
|
|
261
|
-
const absolute = node_path_1.default.resolve(input);
|
|
262
|
-
if (!Object.prototype.hasOwnProperty.call(record.hostInputHashes, absolute)) {
|
|
263
|
-
delete evaluationHashes[absolute];
|
|
264
|
-
}
|
|
265
|
-
if (!Object.prototype.hasOwnProperty.call(record.hostInputRealpaths, absolute)) {
|
|
266
|
-
delete evaluationRealpaths[absolute];
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
const hostInputHashes = Object.fromEntries(hostInputs.flatMap((file) => Object.prototype.hasOwnProperty.call(evaluationHashes, file)
|
|
271
|
-
? [[file, evaluationHashes[file]]]
|
|
272
|
-
: []));
|
|
273
|
-
const hostInputRealpaths = Object.fromEntries(hostInputs.flatMap((file) => Object.prototype.hasOwnProperty.call(evaluationRealpaths, file)
|
|
274
|
-
? [[file, evaluationRealpaths[file]]]
|
|
275
|
-
: []));
|
|
276
|
-
return { hostInputHashes, hostInputRealpaths, hostInputs };
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Read one project configuration while its complete discovery surface remains
|
|
280
|
-
* unchanged. The preliminary read discovers the input set; the accepted read is
|
|
281
|
-
* bracketed by equal fingerprints for that same set. A repeatedly changing
|
|
282
|
-
* project is still returned so compilation can make progress, but without any
|
|
283
|
-
* cache proof for the ambiguous snapshot.
|
|
284
|
-
*/
|
|
285
|
-
function readProjectHostInputSnapshot(options) {
|
|
286
|
-
const { includePluginDiscovery, ...projectOptions } = options;
|
|
287
|
-
let project = (0, readProjectConfig_1.readProjectConfig)(projectOptions);
|
|
288
|
-
let hostInputs = collectProjectHostInputs(project, includePluginDiscovery);
|
|
289
|
-
const observedInputs = new Set(hostInputs);
|
|
290
|
-
for (let attempt = 0; attempt < 3; attempt++) {
|
|
291
|
-
const before = hashHostInputPaths(hostInputs);
|
|
292
|
-
const beforeRealpaths = realpathHostInputPaths(hostInputs);
|
|
293
|
-
const beforeSignatures = hostInputMetadataSignatures(hostInputs);
|
|
294
|
-
const candidateProject = (0, readProjectConfig_1.readProjectConfig)(projectOptions);
|
|
295
|
-
const candidateInputs = collectProjectHostInputs(candidateProject, includePluginDiscovery);
|
|
296
|
-
for (const input of candidateInputs)
|
|
297
|
-
observedInputs.add(input);
|
|
298
|
-
const after = hashHostInputPaths(candidateInputs);
|
|
299
|
-
const afterRealpaths = realpathHostInputPaths(candidateInputs);
|
|
300
|
-
const afterSignatures = hostInputMetadataSignatures(candidateInputs);
|
|
301
|
-
if (equalHostInputLists(hostInputs, candidateInputs) &&
|
|
302
|
-
equalHostInputHashes(before, after) &&
|
|
303
|
-
equalHostInputHashes(beforeRealpaths, afterRealpaths) &&
|
|
304
|
-
beforeSignatures !== undefined &&
|
|
305
|
-
afterSignatures !== undefined &&
|
|
306
|
-
equalHostInputHashes(beforeSignatures, afterSignatures)) {
|
|
307
|
-
return {
|
|
308
|
-
hostInputHashes: after,
|
|
309
|
-
hostInputRealpaths: afterRealpaths,
|
|
310
|
-
hostInputs: candidateInputs,
|
|
311
|
-
project: candidateProject,
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
project = candidateProject;
|
|
315
|
-
hostInputs = candidateInputs;
|
|
316
|
-
}
|
|
317
|
-
return {
|
|
318
|
-
hostInputHashes: {},
|
|
319
|
-
hostInputRealpaths: {},
|
|
320
|
-
hostInputs: [...observedInputs].sort(),
|
|
321
|
-
project,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
function equalHostInputLists(first, second) {
|
|
325
|
-
return (first.length === second.length &&
|
|
326
|
-
first.every((file, index) => node_path_1.default.resolve(file) === node_path_1.default.resolve(second[index])));
|
|
327
|
-
}
|
|
328
|
-
function equalHostInputHashes(first, second) {
|
|
329
|
-
const files = Object.keys(first);
|
|
330
|
-
return (files.length === Object.keys(second).length &&
|
|
331
|
-
files.every((file) => Object.prototype.hasOwnProperty.call(second, file) &&
|
|
332
|
-
first[file] === second[file]));
|
|
333
|
-
}
|
|
334
|
-
/** Retain proof only for inputs whose initial and final observations agree. */
|
|
335
|
-
function revalidateHostInputHashes(initial, inputs) {
|
|
336
|
-
const current = hashHostInputPaths(inputs);
|
|
337
|
-
const output = {};
|
|
338
|
-
for (const input of inputs) {
|
|
339
|
-
const absolute = node_path_1.default.resolve(input);
|
|
340
|
-
if (Object.prototype.hasOwnProperty.call(initial, absolute) &&
|
|
341
|
-
initial[absolute] === current[absolute]) {
|
|
342
|
-
output[absolute] = current[absolute];
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return output;
|
|
346
|
-
}
|
|
347
|
-
/** Keep physical-identity proof only while the same path resolves identically. */
|
|
348
|
-
function revalidateHostInputRealpaths(initial, inputs) {
|
|
349
|
-
const current = realpathHostInputPaths(inputs);
|
|
350
|
-
return Object.fromEntries(inputs.flatMap((input) => {
|
|
351
|
-
const absolute = node_path_1.default.resolve(input);
|
|
352
|
-
return Object.prototype.hasOwnProperty.call(initial, absolute) &&
|
|
353
|
-
initial[absolute] === current[absolute]
|
|
354
|
-
? [[absolute, current[absolute]]]
|
|
355
|
-
: [];
|
|
356
|
-
}));
|
|
357
|
-
}
|
|
358
|
-
function hashHostInput(file) {
|
|
359
|
-
try {
|
|
360
|
-
if (node_fs_1.default.statSync(file).isDirectory()) {
|
|
361
|
-
return node_crypto_1.default
|
|
362
|
-
.createHash("sha256")
|
|
363
|
-
.update("ttsc:host-input:directory\0")
|
|
364
|
-
.digest("hex");
|
|
365
|
-
}
|
|
366
|
-
return node_crypto_1.default
|
|
367
|
-
.createHash("sha256")
|
|
368
|
-
.update(node_fs_1.default.readFileSync(file))
|
|
369
|
-
.digest("hex");
|
|
370
|
-
}
|
|
371
|
-
catch {
|
|
372
|
-
return null;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
function hashHostInputPaths(files) {
|
|
376
|
-
return Object.fromEntries(files.map((file) => [node_path_1.default.resolve(file), hashHostInput(file)]));
|
|
377
|
-
}
|
|
378
|
-
/** Physical path selected by a host input, or null while it is unresolved. */
|
|
379
|
-
function realpathHostInput(file) {
|
|
380
|
-
try {
|
|
381
|
-
return node_fs_1.default.realpathSync.native(file);
|
|
382
|
-
}
|
|
383
|
-
catch {
|
|
384
|
-
return null;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
function realpathHostInputPaths(files) {
|
|
388
|
-
return Object.fromEntries(files.map((file) => [node_path_1.default.resolve(file), realpathHostInput(file)]));
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Metadata identity that survives content-preserving reads but exposes A-B-A
|
|
392
|
-
* replacement. Missing paths are tied to the nearest existing ancestor whose
|
|
393
|
-
* directory metadata changes when the missing branch appears or disappears.
|
|
394
|
-
*/
|
|
395
|
-
function hostInputMetadataSignature(file) {
|
|
396
|
-
const requested = node_path_1.default.resolve(file);
|
|
397
|
-
let current = requested;
|
|
398
|
-
for (;;) {
|
|
399
|
-
try {
|
|
400
|
-
const link = node_fs_1.default.lstatSync(current, { bigint: true });
|
|
401
|
-
let target = link;
|
|
402
|
-
if (link.isSymbolicLink()) {
|
|
403
|
-
try {
|
|
404
|
-
target = node_fs_1.default.statSync(current, { bigint: true });
|
|
405
|
-
}
|
|
406
|
-
catch {
|
|
407
|
-
// A broken link's own metadata cannot expose its target appearing
|
|
408
|
-
// and disappearing during evaluation. Decline cache proof instead.
|
|
409
|
-
return undefined;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
return [
|
|
413
|
-
node_path_1.default.relative(current, requested),
|
|
414
|
-
link.dev,
|
|
415
|
-
link.ino,
|
|
416
|
-
link.mode,
|
|
417
|
-
link.size,
|
|
418
|
-
link.mtimeNs,
|
|
419
|
-
link.ctimeNs,
|
|
420
|
-
target.dev,
|
|
421
|
-
target.ino,
|
|
422
|
-
target.mode,
|
|
423
|
-
target.size,
|
|
424
|
-
target.mtimeNs,
|
|
425
|
-
target.ctimeNs,
|
|
426
|
-
].join(":");
|
|
427
|
-
}
|
|
428
|
-
catch (error) {
|
|
429
|
-
if (!isMissingPathError(error))
|
|
430
|
-
return undefined;
|
|
431
|
-
const parent = node_path_1.default.dirname(current);
|
|
432
|
-
if (parent === current)
|
|
433
|
-
return undefined;
|
|
434
|
-
current = parent;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
function hostInputMetadataSignatures(files) {
|
|
439
|
-
const output = {};
|
|
440
|
-
for (const file of files) {
|
|
441
|
-
const signature = hostInputMetadataSignature(file);
|
|
442
|
-
if (signature === undefined)
|
|
443
|
-
return undefined;
|
|
444
|
-
output[node_path_1.default.resolve(file)] = signature;
|
|
445
|
-
}
|
|
446
|
-
return output;
|
|
447
|
-
}
|
|
448
|
-
function isMissingPathError(error) {
|
|
449
|
-
const code = error?.code;
|
|
450
|
-
return code === "ENOENT" || code === "ENOTDIR";
|
|
451
|
-
}
|
|
452
|
-
/** Return config ancestry and the manifest controlling package discovery. */
|
|
453
|
-
function collectProjectHostInputs(project, includePluginDiscovery = true) {
|
|
454
|
-
const inputs = new Set(project.configPaths.map((file) => node_path_1.default.resolve(file)));
|
|
455
|
-
if (!includePluginDiscovery)
|
|
456
|
-
return [...inputs].sort();
|
|
457
|
-
const manifestCandidates = collectNearestPackageJsonCandidates(project.root);
|
|
458
|
-
for (const candidate of manifestCandidates)
|
|
459
|
-
inputs.add(candidate);
|
|
460
|
-
const manifest = manifestCandidates.find(existingFile);
|
|
461
|
-
if (manifest !== undefined) {
|
|
462
|
-
const projectManifest = readPackageManifest(manifest);
|
|
463
|
-
if (projectManifest !== undefined) {
|
|
464
|
-
const projectRoot = node_path_1.default.dirname(manifest);
|
|
465
|
-
for (const dependency of directDependencyNames(projectManifest)) {
|
|
466
|
-
const dependencyManifest = resolveDependencyPackageJson(dependency, projectRoot);
|
|
467
|
-
for (const candidate of collectDependencyManifestCandidates(dependency, manifest, dependencyManifest)) {
|
|
468
|
-
inputs.add(candidate);
|
|
469
|
-
}
|
|
470
|
-
if (dependencyManifest !== undefined) {
|
|
471
|
-
inputs.add(node_path_1.default.resolve(dependencyManifest));
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
return [...inputs].sort();
|
|
477
|
-
}
|
|
478
|
-
// The direct evaluator preloads ttsx's supported Node hook, whose
|
|
479
|
-
// extensionless rescue order includes TypeScript and ESM/CJS spellings in
|
|
480
|
-
// addition to Node's ordinary CommonJS probes.
|
|
481
|
-
const MODULE_PROBE_EXTENSIONS = [
|
|
482
|
-
".ts",
|
|
483
|
-
".tsx",
|
|
484
|
-
".mts",
|
|
485
|
-
".cts",
|
|
486
|
-
".js",
|
|
487
|
-
".mjs",
|
|
488
|
-
".cjs",
|
|
489
|
-
".json",
|
|
490
|
-
".node",
|
|
491
|
-
];
|
|
492
|
-
/** Record every file whose later appearance can change one module resolution. */
|
|
493
|
-
function collectModuleResolutionCandidates(specifier, parentFile, resolvedFile) {
|
|
494
|
-
const inputs = new Set();
|
|
495
|
-
const recordedBases = new Set();
|
|
496
|
-
const candidates = (base) => [
|
|
497
|
-
base,
|
|
498
|
-
...MODULE_PROBE_EXTENSIONS.map((extension) => base + extension),
|
|
499
|
-
node_path_1.default.join(base, "package.json"),
|
|
500
|
-
...MODULE_PROBE_EXTENSIONS.map((extension) => node_path_1.default.join(base, `index${extension}`)),
|
|
501
|
-
];
|
|
502
|
-
const recordManifestTargets = (value, directory, allowBare = false) => {
|
|
503
|
-
if (typeof value === "string") {
|
|
504
|
-
if (value !== "" &&
|
|
505
|
-
(allowBare || value.startsWith("./") || value.startsWith("../"))) {
|
|
506
|
-
recordBase(node_path_1.default.resolve(directory, value));
|
|
507
|
-
}
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
if (Array.isArray(value)) {
|
|
511
|
-
for (const item of value) {
|
|
512
|
-
recordManifestTargets(item, directory, allowBare);
|
|
513
|
-
}
|
|
514
|
-
return;
|
|
515
|
-
}
|
|
516
|
-
if (isRecord(value)) {
|
|
517
|
-
for (const item of Object.values(value)) {
|
|
518
|
-
recordManifestTargets(item, directory, allowBare);
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
};
|
|
522
|
-
const recordBase = (base) => {
|
|
523
|
-
const resolvedBase = node_path_1.default.resolve(base);
|
|
524
|
-
if (recordedBases.has(resolvedBase))
|
|
525
|
-
return;
|
|
526
|
-
recordedBases.add(resolvedBase);
|
|
527
|
-
for (const candidate of candidates(resolvedBase)) {
|
|
528
|
-
inputs.add(node_path_1.default.resolve(candidate));
|
|
529
|
-
}
|
|
530
|
-
try {
|
|
531
|
-
const manifest = (0, readConfigJson_1.readJsonFile)(node_path_1.default.join(resolvedBase, "package.json"));
|
|
532
|
-
if (isRecord(manifest)) {
|
|
533
|
-
recordManifestTargets(manifest.exports, resolvedBase);
|
|
534
|
-
recordManifestTargets(manifest.module, resolvedBase, true);
|
|
535
|
-
recordManifestTargets(manifest.main, resolvedBase, true);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
catch {
|
|
539
|
-
// A malformed selected manifest is reported by normal resolution/load.
|
|
540
|
-
}
|
|
541
|
-
};
|
|
542
|
-
const selectedBy = (base) => {
|
|
543
|
-
if (resolvedFile === undefined)
|
|
544
|
-
return false;
|
|
545
|
-
let selected;
|
|
546
|
-
try {
|
|
547
|
-
selected = node_fs_1.default.realpathSync.native(resolvedFile);
|
|
548
|
-
}
|
|
549
|
-
catch {
|
|
550
|
-
selected = node_path_1.default.resolve(resolvedFile);
|
|
551
|
-
}
|
|
552
|
-
for (const candidate of candidates(base)) {
|
|
553
|
-
try {
|
|
554
|
-
const canonical = node_fs_1.default.realpathSync.native(candidate);
|
|
555
|
-
const relative = node_path_1.default.relative(canonical, selected);
|
|
556
|
-
if (relative === "" ||
|
|
557
|
-
(node_fs_1.default.statSync(canonical).isDirectory() &&
|
|
558
|
-
relative !== ".." &&
|
|
559
|
-
!relative.startsWith(`..${node_path_1.default.sep}`) &&
|
|
560
|
-
!node_path_1.default.isAbsolute(relative))) {
|
|
561
|
-
return true;
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
catch {
|
|
565
|
-
// Missing candidates are the inputs this function intentionally keeps.
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
return false;
|
|
569
|
-
};
|
|
570
|
-
const localBases = () => {
|
|
571
|
-
if (specifier.startsWith("file:"))
|
|
572
|
-
return [(0, node_url_1.fileURLToPath)(specifier)];
|
|
573
|
-
const directory = node_path_1.default.dirname(parentFile);
|
|
574
|
-
const raw = node_path_1.default.resolve(directory, specifier);
|
|
575
|
-
const suffixStart = specifier.search(/[?#]/);
|
|
576
|
-
if (suffixStart === -1)
|
|
577
|
-
return [raw];
|
|
578
|
-
const pathname = specifier.slice(0, suffixStart);
|
|
579
|
-
return pathname === ""
|
|
580
|
-
? [raw]
|
|
581
|
-
: [...new Set([raw, node_path_1.default.resolve(directory, pathname)])];
|
|
582
|
-
};
|
|
583
|
-
if (specifier.startsWith(".") ||
|
|
584
|
-
node_path_1.default.isAbsolute(specifier) ||
|
|
585
|
-
specifier.startsWith("file:")) {
|
|
586
|
-
try {
|
|
587
|
-
for (const base of localBases()) {
|
|
588
|
-
// An existing exact file wins before extension and directory probes.
|
|
589
|
-
// Its own recorded identity is therefore sufficient; siblings cannot
|
|
590
|
-
// supersede it while it exists.
|
|
591
|
-
if (selectedByExactFile(base, resolvedFile) ||
|
|
592
|
-
(resolvedFile === undefined && existingFile(base))) {
|
|
593
|
-
inputs.add(node_path_1.default.resolve(base));
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
recordBase(base);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
catch {
|
|
601
|
-
// Invalid URL spellings are diagnosed by the real resolver.
|
|
602
|
-
}
|
|
603
|
-
return [...inputs];
|
|
604
|
-
}
|
|
605
|
-
const parts = specifier.split("/");
|
|
606
|
-
const packageParts = parts[0]?.startsWith("@")
|
|
607
|
-
? parts.slice(0, 2)
|
|
608
|
-
: parts.slice(0, 1);
|
|
609
|
-
if (packageParts.some((part) => part === undefined || part === "")) {
|
|
610
|
-
return [...inputs];
|
|
611
|
-
}
|
|
612
|
-
const packageName = packageParts.join("/");
|
|
613
|
-
const subpath = parts.slice(packageParts.length);
|
|
614
|
-
const searchPaths = (0, node_module_1.createRequire)(parentFile).resolve.paths(specifier) ?? [];
|
|
615
|
-
for (const searchPath of searchPaths) {
|
|
616
|
-
const packageDirectory = node_path_1.default.join(searchPath, packageName);
|
|
617
|
-
recordBase(packageDirectory);
|
|
618
|
-
if (subpath.length !== 0) {
|
|
619
|
-
recordBase(node_path_1.default.join(packageDirectory, ...subpath));
|
|
620
|
-
}
|
|
621
|
-
if (selectedBy(packageDirectory))
|
|
622
|
-
break;
|
|
623
|
-
}
|
|
624
|
-
return [...inputs];
|
|
625
|
-
}
|
|
626
|
-
function existingFile(file) {
|
|
627
|
-
try {
|
|
628
|
-
return node_fs_1.default.statSync(file).isFile();
|
|
629
|
-
}
|
|
630
|
-
catch {
|
|
631
|
-
return false;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
function selectedByExactFile(candidate, selected) {
|
|
635
|
-
if (selected === undefined)
|
|
636
|
-
return false;
|
|
637
|
-
try {
|
|
638
|
-
return (node_fs_1.default.realpathSync.native(candidate) === node_fs_1.default.realpathSync.native(selected));
|
|
639
|
-
}
|
|
640
|
-
catch {
|
|
641
|
-
return node_path_1.default.resolve(candidate) === node_path_1.default.resolve(selected);
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
/** Record package manifests whose later appearance can redirect discovery. */
|
|
645
|
-
function collectDependencyManifestCandidates(packageName, parentFile, selectedManifest) {
|
|
646
|
-
const out = [];
|
|
647
|
-
let selectedDirectory;
|
|
648
|
-
if (selectedManifest !== undefined) {
|
|
649
|
-
try {
|
|
650
|
-
selectedDirectory = node_fs_1.default.realpathSync.native(node_path_1.default.dirname(selectedManifest));
|
|
651
|
-
}
|
|
652
|
-
catch {
|
|
653
|
-
selectedDirectory = node_path_1.default.resolve(node_path_1.default.dirname(selectedManifest));
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
for (const searchPath of (0, node_module_1.createRequire)(parentFile).resolve.paths(packageName) ?? []) {
|
|
657
|
-
const packageDirectory = node_path_1.default.join(searchPath, ...packageName.split("/"));
|
|
658
|
-
out.push(node_path_1.default.join(packageDirectory, "package.json"));
|
|
659
|
-
if (selectedDirectory === undefined)
|
|
660
|
-
continue;
|
|
661
|
-
try {
|
|
662
|
-
if (node_fs_1.default.realpathSync.native(packageDirectory) === selectedDirectory)
|
|
663
|
-
break;
|
|
664
|
-
}
|
|
665
|
-
catch {
|
|
666
|
-
// Keep searching until the selected package directory is reached.
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
return out;
|
|
670
|
-
}
|
|
671
|
-
function composePluginSources(entries, plugins) {
|
|
672
|
-
const aggregates = plugins
|
|
673
|
-
.map((plugin, index) => ({ index, plugin }))
|
|
674
|
-
.filter(({ plugin }) => Array.isArray(plugin.composes));
|
|
675
|
-
if (aggregates.length === 0) {
|
|
676
|
-
return [...plugins];
|
|
677
|
-
}
|
|
678
|
-
for (const { plugin } of aggregates) {
|
|
679
|
-
for (const target of plugin.composes) {
|
|
680
|
-
if (typeof target !== "string" || target.trim() === "") {
|
|
681
|
-
throw new Error(`ttsc: plugin "${plugin.name}" has an invalid "composes" target; ` +
|
|
682
|
-
`targets must be non-empty plugin names or transform specifiers`);
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
// Composition is intentionally one hop only: A.composes=[B] sends B to A's
|
|
687
|
-
// binary, but if B.composes=[C] then C uses B's original source and does NOT
|
|
688
|
-
// cascade to A. Detect cycles (A.composes=[B] && B.composes=[A]) and throw,
|
|
689
|
-
// otherwise the silent reswap below would mis-route both plugins.
|
|
690
|
-
for (const { index: i, plugin: a } of aggregates) {
|
|
691
|
-
for (const { index: j, plugin: b } of aggregates) {
|
|
692
|
-
if (i === j)
|
|
693
|
-
continue;
|
|
694
|
-
const aTransform = entries[i]?.config.transform;
|
|
695
|
-
const bTransform = entries[j]?.config.transform;
|
|
696
|
-
const aComposesB = a.composes.some((alias) => matchesPluginAlias(alias, b, bTransform));
|
|
697
|
-
const bComposesA = b.composes.some((alias) => matchesPluginAlias(alias, a, aTransform));
|
|
698
|
-
if (aComposesB && bComposesA) {
|
|
699
|
-
throw new Error(`ttsc: plugin composes cycle detected between "${a.name}" and "${b.name}"; ` +
|
|
700
|
-
`each plugin lists the other in its "composes" array — composition is one hop only, not transitive`);
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
return plugins.map((plugin, index) => {
|
|
705
|
-
const transform = entries[index]?.config.transform;
|
|
706
|
-
const matchingAggregates = aggregates.filter(({ index: aggregateIndex, plugin: aggregatePlugin }) => aggregateIndex !== index &&
|
|
707
|
-
aggregatePlugin.composes.some((alias) => matchesPluginAlias(alias, plugin, transform)));
|
|
708
|
-
if (matchingAggregates.length > 1) {
|
|
709
|
-
throw new Error(`ttsc: plugin "${plugin.name}" is composed by multiple aggregate plugins; ` +
|
|
710
|
-
`each plugin entry can be redirected to only one aggregate native host`);
|
|
711
|
-
}
|
|
712
|
-
const aggregate = matchingAggregates[0];
|
|
713
|
-
if (aggregate === undefined) {
|
|
714
|
-
return plugin;
|
|
715
|
-
}
|
|
716
|
-
// A composed plugin's source is rerouted to the aggregate's binary,
|
|
717
|
-
// so its own `contributors` would link into a different host than
|
|
718
|
-
// it was authored against. The "one binary" guarantee in the
|
|
719
|
-
// protocol doc holds only when the composed plugin defers entirely
|
|
720
|
-
// to the aggregate; reject early instead of silently producing two
|
|
721
|
-
// diverging binaries.
|
|
722
|
-
if (plugin.contributors && plugin.contributors.length > 0) {
|
|
723
|
-
throw new Error(`ttsc: plugin "${plugin.name}" is composed by "${aggregate.plugin.name}" but declares its own "contributors"; ` +
|
|
724
|
-
`move the contributors onto the aggregate plugin or drop the composes redirect`);
|
|
725
|
-
}
|
|
726
|
-
return {
|
|
727
|
-
...plugin,
|
|
728
|
-
source: aggregate.plugin.source,
|
|
729
|
-
contributors: aggregate.plugin.contributors,
|
|
730
|
-
// The composed plugin's runtime BINARY is the aggregate's binary,
|
|
731
|
-
// so the CLI surface (which flags the sidecar parses) is the
|
|
732
|
-
// aggregate's. Inherit `capabilities` from the aggregate so a
|
|
733
|
-
// capability the aggregate declares — e.g. threadingArgs — does
|
|
734
|
-
// not get silently dropped just because the composed entry's own
|
|
735
|
-
// descriptor omitted it. If the aggregate did not set capabilities
|
|
736
|
-
// we keep the composed plugin's own as a fallback.
|
|
737
|
-
capabilities: aggregate.plugin.capabilities ?? plugin.capabilities,
|
|
738
|
-
};
|
|
739
|
-
});
|
|
740
|
-
}
|
|
741
|
-
function matchesPluginAlias(alias, plugin, transform) {
|
|
742
|
-
return (alias === plugin.name ||
|
|
743
|
-
(typeof transform === "string" && alias === transform));
|
|
744
|
-
}
|
|
745
|
-
/**
|
|
746
|
-
* Return `true` when the project has at least one enabled plugin entry.
|
|
747
|
-
*
|
|
748
|
-
* Used by callers that need to skip plugin-specific work when no plugins are
|
|
749
|
-
* configured, without paying the full cost of `loadProjectPlugins`.
|
|
750
|
-
*
|
|
751
|
-
* @param entries - Explicit entries; `false` always returns `false`.
|
|
752
|
-
*/
|
|
753
|
-
function hasProjectPluginEntries(project, entries) {
|
|
754
|
-
if (entries === false) {
|
|
755
|
-
return false;
|
|
756
|
-
}
|
|
757
|
-
return resolvePluginEntries(project, entries).some((entry) => entry.config.enabled !== false);
|
|
758
|
-
}
|
|
759
|
-
function resolvePluginEntries(project, entries) {
|
|
760
|
-
if (entries !== undefined) {
|
|
761
|
-
return entries.map((config) => ({
|
|
762
|
-
baseDir: project.root,
|
|
763
|
-
config,
|
|
764
|
-
}));
|
|
765
|
-
}
|
|
766
|
-
const configured = project.compilerOptions.plugins.map((config, index) => {
|
|
767
|
-
// A bare/package plugin specifier (e.g. "typia/lib/transform") must resolve
|
|
768
|
-
// from the project's own node_modules, not from the tsconfig that declared
|
|
769
|
-
// it: an `extends`ed base config (a shared `tests/config/tsconfig.json`)
|
|
770
|
-
// declares the plugin, but the package is installed under the consuming
|
|
771
|
-
// project. Only a relative specifier ("./plugin") is meaningful relative to
|
|
772
|
-
// the declaring config's directory. Mirrors discoverPackagePluginEntries.
|
|
773
|
-
const declaringDir = project.pluginBaseDirs[index];
|
|
774
|
-
const baseDir = typeof config.transform === "string" &&
|
|
775
|
-
isRelativePluginSpecifier(config.transform) &&
|
|
776
|
-
declaringDir !== undefined
|
|
777
|
-
? declaringDir
|
|
778
|
-
: project.root;
|
|
779
|
-
return { baseDir, config };
|
|
780
|
-
});
|
|
781
|
-
return [...configured, ...discoverPackagePluginEntries(project, configured)];
|
|
782
|
-
}
|
|
783
|
-
function discoverPackagePluginEntries(project, configured) {
|
|
784
|
-
const projectPackageJson = findNearestPackageJson(project.root);
|
|
785
|
-
if (projectPackageJson === undefined) {
|
|
786
|
-
return [];
|
|
787
|
-
}
|
|
788
|
-
const projectPackageRoot = node_path_1.default.dirname(projectPackageJson);
|
|
789
|
-
const projectManifest = readPackageManifest(projectPackageJson);
|
|
790
|
-
if (projectManifest === undefined) {
|
|
791
|
-
return [];
|
|
792
|
-
}
|
|
793
|
-
const configuredTransforms = createConfiguredTransformSet(configured);
|
|
794
|
-
const out = [];
|
|
795
|
-
for (const name of directDependencyNames(projectManifest)) {
|
|
796
|
-
const packageJson = resolveDependencyPackageJson(name, projectPackageRoot);
|
|
797
|
-
if (packageJson === undefined) {
|
|
798
|
-
continue;
|
|
799
|
-
}
|
|
800
|
-
const manifest = readPackageManifest(packageJson);
|
|
801
|
-
const config = readPackagePluginConfig(name, manifest);
|
|
802
|
-
if (config === undefined || config.enabled === false) {
|
|
803
|
-
continue;
|
|
804
|
-
}
|
|
805
|
-
const packageRoot = node_path_1.default.dirname(packageJson);
|
|
806
|
-
const transform = config.transform;
|
|
807
|
-
if (typeof transform !== "string") {
|
|
808
|
-
continue;
|
|
809
|
-
}
|
|
810
|
-
const baseDir = isRelativePluginSpecifier(transform)
|
|
811
|
-
? packageRoot
|
|
812
|
-
: projectPackageRoot;
|
|
813
|
-
const resolved = resolvePluginRequest(transform, baseDir);
|
|
814
|
-
if (hasConfiguredTransform(configuredTransforms, transform, resolved)) {
|
|
815
|
-
continue;
|
|
816
|
-
}
|
|
817
|
-
out.push({
|
|
818
|
-
baseDir,
|
|
819
|
-
config,
|
|
820
|
-
});
|
|
821
|
-
addConfiguredTransform(configuredTransforms, transform, resolved);
|
|
822
|
-
}
|
|
823
|
-
return out;
|
|
824
|
-
}
|
|
825
|
-
function createConfiguredTransformSet(entries) {
|
|
826
|
-
const raw = new Set();
|
|
827
|
-
const resolved = new Set();
|
|
828
|
-
for (const entry of entries) {
|
|
829
|
-
const transform = entry.config.transform;
|
|
830
|
-
if (typeof transform !== "string" || transform.length === 0) {
|
|
831
|
-
continue;
|
|
832
|
-
}
|
|
833
|
-
if (!isRelativePluginSpecifier(transform)) {
|
|
834
|
-
raw.add(transform);
|
|
835
|
-
}
|
|
836
|
-
try {
|
|
837
|
-
resolved.add(resolvePluginRequest(transform, entry.baseDir));
|
|
838
|
-
}
|
|
839
|
-
catch {
|
|
840
|
-
// Keep the normal plugin loading error path for invalid explicit entries.
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
return { raw, resolved };
|
|
844
|
-
}
|
|
845
|
-
function hasConfiguredTransform(configuredTransforms, transform, resolved) {
|
|
846
|
-
return (configuredTransforms.resolved.has(resolved) ||
|
|
847
|
-
(!isRelativePluginSpecifier(transform) &&
|
|
848
|
-
configuredTransforms.raw.has(transform)));
|
|
849
|
-
}
|
|
850
|
-
function addConfiguredTransform(configuredTransforms, transform, resolved) {
|
|
851
|
-
if (!isRelativePluginSpecifier(transform)) {
|
|
852
|
-
configuredTransforms.raw.add(transform);
|
|
853
|
-
}
|
|
854
|
-
configuredTransforms.resolved.add(resolved);
|
|
855
|
-
}
|
|
856
|
-
function directDependencyNames(manifest) {
|
|
857
|
-
const seen = new Set();
|
|
858
|
-
const out = [];
|
|
859
|
-
for (const dependencies of [
|
|
860
|
-
manifest.dependencies,
|
|
861
|
-
manifest.devDependencies,
|
|
862
|
-
]) {
|
|
863
|
-
if (!isRecord(dependencies)) {
|
|
864
|
-
continue;
|
|
865
|
-
}
|
|
866
|
-
for (const name of Object.keys(dependencies)) {
|
|
867
|
-
if (seen.has(name)) {
|
|
868
|
-
continue;
|
|
869
|
-
}
|
|
870
|
-
seen.add(name);
|
|
871
|
-
out.push(name);
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
|
-
return out;
|
|
875
|
-
}
|
|
876
|
-
function resolveDependencyPackageJson(name, projectRoot) {
|
|
877
|
-
const direct = node_path_1.default.join(projectRoot, "node_modules", ...name.split("/"));
|
|
878
|
-
const directManifest = node_path_1.default.join(direct, "package.json");
|
|
879
|
-
if (existingFile(directManifest)) {
|
|
880
|
-
return resolveRealPath(directManifest);
|
|
881
|
-
}
|
|
882
|
-
const projectPackage = node_path_1.default.join(projectRoot, "package.json");
|
|
883
|
-
const projectRequire = (0, node_module_1.createRequire)(projectPackage);
|
|
884
|
-
try {
|
|
885
|
-
return resolveRealPath(projectRequire.resolve(`${name}/package.json`));
|
|
886
|
-
}
|
|
887
|
-
catch {
|
|
888
|
-
try {
|
|
889
|
-
return findNearestPackageJson(projectRequire.resolve(name));
|
|
890
|
-
}
|
|
891
|
-
catch {
|
|
892
|
-
return undefined;
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
}
|
|
896
|
-
function findNearestPackageJson(location) {
|
|
897
|
-
const selected = collectNearestPackageJsonCandidates(location).find(existingFile);
|
|
898
|
-
return selected === undefined ? undefined : resolveRealPath(selected);
|
|
899
|
-
}
|
|
900
|
-
/** Every package-scope candidate through the first regular manifest file. */
|
|
901
|
-
function collectNearestPackageJsonCandidates(location) {
|
|
902
|
-
let current = node_fs_1.default.statSync(location).isDirectory()
|
|
903
|
-
? location
|
|
904
|
-
: node_path_1.default.dirname(location);
|
|
905
|
-
const candidates = [];
|
|
906
|
-
while (true) {
|
|
907
|
-
const manifest = node_path_1.default.resolve(current, "package.json");
|
|
908
|
-
candidates.push(manifest);
|
|
909
|
-
if (existingFile(manifest))
|
|
910
|
-
return candidates;
|
|
911
|
-
const parent = node_path_1.default.dirname(current);
|
|
912
|
-
if (parent === current)
|
|
913
|
-
return candidates;
|
|
914
|
-
current = parent;
|
|
915
|
-
}
|
|
916
|
-
}
|
|
917
|
-
/**
|
|
918
|
-
* Read a package manifest, or `undefined` when the file is absent or is not a
|
|
919
|
-
* JSON object. A malformed manifest throws naming the file: these are usually
|
|
920
|
-
* files the user did not author, which makes an unattributed `JSON.parse`
|
|
921
|
-
* message worse here than anywhere else.
|
|
922
|
-
*/
|
|
923
|
-
function readPackageManifest(file) {
|
|
924
|
-
if (!existingFile(file)) {
|
|
925
|
-
return undefined;
|
|
926
|
-
}
|
|
927
|
-
const parsed = (0, readConfigJson_1.readJsonFile)(file);
|
|
928
|
-
return isRecord(parsed) ? parsed : undefined;
|
|
929
|
-
}
|
|
930
|
-
function readPackagePluginConfig(packageName, manifest) {
|
|
931
|
-
const ttsc = manifest?.ttsc;
|
|
932
|
-
if (!isRecord(ttsc) || !("plugin" in ttsc)) {
|
|
933
|
-
return undefined;
|
|
934
|
-
}
|
|
935
|
-
const plugin = ttsc.plugin;
|
|
936
|
-
if (!isRecord(plugin) || Array.isArray(plugin)) {
|
|
937
|
-
throw new Error(`ttsc: package ${JSON.stringify(packageName)} declares invalid "ttsc.plugin"; expected an object`);
|
|
938
|
-
}
|
|
939
|
-
if (typeof plugin.transform !== "string" || plugin.transform.length === 0) {
|
|
940
|
-
throw new Error(`ttsc: package ${JSON.stringify(packageName)} declares invalid "ttsc.plugin.transform"; expected a non-empty string`);
|
|
941
|
-
}
|
|
942
|
-
return { ...plugin };
|
|
943
|
-
}
|
|
944
|
-
function isRecord(value) {
|
|
945
|
-
return typeof value === "object" && value !== null;
|
|
946
|
-
}
|
|
947
|
-
function orderNativePlugins(plugins) {
|
|
948
|
-
return [
|
|
949
|
-
...plugins.filter((plugin) => plugin.stage === "check"),
|
|
950
|
-
...plugins.filter((plugin) => plugin.stage === "transform"),
|
|
951
|
-
];
|
|
952
|
-
}
|
|
953
|
-
function loadPluginEntry(entry, base, request, effectiveEnv) {
|
|
954
|
-
const specifier = entry.transform;
|
|
955
|
-
if (typeof specifier !== "string" || specifier.length === 0) {
|
|
956
|
-
throw new Error(`ttsc: plugin entry is missing a string "transform" field`);
|
|
957
|
-
}
|
|
958
|
-
// `dirname`/`filename` are per-entry: each plugin entry resolves to its own
|
|
959
|
-
// descriptor module, so they are derived here from the resolved `request`
|
|
960
|
-
// rather than carried on the shared base context. They give factories a
|
|
961
|
-
// load-mode-independent stand-in for `__dirname`/`__filename`, which are
|
|
962
|
-
// undefined when a descriptor loads through ttsx or as ESM.
|
|
963
|
-
const context = {
|
|
964
|
-
...base,
|
|
965
|
-
dirname: node_path_1.default.dirname(request),
|
|
966
|
-
filename: request,
|
|
967
|
-
};
|
|
968
|
-
const loaded = loadPluginDescriptor(request, context, effectiveEnv);
|
|
969
|
-
if (isTtscPlugin(loaded.descriptor)) {
|
|
970
|
-
rejectJsTransformFunctions(specifier, loaded.descriptor);
|
|
971
|
-
return {
|
|
972
|
-
hostInputHashes: loaded.hostInputHashes,
|
|
973
|
-
hostInputRealpaths: loaded.hostInputRealpaths,
|
|
974
|
-
hostInputs: loaded.inputs,
|
|
975
|
-
plugin: loaded.descriptor,
|
|
976
|
-
};
|
|
977
|
-
}
|
|
978
|
-
throw new Error(`ttsc: plugin "${specifier}" does not export a valid ttsc plugin`);
|
|
979
|
-
}
|
|
980
|
-
/**
|
|
981
|
-
* Require a plugin descriptor entry, falling back to `ttsx` when Node cannot
|
|
982
|
-
* load a `.ts` source entry directly.
|
|
983
|
-
*
|
|
984
|
-
* A descriptor entry that is `.ts` source — especially a package root that
|
|
985
|
-
* re-exports a runtime alongside the descriptor — fails Node's loader on its
|
|
986
|
-
* first extensionless import or un-stripped type, and its imports can fan out
|
|
987
|
-
* into a whole transitive graph of source packages. Rather than reimplement
|
|
988
|
-
* that graph build, run the entry through `ttsx`, which already builds each
|
|
989
|
-
* `.ts` dependency on demand. The run is forced plugins-off across the whole
|
|
990
|
-
* graph (`--no-plugins` for the entry, `TTSC_PLUGIN_DESCRIPTOR_LOAD` for every
|
|
991
|
-
* dependency), so the descriptor's own — possibly self-hosting — transform
|
|
992
|
-
* never runs and cannot deadlock. A package that loads directly (a compiled
|
|
993
|
-
* descriptor, or Bun's native `.ts`) never reaches the fallback.
|
|
994
|
-
*/
|
|
995
|
-
function loadPluginDescriptor(request, context, effectiveEnv) {
|
|
996
|
-
try {
|
|
997
|
-
return loadCommonJsDescriptor(request, context, effectiveEnv);
|
|
998
|
-
}
|
|
999
|
-
catch (error) {
|
|
1000
|
-
if (!TS_SOURCE_PATTERN.test(request) ||
|
|
1001
|
-
!(error instanceof CommonJsDescriptorLoadError) ||
|
|
1002
|
-
!error.retryWithTtsx) {
|
|
1003
|
-
throw error;
|
|
1004
|
-
}
|
|
1005
|
-
const loaded = loadDescriptorViaTtsx(request, context, effectiveEnv);
|
|
1006
|
-
if (loaded === undefined) {
|
|
1007
|
-
throw error;
|
|
1008
|
-
}
|
|
1009
|
-
return loaded;
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
class CommonJsDescriptorLoadError extends Error {
|
|
1013
|
-
retryWithTtsx;
|
|
1014
|
-
constructor(message, retryWithTtsx) {
|
|
1015
|
-
super(message);
|
|
1016
|
-
this.retryWithTtsx = retryWithTtsx;
|
|
1017
|
-
this.name = "CommonJsDescriptorLoadError";
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
/**
|
|
1021
|
-
* Evaluate one CommonJS descriptor in a fresh runtime module-cache generation.
|
|
1022
|
-
*
|
|
1023
|
-
* Reloading an external descriptor dependency inside this process has no safe
|
|
1024
|
-
* cache operation: retaining it serves stale exports, while deleting it splits
|
|
1025
|
-
* any application singleton that required the same module first. Isolation
|
|
1026
|
-
* gives every descriptor load current bytes without mutating the host's cache.
|
|
1027
|
-
* The child invokes the factory before walking its graph, so lazy `require()`
|
|
1028
|
-
* calls are included, and a failed first load cannot strand poisoned children.
|
|
1029
|
-
*/
|
|
1030
|
-
function loadCommonJsDescriptor(request, context, effectiveEnv) {
|
|
1031
|
-
const runtime = pluginDescriptorRuntimeBinary(effectiveEnv);
|
|
1032
|
-
const runtimeCapabilities = (0, resolveNodeBinary_1.javascriptRuntimeCapabilities)(runtime, effectiveEnv, context.projectRoot);
|
|
1033
|
-
const node = !runtimeCapabilities.bun &&
|
|
1034
|
-
runtimeCapabilities.registerHooks &&
|
|
1035
|
-
runtimeCapabilities.executable !== undefined
|
|
1036
|
-
? runtimeCapabilities.executable
|
|
1037
|
-
: (0, resolveNodeBinary_1.resolveNodeBinary)(effectiveEnv, context.projectRoot);
|
|
1038
|
-
const dir = createEvaluationTempDir();
|
|
1039
|
-
const out = node_path_1.default.join(dir, "descriptor.json");
|
|
1040
|
-
const inputsOut = node_path_1.default.join(dir, "descriptor-inputs.ndjson");
|
|
1041
|
-
const diagnostics = node_path_1.default.join(dir, "descriptor.stderr");
|
|
1042
|
-
const bunConfig = node_path_1.default.join(dir, "bunfig.toml");
|
|
1043
|
-
const runtimeHookPreload = node_path_1.default.join(__dirname, "..", "..", "launcher", "internal", "runtimeHookPreload.js");
|
|
1044
|
-
try {
|
|
1045
|
-
if (runtimeCapabilities.bun) {
|
|
1046
|
-
// A descriptor receives exactly the environment supplied by its ttsc
|
|
1047
|
-
// invocation. Bun otherwise auto-loads project `.env*`, local/global
|
|
1048
|
-
// bunfig preloads and loaders, and may install a missing package from the
|
|
1049
|
-
// network. Those implicit authorities are neither part of Node's loader
|
|
1050
|
-
// contract nor reproducible host inputs, so isolate this evaluator from
|
|
1051
|
-
// them while retaining Bun's native TypeScript/module semantics.
|
|
1052
|
-
node_fs_1.default.writeFileSync(bunConfig, "", "utf8");
|
|
1053
|
-
}
|
|
1054
|
-
const diagnosticsFd = node_fs_1.default.openSync(diagnostics, "w");
|
|
1055
|
-
let result;
|
|
1056
|
-
try {
|
|
1057
|
-
result = node_child_process_1.default.spawnSync(runtime, [
|
|
1058
|
-
...(runtimeCapabilities.bun
|
|
1059
|
-
? [
|
|
1060
|
-
"--no-env-file",
|
|
1061
|
-
"--no-install",
|
|
1062
|
-
`--config=${bunConfig}`,
|
|
1063
|
-
`--tsconfig-override=${context.tsconfig}`,
|
|
1064
|
-
]
|
|
1065
|
-
: []),
|
|
1066
|
-
...(runtimeCapabilities.registerHooks
|
|
1067
|
-
? ["--require", runtimeHookPreload]
|
|
1068
|
-
: []),
|
|
1069
|
-
"-e",
|
|
1070
|
-
exports.COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE,
|
|
1071
|
-
], {
|
|
1072
|
-
cwd: context.projectRoot,
|
|
1073
|
-
env: {
|
|
1074
|
-
...effectiveEnv,
|
|
1075
|
-
// The direct evaluator may be Bun, but ttsx and native config
|
|
1076
|
-
// loaders require a real Node runtime with synchronous hooks.
|
|
1077
|
-
...(node === undefined ? {} : { TTSC_NODE_BINARY: node }),
|
|
1078
|
-
TTSC_TTSX_BINARY: effectiveEnv.TTSC_TTSX_BINARY ?? process.env.TTSC_TTSX_BINARY,
|
|
1079
|
-
TTSC_PLUGIN_CONTEXT: JSON.stringify(context),
|
|
1080
|
-
TTSC_PLUGIN_DESCRIPTOR_LOAD: "1",
|
|
1081
|
-
TTSC_PLUGIN_DESCRIPTOR_OUT: out,
|
|
1082
|
-
TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE: "1",
|
|
1083
|
-
TTSC_PLUGIN_DESCRIPTOR_INPUTS_OUT: inputsOut,
|
|
1084
|
-
TTSC_PLUGIN_ENTRY: request,
|
|
1085
|
-
},
|
|
1086
|
-
// Hold direct-evaluator diagnostics until its retry decision is
|
|
1087
|
-
// known. A successful ttsx fallback must not inherit the expected
|
|
1088
|
-
// loader stack from the discarded first attempt.
|
|
1089
|
-
stdio: ["ignore", diagnosticsFd, diagnosticsFd],
|
|
1090
|
-
windowsHide: true,
|
|
1091
|
-
});
|
|
1092
|
-
}
|
|
1093
|
-
finally {
|
|
1094
|
-
node_fs_1.default.closeSync(diagnosticsFd);
|
|
1095
|
-
}
|
|
1096
|
-
const failure = commonJsDescriptorProcessFailure(result, request);
|
|
1097
|
-
if (failure !== undefined) {
|
|
1098
|
-
const reason = (0, descriptorProcessFailure_1.pluginDescriptorFailureReason)(out);
|
|
1099
|
-
const retryWithTtsx = commonJsDescriptorRetryWithTtsx(out);
|
|
1100
|
-
if (!retryWithTtsx)
|
|
1101
|
-
replayEvaluationDiagnostics(diagnostics);
|
|
1102
|
-
throw new CommonJsDescriptorLoadError(reason === "" ? failure.message : `${failure.message}\n${reason}`, retryWithTtsx);
|
|
1103
|
-
}
|
|
1104
|
-
replayEvaluationDiagnostics(diagnostics);
|
|
1105
|
-
if (!node_fs_1.default.existsSync(out)) {
|
|
1106
|
-
throw new Error(`ttsc: plugin descriptor "${request}" evaluation in an isolated process produced no descriptor output.`);
|
|
1107
|
-
}
|
|
1108
|
-
let parsed;
|
|
1109
|
-
try {
|
|
1110
|
-
parsed = JSON.parse(node_fs_1.default.readFileSync(out, "utf8"));
|
|
1111
|
-
}
|
|
1112
|
-
catch (error) {
|
|
1113
|
-
throw new Error(`ttsc: plugin descriptor "${request}" produced invalid isolated output: ${errorMessage(error)}`);
|
|
1114
|
-
}
|
|
1115
|
-
if (!isRecord(parsed) || !Array.isArray(parsed.inputs)) {
|
|
1116
|
-
throw new Error(`ttsc: plugin descriptor "${request}" produced an invalid isolated result`);
|
|
1117
|
-
}
|
|
1118
|
-
const parsedHashes = isRecord(parsed.inputHashes)
|
|
1119
|
-
? Object.fromEntries(Object.entries(parsed.inputHashes).flatMap(([file, hash]) => typeof hash === "string" || hash === null
|
|
1120
|
-
? [[node_path_1.default.resolve(file), hash]]
|
|
1121
|
-
: []))
|
|
1122
|
-
: {};
|
|
1123
|
-
const parsedRealpaths = isRecord(parsed.inputRealpaths)
|
|
1124
|
-
? Object.fromEntries(Object.entries(parsed.inputRealpaths).flatMap(([file, realpath]) => (typeof realpath === "string" && node_path_1.default.isAbsolute(realpath)) ||
|
|
1125
|
-
realpath === null
|
|
1126
|
-
? [
|
|
1127
|
-
[
|
|
1128
|
-
node_path_1.default.resolve(file),
|
|
1129
|
-
realpath === null ? null : node_path_1.default.resolve(realpath),
|
|
1130
|
-
],
|
|
1131
|
-
]
|
|
1132
|
-
: []))
|
|
1133
|
-
: {};
|
|
1134
|
-
const stableParsedRealpaths = mergeObservedHostInputRealpaths(parsedRealpaths, realpathHostInputPaths(Object.keys(parsedRealpaths)));
|
|
1135
|
-
for (const input of parsed.inputs) {
|
|
1136
|
-
const absolute = node_path_1.default.resolve(String(input));
|
|
1137
|
-
if (!Object.prototype.hasOwnProperty.call(stableParsedRealpaths, absolute)) {
|
|
1138
|
-
delete parsedHashes[absolute];
|
|
1139
|
-
}
|
|
1140
|
-
}
|
|
1141
|
-
const runtimeInputs = readTtsxDescriptorInputs(inputsOut, request);
|
|
1142
|
-
return {
|
|
1143
|
-
descriptor: parsed.descriptor,
|
|
1144
|
-
hostInputHashes: omitUnstableHostInputHashes(mergeObservedHostInputHashes(parsedHashes, runtimeInputs.hostInputHashes), runtimeInputs.unstableInputs),
|
|
1145
|
-
hostInputRealpaths: mergeObservedHostInputRealpaths(stableParsedRealpaths, runtimeInputs.hostInputRealpaths),
|
|
1146
|
-
inputs: [
|
|
1147
|
-
...new Set([
|
|
1148
|
-
...parsed.inputs.map((input) => String(input)),
|
|
1149
|
-
...runtimeInputs.inputs,
|
|
1150
|
-
]),
|
|
1151
|
-
].sort(),
|
|
1152
|
-
};
|
|
1153
|
-
}
|
|
1154
|
-
finally {
|
|
1155
|
-
removeEvaluationTempDir(dir);
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1158
|
-
/** Validate plugin-declared universal host inputs. */
|
|
1159
|
-
function validatePluginHostInputs(plugin, index) {
|
|
1160
|
-
const label = plugin.name ?? `#${index + 1}`;
|
|
1161
|
-
if (plugin.hostInputs === undefined)
|
|
1162
|
-
return [];
|
|
1163
|
-
if (!Array.isArray(plugin.hostInputs)) {
|
|
1164
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputs"; expected an array of absolute paths`);
|
|
1165
|
-
}
|
|
1166
|
-
return plugin.hostInputs.map((file) => {
|
|
1167
|
-
if (typeof file !== "string" || !node_path_1.default.isAbsolute(file)) {
|
|
1168
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputs" entry ${JSON.stringify(file)}; expected an absolute path`);
|
|
1169
|
-
}
|
|
1170
|
-
return node_path_1.default.resolve(file);
|
|
1171
|
-
});
|
|
1172
|
-
}
|
|
1173
|
-
/** Validate descriptor-supplied evaluation fingerprints for host inputs. */
|
|
1174
|
-
function validatePluginHostInputHashes(plugin, index, hostInputs) {
|
|
1175
|
-
const label = plugin.name ?? `#${index + 1}`;
|
|
1176
|
-
if (plugin.hostInputHashes === undefined)
|
|
1177
|
-
return {};
|
|
1178
|
-
if (!isRecord(plugin.hostInputHashes) ||
|
|
1179
|
-
Array.isArray(plugin.hostInputHashes)) {
|
|
1180
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputHashes"; expected an object keyed by absolute hostInputs paths`);
|
|
1181
|
-
}
|
|
1182
|
-
const allowed = new Set(hostInputs.map((file) => node_path_1.default.resolve(file)));
|
|
1183
|
-
const output = {};
|
|
1184
|
-
for (const [file, hash] of Object.entries(plugin.hostInputHashes)) {
|
|
1185
|
-
if (!node_path_1.default.isAbsolute(file)) {
|
|
1186
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputHashes" key ${JSON.stringify(file)}; expected an absolute path`);
|
|
1187
|
-
}
|
|
1188
|
-
const absolute = node_path_1.default.resolve(file);
|
|
1189
|
-
if (!allowed.has(absolute)) {
|
|
1190
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} fingerprints ${JSON.stringify(file)} without listing it in "hostInputs"`);
|
|
1191
|
-
}
|
|
1192
|
-
if (hash !== null &&
|
|
1193
|
-
(typeof hash !== "string" || !/^[0-9a-f]{64}$/.test(hash))) {
|
|
1194
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid fingerprint for ${JSON.stringify(file)}; expected a lowercase SHA-256 digest or null`);
|
|
1195
|
-
}
|
|
1196
|
-
output[absolute] = hash;
|
|
1197
|
-
}
|
|
1198
|
-
return output;
|
|
1199
|
-
}
|
|
1200
|
-
/** Validate descriptor-supplied physical identities for host inputs. */
|
|
1201
|
-
function validatePluginHostInputRealpaths(plugin, index, hostInputs) {
|
|
1202
|
-
const label = plugin.name ?? `#${index + 1}`;
|
|
1203
|
-
if (plugin.hostInputRealpaths === undefined)
|
|
1204
|
-
return {};
|
|
1205
|
-
if (!isRecord(plugin.hostInputRealpaths) ||
|
|
1206
|
-
Array.isArray(plugin.hostInputRealpaths)) {
|
|
1207
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputRealpaths"; expected an object keyed by absolute hostInputs paths`);
|
|
1208
|
-
}
|
|
1209
|
-
const allowed = new Set(hostInputs.map((file) => node_path_1.default.resolve(file)));
|
|
1210
|
-
const output = {};
|
|
1211
|
-
for (const [file, realpath] of Object.entries(plugin.hostInputRealpaths)) {
|
|
1212
|
-
if (!node_path_1.default.isAbsolute(file)) {
|
|
1213
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid "hostInputRealpaths" key ${JSON.stringify(file)}; expected an absolute path`);
|
|
1214
|
-
}
|
|
1215
|
-
const absolute = node_path_1.default.resolve(file);
|
|
1216
|
-
if (!allowed.has(absolute)) {
|
|
1217
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} identifies ${JSON.stringify(file)} without listing it in "hostInputs"`);
|
|
1218
|
-
}
|
|
1219
|
-
if (realpath !== null &&
|
|
1220
|
-
(typeof realpath !== "string" || !node_path_1.default.isAbsolute(realpath))) {
|
|
1221
|
-
throw new Error(`ttsc: plugin ${JSON.stringify(label)} has invalid physical identity for ${JSON.stringify(file)}; expected an absolute realpath or null`);
|
|
1222
|
-
}
|
|
1223
|
-
output[absolute] =
|
|
1224
|
-
realpath === null ? null : node_path_1.default.resolve(realpath);
|
|
1225
|
-
}
|
|
1226
|
-
return output;
|
|
1227
|
-
}
|
|
1228
|
-
/** Merge snapshots and omit every path observed in contradictory states. */
|
|
1229
|
-
function mergeObservedHostInputHashes(...sources) {
|
|
1230
|
-
const conflicts = new Set();
|
|
1231
|
-
const output = {};
|
|
1232
|
-
for (const source of sources) {
|
|
1233
|
-
for (const [file, hash] of Object.entries(source)) {
|
|
1234
|
-
const absolute = node_path_1.default.resolve(file);
|
|
1235
|
-
if (conflicts.has(absolute))
|
|
1236
|
-
continue;
|
|
1237
|
-
if (Object.prototype.hasOwnProperty.call(output, absolute) &&
|
|
1238
|
-
output[absolute] !== hash) {
|
|
1239
|
-
delete output[absolute];
|
|
1240
|
-
conflicts.add(absolute);
|
|
1241
|
-
continue;
|
|
1242
|
-
}
|
|
1243
|
-
output[absolute] = hash;
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
|
-
return output;
|
|
1247
|
-
}
|
|
1248
|
-
const mergeObservedHostInputRealpaths = mergeObservedHostInputHashes;
|
|
1249
|
-
/** Prevent a later plugin claim from reviving an unstable loader input. */
|
|
1250
|
-
function mergePluginHostInputHashes(first, second, loaderInputs, pluginInputs) {
|
|
1251
|
-
const output = { ...first };
|
|
1252
|
-
const guarded = new Set(loaderInputs.map((file) => node_path_1.default.resolve(file)));
|
|
1253
|
-
for (const input of pluginInputs) {
|
|
1254
|
-
const absolute = node_path_1.default.resolve(input);
|
|
1255
|
-
if (!Object.prototype.hasOwnProperty.call(second, absolute)) {
|
|
1256
|
-
delete output[absolute];
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
for (const [file, hash] of Object.entries(second)) {
|
|
1260
|
-
const absolute = node_path_1.default.resolve(file);
|
|
1261
|
-
if (guarded.has(absolute) &&
|
|
1262
|
-
!Object.prototype.hasOwnProperty.call(first, absolute)) {
|
|
1263
|
-
continue;
|
|
1264
|
-
}
|
|
1265
|
-
if (Object.prototype.hasOwnProperty.call(output, absolute) &&
|
|
1266
|
-
output[absolute] !== hash) {
|
|
1267
|
-
delete output[absolute];
|
|
1268
|
-
continue;
|
|
1269
|
-
}
|
|
1270
|
-
output[absolute] = hash;
|
|
1271
|
-
}
|
|
1272
|
-
return output;
|
|
1273
|
-
}
|
|
1274
|
-
function omitUnstableHostInputHashes(hashes, unstableInputs) {
|
|
1275
|
-
for (const input of unstableInputs)
|
|
1276
|
-
delete hashes[node_path_1.default.resolve(input)];
|
|
1277
|
-
return hashes;
|
|
1278
|
-
}
|
|
1279
|
-
/** CommonJS evaluator emitted into a clean Node process for every load. */
|
|
1280
|
-
exports.COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE = [
|
|
1281
|
-
`const crypto = require("node:crypto");`,
|
|
1282
|
-
`const fs = require("node:fs");`,
|
|
1283
|
-
`const Module = require("node:module");`,
|
|
1284
|
-
`const path = require("node:path");`,
|
|
1285
|
-
`const { fileURLToPath } = require("node:url");`,
|
|
1286
|
-
`const out = process.env.TTSC_PLUGIN_DESCRIPTOR_OUT;`,
|
|
1287
|
-
`let retryWithTtsx = false;`,
|
|
1288
|
-
`const moduleLoadFailures = new WeakMap();`,
|
|
1289
|
-
`const moduleResolutionFailures = new WeakMap();`,
|
|
1290
|
-
`function existingFile(file) { try { return fs.statSync(file).isFile(); } catch { return false; } }`,
|
|
1291
|
-
`function shouldRetryWithTtsx(error) {`,
|
|
1292
|
-
` const loadFailure = error && (typeof error === "object" || typeof error === "function") ? moduleLoadFailures.get(error) : undefined;`,
|
|
1293
|
-
` if (loadFailure?.retryWithTtsx === true) return true;`,
|
|
1294
|
-
` const failure = error && (typeof error === "object" || typeof error === "function") ? moduleResolutionFailures.get(error) : undefined;`,
|
|
1295
|
-
` return failure?.retryWithTtsx === true;`,
|
|
1296
|
-
`}`,
|
|
1297
|
-
`try {`,
|
|
1298
|
-
` const request = process.env.TTSC_PLUGIN_ENTRY;`,
|
|
1299
|
-
` const context = JSON.parse(process.env.TTSC_PLUGIN_CONTEXT);`,
|
|
1300
|
-
` const inputs = new Set();`,
|
|
1301
|
-
` const inputHashes = new Map();`,
|
|
1302
|
-
` const inputRealpaths = new Map();`,
|
|
1303
|
-
` const inputSignatures = new Map();`,
|
|
1304
|
-
` const unstableInputHashes = new Set();`,
|
|
1305
|
-
` function missingPathError(error) { return error && (error.code === "ENOENT" || error.code === "ENOTDIR"); }`,
|
|
1306
|
-
` function inputMetadataSignature(file) {`,
|
|
1307
|
-
` const requested = path.resolve(file);`,
|
|
1308
|
-
` let current = requested;`,
|
|
1309
|
-
` for (;;) {`,
|
|
1310
|
-
` try {`,
|
|
1311
|
-
` const link = fs.lstatSync(current, { bigint: true });`,
|
|
1312
|
-
` let target = link;`,
|
|
1313
|
-
` if (link.isSymbolicLink()) {`,
|
|
1314
|
-
` try { target = fs.statSync(current, { bigint: true }); }`,
|
|
1315
|
-
` catch { return undefined; }`,
|
|
1316
|
-
` }`,
|
|
1317
|
-
` return [path.relative(current, requested), link.dev, link.ino, link.mode, link.size, link.mtimeNs, link.ctimeNs, target.dev, target.ino, target.mode, target.size, target.mtimeNs, target.ctimeNs].join(":");`,
|
|
1318
|
-
` } catch (error) {`,
|
|
1319
|
-
` if (!missingPathError(error)) return undefined;`,
|
|
1320
|
-
` const parent = path.dirname(current);`,
|
|
1321
|
-
` if (parent === current) return undefined;`,
|
|
1322
|
-
` current = parent;`,
|
|
1323
|
-
` }`,
|
|
1324
|
-
` }`,
|
|
1325
|
-
` }`,
|
|
1326
|
-
` function recordOneInput(file) {`,
|
|
1327
|
-
` file = path.resolve(file);`,
|
|
1328
|
-
` inputs.add(file);`,
|
|
1329
|
-
` if (unstableInputHashes.has(file)) return;`,
|
|
1330
|
-
` const beforeSignature = inputMetadataSignature(file);`,
|
|
1331
|
-
` let observedRealpath;`,
|
|
1332
|
-
` try { observedRealpath = fs.realpathSync.native(file); } catch { observedRealpath = null; }`,
|
|
1333
|
-
` let observed;`,
|
|
1334
|
-
` try { observed = fs.statSync(file).isDirectory() ? crypto.createHash("sha256").update("ttsc:host-input:directory\\0").digest("hex") : crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); } catch { observed = null; }`,
|
|
1335
|
-
` const afterSignature = inputMetadataSignature(file);`,
|
|
1336
|
-
` if (beforeSignature === undefined || afterSignature === undefined || beforeSignature !== afterSignature || (inputSignatures.has(file) && inputSignatures.get(file) !== afterSignature) || (inputRealpaths.has(file) && inputRealpaths.get(file) !== observedRealpath) || (inputHashes.has(file) && inputHashes.get(file) !== observed)) { inputHashes.delete(file); inputRealpaths.delete(file); inputSignatures.delete(file); unstableInputHashes.add(file); return; }`,
|
|
1337
|
-
` inputSignatures.set(file, afterSignature);`,
|
|
1338
|
-
` inputRealpaths.set(file, observedRealpath);`,
|
|
1339
|
-
` inputHashes.set(file, observed);`,
|
|
1340
|
-
` }`,
|
|
1341
|
-
` function recordInput(file) {`,
|
|
1342
|
-
` file = path.resolve(file);`,
|
|
1343
|
-
` recordOneInput(file);`,
|
|
1344
|
-
` const parsed = path.parse(file);`,
|
|
1345
|
-
` let current = parsed.root;`,
|
|
1346
|
-
` const relative = path.relative(parsed.root, file);`,
|
|
1347
|
-
` for (const segment of relative.split(path.sep).slice(0, -1)) {`,
|
|
1348
|
-
` if (segment === "") continue;`,
|
|
1349
|
-
` current = path.join(current, segment);`,
|
|
1350
|
-
` try {`,
|
|
1351
|
-
` if (fs.lstatSync(current).isSymbolicLink()) recordOneInput(current);`,
|
|
1352
|
-
` } catch {`,
|
|
1353
|
-
` break;`,
|
|
1354
|
-
` }`,
|
|
1355
|
-
` }`,
|
|
1356
|
-
` }`,
|
|
1357
|
-
` function asFile(resolved) {`,
|
|
1358
|
-
` if (typeof resolved !== "string") return undefined;`,
|
|
1359
|
-
` if (!resolved.startsWith("file:")) return path.isAbsolute(resolved) ? path.resolve(resolved) : undefined;`,
|
|
1360
|
-
` try { return path.resolve(fileURLToPath(resolved)); } catch { return undefined; }`,
|
|
1361
|
-
` }`,
|
|
1362
|
-
` function recordFile(resolved) {`,
|
|
1363
|
-
` const file = asFile(resolved);`,
|
|
1364
|
-
` if (file === undefined) return;`,
|
|
1365
|
-
` recordInput(file);`,
|
|
1366
|
-
` for (let directory = path.dirname(file);;) {`,
|
|
1367
|
-
` const manifest = path.join(directory, "package.json");`,
|
|
1368
|
-
` recordInput(manifest);`,
|
|
1369
|
-
` if (existingFile(manifest)) break;`,
|
|
1370
|
-
` const parent = path.dirname(directory);`,
|
|
1371
|
-
` if (parent === directory) break;`,
|
|
1372
|
-
` directory = parent;`,
|
|
1373
|
-
` }`,
|
|
1374
|
-
` }`,
|
|
1375
|
-
` function recordPackageManifests(file) {`,
|
|
1376
|
-
` for (let directory = path.dirname(path.resolve(file));;) {`,
|
|
1377
|
-
` const manifest = path.join(directory, "package.json");`,
|
|
1378
|
-
` recordInput(manifest);`,
|
|
1379
|
-
` if (existingFile(manifest)) return;`,
|
|
1380
|
-
` const parent = path.dirname(directory);`,
|
|
1381
|
-
` if (parent === directory) return;`,
|
|
1382
|
-
` directory = parent;`,
|
|
1383
|
-
` }`,
|
|
1384
|
-
` }`,
|
|
1385
|
-
` recordFile(request);`,
|
|
1386
|
-
` const moduleProbeExtensions = typeof globalThis.Bun === "object" ? [".tsx", ".jsx", ".ts", ".mjs", ".js", ".cjs", ".json"] : [".ts", ".tsx", ".mts", ".cts", ".js", ".mjs", ".cjs", ".json", ".node"];`,
|
|
1387
|
-
` const jsToTsProbeExtensions = new Map([[".js", [".ts", ".tsx"]], [".jsx", [".tsx"]], [".mjs", [".mts"]], [".cjs", [".cts"]]]);`,
|
|
1388
|
-
` function sourceSubstitutionCandidates(base) {`,
|
|
1389
|
-
` const extension = path.extname(base).toLowerCase();`,
|
|
1390
|
-
` const substitutions = jsToTsProbeExtensions.get(extension);`,
|
|
1391
|
-
` if (substitutions === undefined) return [];`,
|
|
1392
|
-
` const stem = base.slice(0, base.length - extension.length);`,
|
|
1393
|
-
` return substitutions.map((candidate) => stem + candidate);`,
|
|
1394
|
-
` }`,
|
|
1395
|
-
` function moduleCandidates(base) {`,
|
|
1396
|
-
` return [base, ...sourceSubstitutionCandidates(base), ...moduleProbeExtensions.map((extension) => base + extension), path.join(base, "package.json"), ...moduleProbeExtensions.map((extension) => path.join(base, "index" + extension))];`,
|
|
1397
|
-
` }`,
|
|
1398
|
-
` const recordedModuleBases = new Set();`,
|
|
1399
|
-
` function recordManifestTargets(value, directory, allowBare = false) {`,
|
|
1400
|
-
` if (typeof value === "string") {`,
|
|
1401
|
-
` if (value !== "" && (allowBare || value.startsWith("./") || value.startsWith("../"))) recordModuleCandidates(path.resolve(directory, value));`,
|
|
1402
|
-
` return;`,
|
|
1403
|
-
` }`,
|
|
1404
|
-
` if (Array.isArray(value)) { for (const item of value) recordManifestTargets(item, directory, allowBare); return; }`,
|
|
1405
|
-
` if (value && typeof value === "object") for (const item of Object.values(value)) recordManifestTargets(item, directory, allowBare);`,
|
|
1406
|
-
` }`,
|
|
1407
|
-
` function recordModuleCandidates(base) {`,
|
|
1408
|
-
` const resolvedBase = path.resolve(base);`,
|
|
1409
|
-
` if (recordedModuleBases.has(resolvedBase)) return;`,
|
|
1410
|
-
` recordedModuleBases.add(resolvedBase);`,
|
|
1411
|
-
` for (const candidate of moduleCandidates(resolvedBase)) recordInput(candidate);`,
|
|
1412
|
-
` try {`,
|
|
1413
|
-
` const manifest = JSON.parse(fs.readFileSync(path.join(resolvedBase, "package.json"), "utf8").replace(/^\uFEFF/, ""));`,
|
|
1414
|
-
` recordManifestTargets(manifest.exports, resolvedBase);`,
|
|
1415
|
-
` recordManifestTargets(manifest.module, resolvedBase, true);`,
|
|
1416
|
-
` recordManifestTargets(manifest.main, resolvedBase, true);`,
|
|
1417
|
-
` } catch {}`,
|
|
1418
|
-
` }`,
|
|
1419
|
-
` function candidateSelected(base, selected) {`,
|
|
1420
|
-
` if (selected === undefined) return false;`,
|
|
1421
|
-
` for (const candidate of moduleCandidates(base)) {`,
|
|
1422
|
-
` try {`,
|
|
1423
|
-
` const canonical = fs.realpathSync.native(candidate);`,
|
|
1424
|
-
` const relative = path.relative(canonical, selected);`,
|
|
1425
|
-
` if (relative === "" || (fs.statSync(canonical).isDirectory() && relative !== ".." && !relative.startsWith(".." + path.sep) && !path.isAbsolute(relative))) return true;`,
|
|
1426
|
-
` } catch {}`,
|
|
1427
|
-
` }`,
|
|
1428
|
-
` return false;`,
|
|
1429
|
-
` }`,
|
|
1430
|
-
` function localBases(specifier, parentFile) {`,
|
|
1431
|
-
` if (specifier.startsWith("file:")) return [fileURLToPath(specifier)];`,
|
|
1432
|
-
` const directory = path.dirname(parentFile);`,
|
|
1433
|
-
` const raw = path.resolve(directory, specifier);`,
|
|
1434
|
-
` const suffixStart = specifier.search(/[?#]/);`,
|
|
1435
|
-
` if (suffixStart === -1) return [raw];`,
|
|
1436
|
-
` const pathname = specifier.slice(0, suffixStart);`,
|
|
1437
|
-
` return pathname === "" ? [raw] : [...new Set([raw, path.resolve(directory, pathname)])];`,
|
|
1438
|
-
` }`,
|
|
1439
|
-
` function recordResolutionCandidates(specifier, parent, resolved) {`,
|
|
1440
|
-
` const parentFile = asFile(parent);`,
|
|
1441
|
-
` if (typeof specifier !== "string" || parentFile === undefined) return;`,
|
|
1442
|
-
` let selected;`,
|
|
1443
|
-
` try { const file = asFile(resolved); selected = file === undefined ? undefined : fs.realpathSync.native(file); } catch {}`,
|
|
1444
|
-
` if (specifier.startsWith(".") || path.isAbsolute(specifier) || specifier.startsWith("file:")) {`,
|
|
1445
|
-
` try {`,
|
|
1446
|
-
` for (const base of localBases(specifier, parentFile)) {`,
|
|
1447
|
-
` recordPackageManifests(base);`,
|
|
1448
|
-
` let exact = false;`,
|
|
1449
|
-
` try { exact = selected === undefined ? fs.statSync(base).isFile() : fs.realpathSync.native(base) === selected; } catch {}`,
|
|
1450
|
-
` if (exact) recordInput(base);`,
|
|
1451
|
-
` if (!exact) recordModuleCandidates(base);`,
|
|
1452
|
-
` }`,
|
|
1453
|
-
` } catch {}`,
|
|
1454
|
-
` return;`,
|
|
1455
|
-
` }`,
|
|
1456
|
-
` if (Module.isBuiltin(specifier) || specifier.startsWith("#")) return;`,
|
|
1457
|
-
` const parts = specifier.split("/");`,
|
|
1458
|
-
` const packageParts = parts[0].startsWith("@") ? parts.slice(0, 2) : parts.slice(0, 1);`,
|
|
1459
|
-
` if (packageParts.some((part) => part === undefined || part === "")) return;`,
|
|
1460
|
-
` const packageName = packageParts.join("/");`,
|
|
1461
|
-
` const subpath = parts.slice(packageParts.length);`,
|
|
1462
|
-
` const searchPaths = Module.createRequire(parentFile).resolve.paths(specifier) ?? [];`,
|
|
1463
|
-
` for (const searchPath of searchPaths) {`,
|
|
1464
|
-
` const packageDirectory = path.join(searchPath, packageName);`,
|
|
1465
|
-
` recordModuleCandidates(packageDirectory);`,
|
|
1466
|
-
` if (subpath.length !== 0) recordModuleCandidates(path.join(packageDirectory, ...subpath));`,
|
|
1467
|
-
` if (candidateSelected(packageDirectory, selected)) break;`,
|
|
1468
|
-
` }`,
|
|
1469
|
-
` }`,
|
|
1470
|
-
` function scanBunModuleGraph(entry) {`,
|
|
1471
|
-
` if (typeof globalThis.Bun !== "object" || typeof globalThis.Bun.Transpiler !== "function") return;`,
|
|
1472
|
-
` const scanned = new Set();`,
|
|
1473
|
-
` function scan(file) {`,
|
|
1474
|
-
` file = asFile(file);`,
|
|
1475
|
-
` if (file === undefined) return;`,
|
|
1476
|
-
` let canonical;`,
|
|
1477
|
-
` try { canonical = fs.realpathSync.native(file); } catch { return; }`,
|
|
1478
|
-
` if (scanned.has(canonical)) return;`,
|
|
1479
|
-
` scanned.add(canonical);`,
|
|
1480
|
-
` const extension = path.extname(canonical).toLowerCase();`,
|
|
1481
|
-
` if (![".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"].includes(extension)) return;`,
|
|
1482
|
-
` const loader = extension === ".tsx" ? "tsx" : extension === ".jsx" ? "jsx" : [".ts", ".mts", ".cts"].includes(extension) ? "ts" : "js";`,
|
|
1483
|
-
` let imports;`,
|
|
1484
|
-
` try {`,
|
|
1485
|
-
` const source = fs.readFileSync(canonical, "utf8");`,
|
|
1486
|
-
` imports = new globalThis.Bun.Transpiler({ loader }).scan(source).imports;`,
|
|
1487
|
-
` } catch { return; }`,
|
|
1488
|
-
` for (const imported of imports) {`,
|
|
1489
|
-
` const specifier = imported && imported.path;`,
|
|
1490
|
-
` if (typeof specifier !== "string" || specifier.startsWith("node:") || Module.isBuiltin(specifier)) continue;`,
|
|
1491
|
-
` recordResolutionCandidates(specifier, canonical, undefined);`,
|
|
1492
|
-
` try {`,
|
|
1493
|
-
` const resolved = globalThis.Bun.resolveSync(specifier, path.dirname(canonical));`,
|
|
1494
|
-
` recordResolutionCandidates(specifier, canonical, resolved);`,
|
|
1495
|
-
` recordFile(resolved);`,
|
|
1496
|
-
` scan(resolved);`,
|
|
1497
|
-
` } catch {`,
|
|
1498
|
-
` // The real descriptor load below owns user-facing resolution errors.`,
|
|
1499
|
-
` }`,
|
|
1500
|
-
` }`,
|
|
1501
|
-
` }`,
|
|
1502
|
-
` scan(entry);`,
|
|
1503
|
-
` }`,
|
|
1504
|
-
` if (typeof Module.registerHooks === "function") {`,
|
|
1505
|
-
` Module.registerHooks({`,
|
|
1506
|
-
` load(url, loadContext, nextLoad) {`,
|
|
1507
|
-
` try { return nextLoad(url, loadContext); }`,
|
|
1508
|
-
` catch (error) {`,
|
|
1509
|
-
` if (error && (typeof error === "object" || typeof error === "function")) moduleLoadFailures.set(error, { retryWithTtsx: error.code === "ERR_UNKNOWN_FILE_EXTENSION" });`,
|
|
1510
|
-
` throw error;`,
|
|
1511
|
-
` }`,
|
|
1512
|
-
` },`,
|
|
1513
|
-
` resolve(specifier, resolveContext, nextResolve) {`,
|
|
1514
|
-
` recordResolutionCandidates(specifier, resolveContext.parentURL, undefined);`,
|
|
1515
|
-
` let resolved;`,
|
|
1516
|
-
` try {`,
|
|
1517
|
-
` resolved = nextResolve(specifier, resolveContext);`,
|
|
1518
|
-
` } catch (error) {`,
|
|
1519
|
-
` if (error && (typeof error === "object" || typeof error === "function")) {`,
|
|
1520
|
-
` const parent = asFile(resolveContext.parentURL);`,
|
|
1521
|
-
` const anchor = typeof parent === "string" ? parent : request;`,
|
|
1522
|
-
` const candidate = specifier.startsWith(".") && path.extname(specifier) === "" ? path.resolve(path.dirname(anchor), specifier) : undefined;`,
|
|
1523
|
-
` const retryWithTtsx = candidate !== undefined && [".ts", ".cts", ".mts", ".tsx"].some((extension) => existingFile(candidate + extension) || existingFile(path.join(candidate, "index" + extension)));`,
|
|
1524
|
-
` moduleResolutionFailures.set(error, { retryWithTtsx });`,
|
|
1525
|
-
` }`,
|
|
1526
|
-
` throw error;`,
|
|
1527
|
-
` }`,
|
|
1528
|
-
` const url = typeof resolved === "string" ? resolved : resolved && resolved.url;`,
|
|
1529
|
-
` recordResolutionCandidates(specifier, resolveContext.parentURL, url);`,
|
|
1530
|
-
` recordFile(url);`,
|
|
1531
|
-
` return resolved;`,
|
|
1532
|
-
` },`,
|
|
1533
|
-
` });`,
|
|
1534
|
-
` }`,
|
|
1535
|
-
` if (typeof globalThis.Bun === "object" && typeof globalThis.Bun.plugin === "function") {`,
|
|
1536
|
-
` let insideBunResolve = false;`,
|
|
1537
|
-
` globalThis.Bun.plugin({`,
|
|
1538
|
-
` name: "ttsc-plugin-descriptor-inputs",`,
|
|
1539
|
-
` setup(build) {`,
|
|
1540
|
-
` build.onResolve({ filter: /.*/ }, (args) => {`,
|
|
1541
|
-
` if (insideBunResolve || args.path.startsWith("node:")) return;`,
|
|
1542
|
-
` try {`,
|
|
1543
|
-
` insideBunResolve = true;`,
|
|
1544
|
-
` const importer = args.importer && args.importer.startsWith("file:") ? fileURLToPath(args.importer) : args.importer;`,
|
|
1545
|
-
` const from = importer ? path.dirname(importer) : process.cwd();`,
|
|
1546
|
-
` recordResolutionCandidates(args.path, importer, undefined);`,
|
|
1547
|
-
` const resolved = globalThis.Bun.resolveSync(args.path, from);`,
|
|
1548
|
-
` recordResolutionCandidates(args.path, importer, resolved);`,
|
|
1549
|
-
` recordFile(resolved);`,
|
|
1550
|
-
` } catch {`,
|
|
1551
|
-
` // The real resolver below owns user-facing resolution errors.`,
|
|
1552
|
-
` } finally {`,
|
|
1553
|
-
` insideBunResolve = false;`,
|
|
1554
|
-
` }`,
|
|
1555
|
-
` });`,
|
|
1556
|
-
` },`,
|
|
1557
|
-
` });`,
|
|
1558
|
-
` }`,
|
|
1559
|
-
` scanBunModuleGraph(request);`,
|
|
1560
|
-
` let mod;`,
|
|
1561
|
-
` try {`,
|
|
1562
|
-
` mod = require(request);`,
|
|
1563
|
-
` } catch (error) {`,
|
|
1564
|
-
` retryWithTtsx = shouldRetryWithTtsx(error);`,
|
|
1565
|
-
` throw error;`,
|
|
1566
|
-
` }`,
|
|
1567
|
-
` const candidate = mod.createTtscPlugin ?? mod.default ?? mod.plugin ?? mod;`,
|
|
1568
|
-
` const descriptor = typeof candidate === "function" ? candidate(context) : candidate;`,
|
|
1569
|
-
` if (descriptor && typeof descriptor === "object" && ("transformSource" in descriptor || "transformOutput" in descriptor)) {`,
|
|
1570
|
-
` throw new Error("ttsc: plugin descriptor declares unsupported JS transform functions; declare a native backend instead");`,
|
|
1571
|
-
` }`,
|
|
1572
|
-
// Serialize the descriptor while the module-resolution hooks are still
|
|
1573
|
-
// collecting. Getters are allowed by JavaScript's object model and can
|
|
1574
|
-
// lazily require a config; snapshotting inputs first would silently omit
|
|
1575
|
-
// that influence.
|
|
1576
|
-
` const serializedDescriptor = JSON.stringify(descriptor);`,
|
|
1577
|
-
` for (const input of [...inputs]) recordInput(input);`,
|
|
1578
|
-
` const payload = { inputHashes: Object.fromEntries(inputHashes), inputRealpaths: Object.fromEntries(inputRealpaths), inputs: [...inputs].sort() };`,
|
|
1579
|
-
` if (serializedDescriptor !== undefined) payload.descriptor = JSON.parse(serializedDescriptor);`,
|
|
1580
|
-
` fs.writeFileSync(out, JSON.stringify(payload));`,
|
|
1581
|
-
`} catch (error) {`,
|
|
1582
|
-
` const message = error instanceof Error ? error.message : String(error);`,
|
|
1583
|
-
` const stack = error instanceof Error && error.stack ? error.stack : String(error);`,
|
|
1584
|
-
` try {`,
|
|
1585
|
-
` fs.writeFileSync(out, JSON.stringify({ __ttscLoaderError: message, __ttscRetryWithTtsx: retryWithTtsx }));`,
|
|
1586
|
-
` } catch {}`,
|
|
1587
|
-
` try { process.stderr.write(stack + "\\n"); } catch {}`,
|
|
1588
|
-
` process.exit(1);`,
|
|
1589
|
-
`}`,
|
|
1590
|
-
``,
|
|
1591
|
-
].join("\n");
|
|
1592
|
-
/** Read the isolated loader's explicit retry classification. */
|
|
1593
|
-
function commonJsDescriptorRetryWithTtsx(file) {
|
|
1594
|
-
try {
|
|
1595
|
-
const parsed = JSON.parse(node_fs_1.default.readFileSync(file, "utf8"));
|
|
1596
|
-
return isRecord(parsed) && parsed.__ttscRetryWithTtsx === true;
|
|
1597
|
-
}
|
|
1598
|
-
catch {
|
|
1599
|
-
return false;
|
|
1600
|
-
}
|
|
1601
|
-
}
|
|
1602
|
-
function commonJsDescriptorProcessFailure(result, request) {
|
|
1603
|
-
if (result.error !== undefined) {
|
|
1604
|
-
return new Error(`ttsc: failed to launch an isolated process for plugin descriptor "${request}": ${result.error.message}`);
|
|
1605
|
-
}
|
|
1606
|
-
if (result.signal !== null) {
|
|
1607
|
-
return new Error(`ttsc: plugin descriptor "${request}" isolated evaluation was killed by signal ${result.signal}.`);
|
|
1608
|
-
}
|
|
1609
|
-
if (result.status !== 0) {
|
|
1610
|
-
return new Error(`ttsc: plugin descriptor "${request}" isolated evaluation failed with exit code ${String(result.status)}`);
|
|
1611
|
-
}
|
|
1612
|
-
return undefined;
|
|
1613
|
-
}
|
|
1614
|
-
const TS_SOURCE_PATTERN = /\.(?:[cm]?ts|tsx)$/i;
|
|
1615
|
-
/**
|
|
1616
|
-
* The descriptor shim's emitted source.
|
|
1617
|
-
*
|
|
1618
|
-
* Exported so a regression can inspect the same bytes ttsx executes. This
|
|
1619
|
-
* template consumes its own escapes, so reading this file's text instead would
|
|
1620
|
-
* check characters no consumer ever sees — and a dropped backslash turns an
|
|
1621
|
-
* escape into the character it was escaping: a raw line terminator inside a
|
|
1622
|
-
* string literal, which stops the shim parsing and takes every descriptor load
|
|
1623
|
-
* with it. Its `@ttsc/lint` twin has carried that guard since the same defect
|
|
1624
|
-
* shipped there.
|
|
1625
|
-
*/
|
|
1626
|
-
exports.PLUGIN_DESCRIPTOR_SHIM_SOURCE = [
|
|
1627
|
-
`// @ts-nocheck`,
|
|
1628
|
-
`import { writeFileSync } from "node:fs";`,
|
|
1629
|
-
`import { pathToFileURL } from "node:url";`,
|
|
1630
|
-
// The import is inside the try, not above it. A descriptor that cannot be
|
|
1631
|
-
// found, or whose module body throws, fails exactly where a descriptor
|
|
1632
|
-
// whose factory throws does, and a caller deserves the same reason for
|
|
1633
|
-
// both — "Cannot find module ./missing" is as actionable as anything the
|
|
1634
|
-
// factory could have said.
|
|
1635
|
-
`try {`,
|
|
1636
|
-
// Runtime hooks are installed before this shim loads. Arm their internal
|
|
1637
|
-
// side channel only for the descriptor import itself, after this shim's own
|
|
1638
|
-
// imports have resolved, so ttsc implementation files never become project
|
|
1639
|
-
// cache inputs.
|
|
1640
|
-
` process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE = "1";`,
|
|
1641
|
-
` const mod = await import(pathToFileURL(process.env.TTSC_PLUGIN_ENTRY).href);`,
|
|
1642
|
-
` const context = JSON.parse(process.env.TTSC_PLUGIN_CONTEXT);`,
|
|
1643
|
-
` const candidate = mod.createTtscPlugin ?? mod.default ?? mod.plugin ?? mod;`,
|
|
1644
|
-
` const descriptor =`,
|
|
1645
|
-
` typeof candidate === "function" ? candidate(context) : candidate;`,
|
|
1646
|
-
` writeFileSync(process.env.TTSC_PLUGIN_DESCRIPTOR_OUT, JSON.stringify(descriptor));`,
|
|
1647
|
-
`} catch (error) {`,
|
|
1648
|
-
// The stack streams to the user's stderr on its own. This puts the reason
|
|
1649
|
-
// a caller can act on into the channel the parent already reads, so the
|
|
1650
|
-
// failure is not reduced to a bare exit status.
|
|
1651
|
-
// The escape is doubled on purpose: this template consumes one level, so
|
|
1652
|
-
// `\\n` here is what puts the two-character escape into the emitted shim.
|
|
1653
|
-
// A single `\n` would put a raw line terminator inside a string literal,
|
|
1654
|
-
// and the shim would stop parsing — taking every descriptor load with it.
|
|
1655
|
-
` process.stderr.write((error instanceof Error && error.stack ? error.stack : String(error)) + "\\n");`,
|
|
1656
|
-
` try {`,
|
|
1657
|
-
` writeFileSync(process.env.TTSC_PLUGIN_DESCRIPTOR_OUT, JSON.stringify({ __ttscLoaderError: error instanceof Error ? error.message : String(error) }));`,
|
|
1658
|
-
` } catch {}`,
|
|
1659
|
-
` process.exit(1);`,
|
|
1660
|
-
`}`,
|
|
1661
|
-
``,
|
|
1662
|
-
].join("\n");
|
|
1663
|
-
/**
|
|
1664
|
-
* Evaluate a `.ts` plugin descriptor entry in a child `ttsx` process and return
|
|
1665
|
-
* the descriptor it produces. A generated shim imports the entry, invokes its
|
|
1666
|
-
* factory with `context`, and writes the descriptor as JSON; `ttsx` runs the
|
|
1667
|
-
* shim with plugins disabled across the whole graph. Returns `undefined` when
|
|
1668
|
-
* `ttsx` is unavailable, so the caller can rethrow the original load error.
|
|
1669
|
-
*/
|
|
1670
|
-
function loadDescriptorViaTtsx(request, context, effectiveEnv) {
|
|
1671
|
-
// Binary discovery prefers the instance environment, then the ambient
|
|
1672
|
-
// process.env (where `withPluginLoaderEnv` injects ttsc's own node/ttsx paths
|
|
1673
|
-
// just before this runs), then the running interpreter.
|
|
1674
|
-
const node = (0, resolveNodeBinary_1.resolveNodeBinary)(effectiveEnv, context.projectRoot);
|
|
1675
|
-
const ttsx = effectiveEnv.TTSC_TTSX_BINARY ?? process.env.TTSC_TTSX_BINARY;
|
|
1676
|
-
if (node === undefined || ttsx === undefined || ttsx.length === 0) {
|
|
1677
|
-
return undefined;
|
|
1678
|
-
}
|
|
1679
|
-
const dir = createEvaluationTempDir();
|
|
1680
|
-
const out = node_path_1.default.join(dir, "descriptor.json");
|
|
1681
|
-
const inputsOut = node_path_1.default.join(dir, "descriptor-inputs.ndjson");
|
|
1682
|
-
const shim = node_path_1.default.join(dir, "load-descriptor.mts");
|
|
1683
|
-
// ttsx type-checks and builds the shim's own project, so it needs a tsconfig
|
|
1684
|
-
// to anchor on; a minimal one is enough (the shim is `@ts-nocheck`).
|
|
1685
|
-
try {
|
|
1686
|
-
node_fs_1.default.writeFileSync(node_path_1.default.join(dir, "tsconfig.json"), JSON.stringify({
|
|
1687
|
-
compilerOptions: {
|
|
1688
|
-
module: "nodenext",
|
|
1689
|
-
moduleResolution: "nodenext",
|
|
1690
|
-
skipLibCheck: true,
|
|
1691
|
-
target: "es2022",
|
|
1692
|
-
},
|
|
1693
|
-
}));
|
|
1694
|
-
node_fs_1.default.writeFileSync(shim, exports.PLUGIN_DESCRIPTOR_SHIM_SOURCE);
|
|
1695
|
-
const result = node_child_process_1.default.spawnSync(node, [ttsx, "--no-plugins", shim], {
|
|
1696
|
-
cwd: context.projectRoot,
|
|
1697
|
-
encoding: "utf8",
|
|
1698
|
-
env: {
|
|
1699
|
-
...effectiveEnv,
|
|
1700
|
-
// Carry ttsc's own node/ttsx locators explicitly so the child (which
|
|
1701
|
-
// may recurse into further descriptor loads) finds them even when the
|
|
1702
|
-
// instance-env snapshot predates `withPluginLoaderEnv`.
|
|
1703
|
-
TTSC_NODE_BINARY: node,
|
|
1704
|
-
TTSC_TTSX_BINARY: ttsx,
|
|
1705
|
-
TTSC_PLUGIN_CONTEXT: JSON.stringify({
|
|
1706
|
-
binary: context.binary,
|
|
1707
|
-
cwd: context.cwd,
|
|
1708
|
-
dirname: context.dirname,
|
|
1709
|
-
filename: context.filename,
|
|
1710
|
-
plugin: context.plugin,
|
|
1711
|
-
pluginConfigDir: context.pluginConfigDir,
|
|
1712
|
-
projectRoot: context.projectRoot,
|
|
1713
|
-
tsconfig: context.tsconfig,
|
|
1714
|
-
}),
|
|
1715
|
-
TTSC_PLUGIN_DESCRIPTOR_LOAD: "1",
|
|
1716
|
-
TTSC_PLUGIN_DESCRIPTOR_OUT: out,
|
|
1717
|
-
TTSC_PLUGIN_DESCRIPTOR_INPUTS_OUT: inputsOut,
|
|
1718
|
-
TTSC_PLUGIN_ENTRY: request,
|
|
1719
|
-
},
|
|
1720
|
-
// Both child streams are human output, and they go straight to this
|
|
1721
|
-
// process's stderr as they are written. The descriptor itself travels
|
|
1722
|
-
// through a file, so nothing here needs collecting — and collecting it
|
|
1723
|
-
// only to replay it afterwards is what forced an invented output ceiling.
|
|
1724
|
-
stdio: ["ignore", 2, 2],
|
|
1725
|
-
windowsHide: true,
|
|
1726
|
-
});
|
|
1727
|
-
const processFailure = (0, descriptorProcessFailure_1.pluginDescriptorProcessFailure)(result, request);
|
|
1728
|
-
if (processFailure) {
|
|
1729
|
-
// The descriptor's stack already reached the user's stderr as it ran.
|
|
1730
|
-
// What it could not put there is a reason a caller can act on, so that
|
|
1731
|
-
// arrives through the result file instead.
|
|
1732
|
-
const reason = (0, descriptorProcessFailure_1.pluginDescriptorFailureReason)(out);
|
|
1733
|
-
throw reason === ""
|
|
1734
|
-
? processFailure
|
|
1735
|
-
: new Error(`${processFailure.message}
|
|
1736
|
-
${reason}`);
|
|
1737
|
-
}
|
|
1738
|
-
if (!node_fs_1.default.existsSync(out)) {
|
|
1739
|
-
throw new Error(`ttsc: plugin descriptor "${request}" evaluation through ttsx produced no descriptor output.`);
|
|
1740
|
-
}
|
|
1741
|
-
const text = node_fs_1.default.readFileSync(out, "utf8");
|
|
1742
|
-
try {
|
|
1743
|
-
const inputSnapshot = readTtsxDescriptorInputs(inputsOut, request);
|
|
1744
|
-
return {
|
|
1745
|
-
descriptor: JSON.parse(text),
|
|
1746
|
-
hostInputHashes: omitUnstableHostInputHashes(inputSnapshot.hostInputHashes, inputSnapshot.unstableInputs),
|
|
1747
|
-
hostInputRealpaths: inputSnapshot.hostInputRealpaths,
|
|
1748
|
-
inputs: inputSnapshot.inputs,
|
|
1749
|
-
};
|
|
1750
|
-
}
|
|
1751
|
-
catch (error) {
|
|
1752
|
-
throw new Error(`ttsc: plugin descriptor "${request}" produced invalid JSON: ${errorMessage(error)}`);
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1755
|
-
finally {
|
|
1756
|
-
removeEvaluationTempDir(dir);
|
|
1757
|
-
}
|
|
1758
|
-
}
|
|
1759
|
-
/**
|
|
1760
|
-
* Expand the ttsx runtime's selected module edges into the same exact and
|
|
1761
|
-
* missing resolution inputs used by the direct isolated evaluator.
|
|
1762
|
-
*/
|
|
1763
|
-
function readTtsxDescriptorInputs(file, request) {
|
|
1764
|
-
const inputs = new Set([node_path_1.default.resolve(request)]);
|
|
1765
|
-
const hashes = new Map();
|
|
1766
|
-
const realpaths = new Map();
|
|
1767
|
-
const signatures = new Map();
|
|
1768
|
-
const unstableInputs = new Set();
|
|
1769
|
-
let text;
|
|
1770
|
-
try {
|
|
1771
|
-
text = node_fs_1.default.readFileSync(file, "utf8");
|
|
1772
|
-
}
|
|
1773
|
-
catch {
|
|
1774
|
-
return {
|
|
1775
|
-
hostInputHashes: {},
|
|
1776
|
-
hostInputRealpaths: {},
|
|
1777
|
-
inputs: [...inputs],
|
|
1778
|
-
unstableInputs: [],
|
|
1779
|
-
};
|
|
1780
|
-
}
|
|
1781
|
-
for (const line of text.split(/\r?\n/)) {
|
|
1782
|
-
if (line.trim() === "")
|
|
1783
|
-
continue;
|
|
1784
|
-
let record;
|
|
1785
|
-
try {
|
|
1786
|
-
record = JSON.parse(line);
|
|
1787
|
-
}
|
|
1788
|
-
catch {
|
|
1789
|
-
continue;
|
|
1790
|
-
}
|
|
1791
|
-
if (typeof record.resolved === "string") {
|
|
1792
|
-
const resolved = node_path_1.default.resolve(record.resolved);
|
|
1793
|
-
inputs.add(resolved);
|
|
1794
|
-
if (record.unstable === true) {
|
|
1795
|
-
hashes.delete(resolved);
|
|
1796
|
-
realpaths.delete(resolved);
|
|
1797
|
-
signatures.delete(resolved);
|
|
1798
|
-
unstableInputs.add(resolved);
|
|
1799
|
-
continue;
|
|
1800
|
-
}
|
|
1801
|
-
if (typeof record.signature !== "string" ||
|
|
1802
|
-
(signatures.has(resolved) &&
|
|
1803
|
-
signatures.get(resolved) !== record.signature)) {
|
|
1804
|
-
hashes.delete(resolved);
|
|
1805
|
-
realpaths.delete(resolved);
|
|
1806
|
-
signatures.delete(resolved);
|
|
1807
|
-
unstableInputs.add(resolved);
|
|
1808
|
-
continue;
|
|
1809
|
-
}
|
|
1810
|
-
signatures.set(resolved, record.signature);
|
|
1811
|
-
if ((typeof record.realpath === "string" &&
|
|
1812
|
-
node_path_1.default.isAbsolute(record.realpath)) ||
|
|
1813
|
-
record.realpath === null) {
|
|
1814
|
-
const observed = record.realpath === null ? null : node_path_1.default.resolve(record.realpath);
|
|
1815
|
-
if (realpaths.has(resolved) && realpaths.get(resolved) !== observed) {
|
|
1816
|
-
hashes.delete(resolved);
|
|
1817
|
-
realpaths.delete(resolved);
|
|
1818
|
-
signatures.delete(resolved);
|
|
1819
|
-
unstableInputs.add(resolved);
|
|
1820
|
-
continue;
|
|
1821
|
-
}
|
|
1822
|
-
realpaths.set(resolved, observed);
|
|
1823
|
-
}
|
|
1824
|
-
if (typeof record.hash === "string" || record.hash === null) {
|
|
1825
|
-
if (unstableInputs.has(resolved)) {
|
|
1826
|
-
// Keep a previously observed contradiction unstable.
|
|
1827
|
-
}
|
|
1828
|
-
else if (hashes.has(resolved) &&
|
|
1829
|
-
hashes.get(resolved) !== record.hash) {
|
|
1830
|
-
hashes.delete(resolved);
|
|
1831
|
-
realpaths.delete(resolved);
|
|
1832
|
-
signatures.delete(resolved);
|
|
1833
|
-
unstableInputs.add(resolved);
|
|
1834
|
-
}
|
|
1835
|
-
else {
|
|
1836
|
-
hashes.set(resolved, record.hash);
|
|
1837
|
-
}
|
|
1838
|
-
}
|
|
1839
|
-
}
|
|
1840
|
-
if (typeof record.specifier === "string" &&
|
|
1841
|
-
typeof record.parent === "string") {
|
|
1842
|
-
for (const candidate of collectModuleResolutionCandidates(record.specifier, record.parent, record.resolved)) {
|
|
1843
|
-
inputs.add(node_path_1.default.resolve(candidate));
|
|
1844
|
-
}
|
|
1845
|
-
}
|
|
1846
|
-
}
|
|
1847
|
-
for (const [resolved, observed] of realpaths) {
|
|
1848
|
-
if (realpathHostInput(resolved) === observed &&
|
|
1849
|
-
signatures.get(resolved) === hostInputMetadataSignature(resolved)) {
|
|
1850
|
-
continue;
|
|
1851
|
-
}
|
|
1852
|
-
hashes.delete(resolved);
|
|
1853
|
-
realpaths.delete(resolved);
|
|
1854
|
-
signatures.delete(resolved);
|
|
1855
|
-
unstableInputs.add(resolved);
|
|
1856
|
-
}
|
|
1857
|
-
return {
|
|
1858
|
-
hostInputHashes: Object.fromEntries(hashes),
|
|
1859
|
-
hostInputRealpaths: Object.fromEntries(realpaths),
|
|
1860
|
-
inputs: [...inputs].sort(),
|
|
1861
|
-
unstableInputs: [...unstableInputs],
|
|
1862
|
-
};
|
|
1863
|
-
}
|
|
1864
|
-
function errorMessage(error) {
|
|
1865
|
-
return error instanceof Error ? error.message : String(error);
|
|
1866
|
-
}
|
|
1867
|
-
function withPluginLoaderEnv(run) {
|
|
1868
|
-
const previousNode = process.env.TTSC_NODE_BINARY;
|
|
1869
|
-
const previousTtsx = process.env.TTSC_TTSX_BINARY;
|
|
1870
|
-
const node = (0, resolveNodeBinary_1.resolveNodeBinary)({}, process.cwd());
|
|
1871
|
-
if (process.env.TTSC_NODE_BINARY === undefined && node !== undefined) {
|
|
1872
|
-
process.env.TTSC_NODE_BINARY = node;
|
|
1873
|
-
}
|
|
1874
|
-
process.env.TTSC_TTSX_BINARY ??= node_path_1.default.join(__dirname, "..", "..", "launcher", "ttsx.js");
|
|
1875
|
-
try {
|
|
1876
|
-
return run();
|
|
1877
|
-
}
|
|
1878
|
-
finally {
|
|
1879
|
-
restoreEnv("TTSC_NODE_BINARY", previousNode);
|
|
1880
|
-
restoreEnv("TTSC_TTSX_BINARY", previousTtsx);
|
|
1881
|
-
}
|
|
1882
|
-
}
|
|
1883
|
-
/**
|
|
1884
|
-
* Select the executable for isolated descriptor evaluation.
|
|
1885
|
-
*
|
|
1886
|
-
* Under Bun, `process.execPath` names Bun itself. Bun implements enough of the
|
|
1887
|
-
* Node module surface to evaluate descriptors natively, but not Node's
|
|
1888
|
-
* synchronous `module.registerHooks` preload. The caller therefore recognizes
|
|
1889
|
-
* this default and omits the Node-only preload while retaining the fresh
|
|
1890
|
-
* process boundary. An explicitly configured Node executable remains
|
|
1891
|
-
* authoritative and receives the preload as usual.
|
|
1892
|
-
*/
|
|
1893
|
-
function pluginDescriptorRuntimeBinary(env) {
|
|
1894
|
-
if (env.TTSC_NODE_BINARY === undefined &&
|
|
1895
|
-
typeof process.versions.bun ===
|
|
1896
|
-
"string") {
|
|
1897
|
-
return process.execPath;
|
|
1898
|
-
}
|
|
1899
|
-
return (env.TTSC_NODE_BINARY ?? process.env.TTSC_NODE_BINARY ?? process.execPath);
|
|
1900
|
-
}
|
|
1901
|
-
/** Replay a child's human output without imposing a fixed output ceiling. */
|
|
1902
|
-
function replayEvaluationDiagnostics(file) {
|
|
1903
|
-
let fd;
|
|
1904
|
-
try {
|
|
1905
|
-
fd = node_fs_1.default.openSync(file, "r");
|
|
1906
|
-
const buffer = Buffer.allocUnsafe(64 * 1024);
|
|
1907
|
-
for (;;) {
|
|
1908
|
-
const length = node_fs_1.default.readSync(fd, buffer, 0, buffer.length, null);
|
|
1909
|
-
if (length === 0)
|
|
1910
|
-
break;
|
|
1911
|
-
node_fs_1.default.writeSync(2, buffer, 0, length);
|
|
1912
|
-
}
|
|
1913
|
-
}
|
|
1914
|
-
catch {
|
|
1915
|
-
// Diagnostic replay must never replace the descriptor result.
|
|
1916
|
-
}
|
|
1917
|
-
finally {
|
|
1918
|
-
if (fd !== undefined)
|
|
1919
|
-
node_fs_1.default.closeSync(fd);
|
|
1920
|
-
}
|
|
1921
|
-
}
|
|
1922
|
-
function restoreEnv(key, value) {
|
|
1923
|
-
if (value === undefined) {
|
|
1924
|
-
delete process.env[key];
|
|
1925
|
-
}
|
|
1926
|
-
else {
|
|
1927
|
-
process.env[key] = value;
|
|
1928
|
-
}
|
|
1929
|
-
}
|
|
1930
|
-
function isTtscPlugin(value) {
|
|
1931
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1932
|
-
}
|
|
1933
|
-
function rejectJsTransformFunctions(specifier, candidate) {
|
|
1934
|
-
if ("transformSource" in candidate || "transformOutput" in candidate) {
|
|
1935
|
-
throw new Error(`ttsc: plugin "${specifier}" declares unsupported JS transform functions; ` +
|
|
1936
|
-
"declare a native backend instead");
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
|
-
function resolvePluginStage(plugin) {
|
|
1940
|
-
if (plugin.stage === undefined) {
|
|
1941
|
-
return "transform";
|
|
1942
|
-
}
|
|
1943
|
-
if (!isPluginStage(plugin.stage)) {
|
|
1944
|
-
if (plugin.stage === "output") {
|
|
1945
|
-
throw new Error(`ttsc: plugin "${plugin.name}" requested removed stage "output"; ` +
|
|
1946
|
-
"upgrade the plugin to a transform-stage descriptor compatible with this ttsc version");
|
|
1947
|
-
}
|
|
1948
|
-
throw new Error(`ttsc: plugin "${plugin.name}" requested unsupported stage ${JSON.stringify(plugin.stage)}`);
|
|
1949
|
-
}
|
|
1950
|
-
return plugin.stage;
|
|
1951
|
-
}
|
|
1952
|
-
function validatePluginSource(plugin) {
|
|
1953
|
-
if (typeof plugin.source !== "string" || plugin.source.length === 0) {
|
|
1954
|
-
throw new Error(`ttsc: plugin must declare source`);
|
|
1955
|
-
}
|
|
1956
|
-
}
|
|
1957
|
-
function pluginLabel(plugin, config, index) {
|
|
1958
|
-
if (typeof plugin.name === "string" && plugin.name.length !== 0) {
|
|
1959
|
-
return plugin.name;
|
|
1960
|
-
}
|
|
1961
|
-
if (typeof config.transform === "string" && config.transform.length !== 0) {
|
|
1962
|
-
return config.transform;
|
|
1963
|
-
}
|
|
1964
|
-
return `#${index}`;
|
|
1965
|
-
}
|
|
1966
|
-
function resolvePluginSource(source, projectRoot) {
|
|
1967
|
-
return resolveRealPath(node_path_1.default.isAbsolute(source) ? source : node_path_1.default.resolve(projectRoot, source));
|
|
1968
|
-
}
|
|
1969
|
-
function resolveNativeSourceKind(source, plugin, config, index) {
|
|
1970
|
-
const packageDir = resolveGoPackageDir(source, pluginLabel(plugin, config, index));
|
|
1971
|
-
if ((0, paths_1.findNearestGoMod)(packageDir, GO_MOD_SEARCH_MAX_DEPTH) === null) {
|
|
1972
|
-
throw new Error(`ttsc: plugin "${pluginLabel(plugin, config, index)}" source must be inside a Go module with go.mod within ${GO_MOD_SEARCH_MAX_DEPTH} parent directories: ${source}`);
|
|
1973
|
-
}
|
|
1974
|
-
const packageName = readGoPackageName(packageDir);
|
|
1975
|
-
if (packageName === null) {
|
|
1976
|
-
throw new Error(`ttsc: plugin "${pluginLabel(plugin, config, index)}" source must contain at least one non-test ".go" file with a package declaration: ${packageDir}`);
|
|
1977
|
-
}
|
|
1978
|
-
return packageName === "main" ? "executable" : "linked";
|
|
1979
|
-
}
|
|
1980
|
-
function resolveGoPackageDir(source, label) {
|
|
1981
|
-
if (!node_fs_1.default.existsSync(source)) {
|
|
1982
|
-
// A descriptor factory runs without CommonJS globals when ttsc loads it
|
|
1983
|
-
// through ttsx or as ESM — `__dirname`/`__filename`/`require` are undefined,
|
|
1984
|
-
// so a `source` derived from them mis-resolves (often against cwd) and lands
|
|
1985
|
-
// here. Name that failure mode explicitly instead of leaving a bare
|
|
1986
|
-
// not-found path: the breakage is otherwise silent. (See #248.)
|
|
1987
|
-
throw new Error(`ttsc: plugin "${label}" source does not exist: ${source}\n` +
|
|
1988
|
-
` Plugin descriptors run without CommonJS globals: __dirname, __filename, ` +
|
|
1989
|
-
`and require are undefined when ttsc loads a descriptor through ttsx or as ESM. ` +
|
|
1990
|
-
`If this path was derived from one of them, use context.dirname / ` +
|
|
1991
|
-
`context.filename (the descriptor's own directory and file, populated in ` +
|
|
1992
|
-
`every load mode), or resolve it from context.projectRoot, e.g. ` +
|
|
1993
|
-
`createRequire(path.join(context.projectRoot, "package.json"))` +
|
|
1994
|
-
`.resolve("<your-package>/package.json").`);
|
|
1995
|
-
}
|
|
1996
|
-
const stat = node_fs_1.default.statSync(source);
|
|
1997
|
-
if (stat.isFile() && node_path_1.default.basename(source) === "go.mod") {
|
|
1998
|
-
return node_path_1.default.dirname(source);
|
|
1999
|
-
}
|
|
2000
|
-
if (stat.isDirectory()) {
|
|
2001
|
-
return source;
|
|
2002
|
-
}
|
|
2003
|
-
throw new Error(`ttsc: plugin "${label}" source must be a Go package directory or go.mod file: ${source}`);
|
|
2004
|
-
}
|
|
2005
|
-
function readGoPackageName(dir) {
|
|
2006
|
-
for (const entry of node_fs_1.default.readdirSync(dir, { withFileTypes: true })) {
|
|
2007
|
-
if (!entry.isFile() ||
|
|
2008
|
-
!entry.name.endsWith(".go") ||
|
|
2009
|
-
entry.name.endsWith("_test.go")) {
|
|
2010
|
-
continue;
|
|
2011
|
-
}
|
|
2012
|
-
const file = node_path_1.default.join(dir, entry.name);
|
|
2013
|
-
for (const line of node_fs_1.default.readFileSync(file, "utf8").split(/\r?\n/)) {
|
|
2014
|
-
const match = /^\s*package\s+([A-Za-z_][A-Za-z0-9_]*)\b/.exec(line);
|
|
2015
|
-
if (match) {
|
|
2016
|
-
return match[1];
|
|
2017
|
-
}
|
|
2018
|
-
}
|
|
2019
|
-
}
|
|
2020
|
-
return null;
|
|
2021
|
-
}
|
|
2022
|
-
const CONTRIBUTOR_NAME_PATTERN = /^[a-z][a-z0-9_]*$/;
|
|
2023
|
-
function validatePluginContributors(plugin) {
|
|
2024
|
-
const contributors = plugin.contributors;
|
|
2025
|
-
if (contributors === undefined)
|
|
2026
|
-
return undefined;
|
|
2027
|
-
if (!Array.isArray(contributors)) {
|
|
2028
|
-
throw new Error(`ttsc: plugin "${plugin.name}" "contributors" must be an array of { name, source } entries`);
|
|
2029
|
-
}
|
|
2030
|
-
if (contributors.length === 0)
|
|
2031
|
-
return undefined;
|
|
2032
|
-
const seen = new Set();
|
|
2033
|
-
const out = [];
|
|
2034
|
-
for (const [index, entry] of contributors.entries()) {
|
|
2035
|
-
if (typeof entry !== "object" || entry === null) {
|
|
2036
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}] must be an object`);
|
|
2037
|
-
}
|
|
2038
|
-
const { name, source } = entry;
|
|
2039
|
-
if (typeof name !== "string" || !CONTRIBUTOR_NAME_PATTERN.test(name)) {
|
|
2040
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}].name must match /^[a-z][a-z0-9_]*$/; ` +
|
|
2041
|
-
`got ${JSON.stringify(name)}`);
|
|
2042
|
-
}
|
|
2043
|
-
if (seen.has(name)) {
|
|
2044
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}] duplicate name ${JSON.stringify(name)}`);
|
|
2045
|
-
}
|
|
2046
|
-
seen.add(name);
|
|
2047
|
-
if (typeof source !== "string" || source.length === 0) {
|
|
2048
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}].source must be a non-empty string`);
|
|
2049
|
-
}
|
|
2050
|
-
if (!node_path_1.default.isAbsolute(source)) {
|
|
2051
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}].source must be an absolute path; ` +
|
|
2052
|
-
`got ${JSON.stringify(source)}`);
|
|
2053
|
-
}
|
|
2054
|
-
if (!node_fs_1.default.existsSync(source) || !node_fs_1.default.statSync(source).isDirectory()) {
|
|
2055
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}].source must be an existing directory: ${source}`);
|
|
2056
|
-
}
|
|
2057
|
-
// Pre-flight check that the directory actually carries a buildable
|
|
2058
|
-
// contributor package. Without this, an accidentally-empty directory
|
|
2059
|
-
// (or a directory containing only `_test.go` files, which `go build`
|
|
2060
|
-
// silently skips) reaches the synthesized blank-import step and Go's
|
|
2061
|
-
// compile error surfaces with a scratch-tempdir path that doesn't
|
|
2062
|
-
// name the contributor entry. Catching it here lets us name the
|
|
2063
|
-
// entry the user actually authored.
|
|
2064
|
-
if (!hasBuildableGoSource(source)) {
|
|
2065
|
-
throw new Error(`ttsc: plugin "${plugin.name}" contributors[${index}].source must contain at least one non-test ".go" file: ${source}`);
|
|
2066
|
-
}
|
|
2067
|
-
out.push({ name, source: resolveRealPath(source) });
|
|
2068
|
-
}
|
|
2069
|
-
return out;
|
|
2070
|
-
}
|
|
2071
|
-
function mergeContributors(first, second) {
|
|
2072
|
-
const out = [...(first ?? []), ...(second ?? [])];
|
|
2073
|
-
return out.length === 0 ? undefined : out;
|
|
2074
|
-
}
|
|
2075
|
-
function isPluginStage(value) {
|
|
2076
|
-
return value === "transform" || value === "check";
|
|
2077
|
-
}
|
|
2078
|
-
function hasBuildableGoSource(dir) {
|
|
2079
|
-
// `go build` consumes `.go` files but silently ignores `_test.go`. A
|
|
2080
|
-
// contributor whose source dir holds only test files would compile to
|
|
2081
|
-
// an empty package and surface as an opaque scratch-tempdir error;
|
|
2082
|
-
// require at least one production `.go` file so the validator can
|
|
2083
|
-
// name the contributor entry instead.
|
|
2084
|
-
let entries;
|
|
2085
|
-
try {
|
|
2086
|
-
entries = node_fs_1.default.readdirSync(dir);
|
|
2087
|
-
}
|
|
2088
|
-
catch {
|
|
2089
|
-
return false;
|
|
2090
|
-
}
|
|
2091
|
-
return entries.some((name) => name.endsWith(".go") && !name.endsWith("_test.go"));
|
|
2092
|
-
}
|
|
2093
|
-
function resolvePluginRequest(specifier, projectRoot) {
|
|
2094
|
-
if (node_path_1.default.isAbsolute(specifier)) {
|
|
2095
|
-
return resolveRealPath(specifier);
|
|
2096
|
-
}
|
|
2097
|
-
if (isRelativePluginSpecifier(specifier)) {
|
|
2098
|
-
return resolveRealPath(node_path_1.default.resolve(projectRoot, specifier));
|
|
2099
|
-
}
|
|
2100
|
-
// A package whose main `.` entry is a runtime barrel cannot double as a
|
|
2101
|
-
// plugin descriptor entry: loading it during plugin bootstrap drags the
|
|
2102
|
-
// runtime in (and, for a self-hosting transform like typia, deadlocks —
|
|
2103
|
-
// loading the transform would have to build the runtime the transform
|
|
2104
|
-
// emits). Such a package opts in with a `ttsc` export condition that points
|
|
2105
|
-
// at a runtime-free descriptor; honour it here, scoped to plugin resolution.
|
|
2106
|
-
const conditioned = resolvePluginExportCondition(specifier, projectRoot);
|
|
2107
|
-
if (conditioned !== null) {
|
|
2108
|
-
return conditioned;
|
|
2109
|
-
}
|
|
2110
|
-
return resolveRealPath(require.resolve(specifier, { paths: [projectRoot] }));
|
|
2111
|
-
}
|
|
2112
|
-
/**
|
|
2113
|
-
* Condition names ttsc activates when resolving a plugin entry's package
|
|
2114
|
-
* `exports`.
|
|
2115
|
-
*/
|
|
2116
|
-
const PLUGIN_EXPORT_CONDITIONS = [
|
|
2117
|
-
"ttsc",
|
|
2118
|
-
"node",
|
|
2119
|
-
"require",
|
|
2120
|
-
"default",
|
|
2121
|
-
];
|
|
2122
|
-
/**
|
|
2123
|
-
* Resolve a bare plugin specifier under the dedicated `ttsc` export condition.
|
|
2124
|
-
*
|
|
2125
|
-
* A package whose `.` entry is a runtime barrel (e.g. `typia`, whose index
|
|
2126
|
-
* re-exports the whole validator runtime) cannot serve as the plugin descriptor
|
|
2127
|
-
* entry: loading it during plugin bootstrap pulls the runtime in and, for a
|
|
2128
|
-
* self-hosting transform, forms a cycle. Such a package opts in by adding a
|
|
2129
|
-
* `ttsc` condition to its `exports` that points at a runtime-free descriptor:
|
|
2130
|
-
*
|
|
2131
|
-
* "exports": { ".": { "ttsc": "./lib/transform.js", "default": "./lib/index.js"
|
|
2132
|
-
* } }
|
|
2133
|
-
*
|
|
2134
|
-
* The condition is honoured ONLY here, scoped to plugin-entry resolution. A
|
|
2135
|
-
* process-wide `--conditions=ttsc` would also redirect the package's normal
|
|
2136
|
-
* `import`s to the descriptor and break its runtime, so it must not be used.
|
|
2137
|
-
*
|
|
2138
|
-
* Returns an absolute path when the package opts in, or `null` to fall back to
|
|
2139
|
-
* the normal `require.resolve` — no `exports`, no `ttsc` branch for the
|
|
2140
|
-
* requested subpath, or an unresolved/missing target — so a package that does
|
|
2141
|
-
* not opt in resolves exactly as it did before.
|
|
2142
|
-
*/
|
|
2143
|
-
function resolvePluginExportCondition(specifier, baseDir) {
|
|
2144
|
-
const split = splitPackageSpecifier(specifier);
|
|
2145
|
-
if (split === null) {
|
|
2146
|
-
return null;
|
|
2147
|
-
}
|
|
2148
|
-
const packageJson = resolveDependencyPackageJson(split.packageName, baseDir);
|
|
2149
|
-
if (packageJson === undefined) {
|
|
2150
|
-
return null;
|
|
2151
|
-
}
|
|
2152
|
-
const exportsField = readPackageManifest(packageJson)?.exports;
|
|
2153
|
-
if (exportsField === undefined) {
|
|
2154
|
-
return null;
|
|
2155
|
-
}
|
|
2156
|
-
const target = selectExportTarget(exportsField, split.subpath);
|
|
2157
|
-
// Only take over when the package actually opts in with a `ttsc` condition
|
|
2158
|
-
// for this subpath; otherwise defer so behaviour is unchanged for every
|
|
2159
|
-
// package that does not.
|
|
2160
|
-
if (target === undefined || !containsCondition(target, "ttsc")) {
|
|
2161
|
-
return null;
|
|
2162
|
-
}
|
|
2163
|
-
const resolved = resolveConditionalTarget(target, PLUGIN_EXPORT_CONDITIONS);
|
|
2164
|
-
if (resolved === null || !resolved.startsWith("./")) {
|
|
2165
|
-
return null;
|
|
2166
|
-
}
|
|
2167
|
-
const file = node_path_1.default.resolve(node_path_1.default.dirname(packageJson), resolved);
|
|
2168
|
-
return existingFile(file) ? resolveRealPath(file) : null;
|
|
2169
|
-
}
|
|
2170
|
-
/**
|
|
2171
|
-
* Split a bare specifier into its package name and the `.`-prefixed subpath it
|
|
2172
|
-
* addresses (`"typia"` → `.`, `"typia/lib/transform"` → `./lib/transform`,
|
|
2173
|
-
* `"@scope/pkg/sub"` → `./sub`). Returns `null` for a relative/empty specifier
|
|
2174
|
-
* or a malformed scoped name.
|
|
2175
|
-
*/
|
|
2176
|
-
function splitPackageSpecifier(specifier) {
|
|
2177
|
-
if (specifier.length === 0 || specifier.startsWith(".")) {
|
|
2178
|
-
return null;
|
|
2179
|
-
}
|
|
2180
|
-
const segments = specifier.split("/");
|
|
2181
|
-
const nameSegments = specifier.startsWith("@") ? 2 : 1;
|
|
2182
|
-
if (segments.length < nameSegments) {
|
|
2183
|
-
return null;
|
|
2184
|
-
}
|
|
2185
|
-
const rest = segments.slice(nameSegments).join("/");
|
|
2186
|
-
return {
|
|
2187
|
-
packageName: segments.slice(0, nameSegments).join("/"),
|
|
2188
|
-
subpath: rest.length === 0 ? "." : `./${rest}`,
|
|
2189
|
-
};
|
|
2190
|
-
}
|
|
2191
|
-
/**
|
|
2192
|
-
* The `exports` entry addressing `subpath`, applying Node's rule that an
|
|
2193
|
-
* `exports` value with no `.`-prefixed keys is sugar for the `.` target.
|
|
2194
|
-
* Returns `undefined` when no entry addresses the subpath.
|
|
2195
|
-
*/
|
|
2196
|
-
function selectExportTarget(exportsField, subpath) {
|
|
2197
|
-
if (typeof exportsField === "string" || Array.isArray(exportsField)) {
|
|
2198
|
-
return subpath === "." ? exportsField : undefined;
|
|
2199
|
-
}
|
|
2200
|
-
if (typeof exportsField !== "object" || exportsField === null) {
|
|
2201
|
-
return undefined;
|
|
2202
|
-
}
|
|
2203
|
-
const record = exportsField;
|
|
2204
|
-
const isSubpathMap = Object.keys(record).some((key) => key === "." || key.startsWith("./"));
|
|
2205
|
-
if (!isSubpathMap) {
|
|
2206
|
-
// Conditions object: the whole value is the `.` target.
|
|
2207
|
-
return subpath === "." ? exportsField : undefined;
|
|
2208
|
-
}
|
|
2209
|
-
if (Object.prototype.hasOwnProperty.call(record, subpath) &&
|
|
2210
|
-
!subpath.includes("*") &&
|
|
2211
|
-
!subpath.endsWith("/")) {
|
|
2212
|
-
return record[subpath];
|
|
2213
|
-
}
|
|
2214
|
-
const patterns = Object.keys(record)
|
|
2215
|
-
.filter((key) => exportPatternReplacement(key, subpath) !== undefined)
|
|
2216
|
-
.sort(compareExportPatternKeys);
|
|
2217
|
-
if (patterns.length === 0) {
|
|
2218
|
-
return undefined;
|
|
2219
|
-
}
|
|
2220
|
-
const pattern = patterns[0];
|
|
2221
|
-
return substituteExportTarget(record[pattern], exportPatternReplacement(pattern, subpath));
|
|
2222
|
-
}
|
|
2223
|
-
/** Capture the middle of one valid single-star exports key. */
|
|
2224
|
-
function exportPatternReplacement(pattern, subpath) {
|
|
2225
|
-
const star = pattern.indexOf("*");
|
|
2226
|
-
if (!pattern.startsWith("./") ||
|
|
2227
|
-
star === -1 ||
|
|
2228
|
-
pattern.indexOf("*", star + 1) !== -1) {
|
|
2229
|
-
return undefined;
|
|
2230
|
-
}
|
|
2231
|
-
const prefix = pattern.slice(0, star);
|
|
2232
|
-
const suffix = pattern.slice(star + 1);
|
|
2233
|
-
if (subpath.length < pattern.length ||
|
|
2234
|
-
!subpath.startsWith(prefix) ||
|
|
2235
|
-
!subpath.endsWith(suffix)) {
|
|
2236
|
-
return undefined;
|
|
2237
|
-
}
|
|
2238
|
-
return subpath.slice(prefix.length, subpath.length - suffix.length);
|
|
2239
|
-
}
|
|
2240
|
-
/** Node exports patterns rank longer prefixes, then longer full keys, first. */
|
|
2241
|
-
function compareExportPatternKeys(left, right) {
|
|
2242
|
-
const leftPrefix = left.indexOf("*");
|
|
2243
|
-
const rightPrefix = right.indexOf("*");
|
|
2244
|
-
if (leftPrefix !== rightPrefix) {
|
|
2245
|
-
return rightPrefix - leftPrefix;
|
|
2246
|
-
}
|
|
2247
|
-
return right.length - left.length;
|
|
2248
|
-
}
|
|
2249
|
-
/** Substitute the selected pattern capture into every string target branch. */
|
|
2250
|
-
function substituteExportTarget(target, replacement) {
|
|
2251
|
-
if (typeof target === "string") {
|
|
2252
|
-
return target.split("*").join(replacement);
|
|
2253
|
-
}
|
|
2254
|
-
if (Array.isArray(target)) {
|
|
2255
|
-
return target.map((entry) => substituteExportTarget(entry, replacement));
|
|
2256
|
-
}
|
|
2257
|
-
if (typeof target !== "object" || target === null) {
|
|
2258
|
-
return target;
|
|
2259
|
-
}
|
|
2260
|
-
return Object.fromEntries(Object.entries(target).map(([condition, value]) => [
|
|
2261
|
-
condition,
|
|
2262
|
-
substituteExportTarget(value, replacement),
|
|
2263
|
-
]));
|
|
2264
|
-
}
|
|
2265
|
-
/** True when condition key `condition` appears anywhere in a (nested) target. */
|
|
2266
|
-
function containsCondition(target, condition) {
|
|
2267
|
-
if (Array.isArray(target)) {
|
|
2268
|
-
return target.some((entry) => containsCondition(entry, condition));
|
|
2269
|
-
}
|
|
2270
|
-
if (typeof target !== "object" || target === null) {
|
|
2271
|
-
return false;
|
|
2272
|
-
}
|
|
2273
|
-
return Object.entries(target).some(([key, value]) => key === condition || containsCondition(value, condition));
|
|
2274
|
-
}
|
|
2275
|
-
/**
|
|
2276
|
-
* Resolve a (possibly conditional) export target to a relative file string,
|
|
2277
|
-
* honouring `conditions` — a string is the target, an array is a fallback list,
|
|
2278
|
-
* an object picks the first key in the active condition set (package key order
|
|
2279
|
-
* wins, as Node does), and an explicit `null` blocks the target.
|
|
2280
|
-
*/
|
|
2281
|
-
function resolveConditionalTarget(target, conditions) {
|
|
2282
|
-
if (typeof target === "string") {
|
|
2283
|
-
return target;
|
|
2284
|
-
}
|
|
2285
|
-
if (target === null || target === undefined) {
|
|
2286
|
-
return null;
|
|
2287
|
-
}
|
|
2288
|
-
if (Array.isArray(target)) {
|
|
2289
|
-
for (const entry of target) {
|
|
2290
|
-
const resolved = resolveConditionalTarget(entry, conditions);
|
|
2291
|
-
if (resolved !== null) {
|
|
2292
|
-
return resolved;
|
|
2293
|
-
}
|
|
2294
|
-
}
|
|
2295
|
-
return null;
|
|
2296
|
-
}
|
|
2297
|
-
if (typeof target !== "object") {
|
|
2298
|
-
return null;
|
|
2299
|
-
}
|
|
2300
|
-
const active = new Set(conditions);
|
|
2301
|
-
for (const [key, value] of Object.entries(target)) {
|
|
2302
|
-
if (active.has(key)) {
|
|
2303
|
-
const resolved = resolveConditionalTarget(value, conditions);
|
|
2304
|
-
if (resolved !== null) {
|
|
2305
|
-
return resolved;
|
|
2306
|
-
}
|
|
2307
|
-
}
|
|
2308
|
-
}
|
|
2309
|
-
return null;
|
|
2310
|
-
}
|
|
2311
|
-
function resolveRealPath(location) {
|
|
2312
|
-
try {
|
|
2313
|
-
return node_fs_1.default.realpathSync(location);
|
|
2314
|
-
}
|
|
2315
|
-
catch {
|
|
2316
|
-
return location;
|
|
2317
|
-
}
|
|
2318
|
-
}
|
|
2319
|
-
function isRelativePluginSpecifier(specifier) {
|
|
2320
|
-
return (specifier === "." ||
|
|
2321
|
-
specifier === ".." ||
|
|
2322
|
-
specifier.startsWith("./") ||
|
|
2323
|
-
specifier.startsWith("../") ||
|
|
2324
|
-
specifier.startsWith(".\\") ||
|
|
2325
|
-
specifier.startsWith("..\\"));
|
|
2326
|
-
}
|
|
2327
|
-
let cachedTtscVersion = null;
|
|
2328
|
-
function readTtscVersion() {
|
|
2329
|
-
if (cachedTtscVersion !== null) {
|
|
2330
|
-
return cachedTtscVersion;
|
|
2331
|
-
}
|
|
2332
|
-
try {
|
|
2333
|
-
const file = node_path_1.default.join(ttscPackageRoot(), "package.json");
|
|
2334
|
-
const pkg = JSON.parse(node_fs_1.default.readFileSync(file, "utf8"));
|
|
2335
|
-
cachedTtscVersion = pkg.version ?? "0.0.0";
|
|
2336
|
-
}
|
|
2337
|
-
catch {
|
|
2338
|
-
cachedTtscVersion = "0.0.0";
|
|
2339
|
-
}
|
|
2340
|
-
return cachedTtscVersion;
|
|
2341
|
-
}
|
|
2342
|
-
function ttscPackageRoot() {
|
|
2343
|
-
return node_path_1.default.resolve(__dirname, "..", "..", "..");
|
|
2344
|
-
}
|
|
2345
|
-
function readTsgoVersion(projectRoot) {
|
|
2346
|
-
try {
|
|
2347
|
-
const projectRequire = (0, node_module_1.createRequire)(node_path_1.default.join(projectRoot, "package.json"));
|
|
2348
|
-
const pkgPath = projectRequire.resolve("typescript/package.json");
|
|
2349
|
-
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, "utf8"));
|
|
2350
|
-
return pkg.version ?? "unknown";
|
|
2351
|
-
}
|
|
2352
|
-
catch {
|
|
2353
|
-
return "unknown";
|
|
2354
|
-
}
|
|
2355
|
-
}
|
|
2356
|
-
/**
|
|
2357
|
-
* Create an evaluator directory whose cleanup path cannot follow a retargeted
|
|
2358
|
-
* parent alias.
|
|
2359
|
-
*/
|
|
2360
|
-
function createEvaluationTempDir() {
|
|
2361
|
-
return (0, createCanonicalTempDirectory_1.createCanonicalTempDirectory)("ttsc-plugin-descriptor-");
|
|
2362
|
-
}
|
|
2363
|
-
/**
|
|
2364
|
-
* Remove an evaluation temp directory without letting cleanup replace a result.
|
|
2365
|
-
*
|
|
2366
|
-
* This runs from a `finally`, so a throw here would surface instead of the
|
|
2367
|
-
* evaluation's own outcome — and on Windows a grandchild that inherited a
|
|
2368
|
-
* handle, or a scanner holding the file, can make removal fail. Leaving bytes
|
|
2369
|
-
* in the system temp directory is by far the lesser outcome.
|
|
2370
|
-
*/
|
|
2371
|
-
function removeEvaluationTempDir(directory) {
|
|
2372
|
-
try {
|
|
2373
|
-
node_fs_1.default.rmSync(directory, { force: true, recursive: true });
|
|
2374
|
-
}
|
|
2375
|
-
catch {
|
|
2376
|
-
// Best effort.
|
|
2377
|
-
}
|
|
2378
|
-
}
|
|
2379
|
-
//# sourceMappingURL=loadProjectPlugins.js.map
|