ttsc 0.30.4 → 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.
Files changed (2081) hide show
  1. package/cmd/graphbench/main.go +2 -3
  2. package/cmd/graphdump/main.go +42 -16
  3. package/cmd/graphdump/run_declares_the_capability_its_output_carries_test.go +32 -18
  4. package/cmd/graphdump/run_reports_an_unknown_flag_without_exiting_the_process_test.go +10 -9
  5. package/cmd/graphdump/run_reports_an_unloadable_project_without_printing_a_dump_test.go +8 -7
  6. package/cmd/platform/command_operation_families_test.go +192 -0
  7. package/cmd/platform/main.go +11 -1
  8. package/cmd/ttsc/api_compile.go +166 -46
  9. package/cmd/ttsc/api_compile_branches_test.go +97 -10
  10. package/cmd/ttsc/api_transform.go +134 -46
  11. package/cmd/ttsc/api_transform_branches_test.go +10 -7
  12. package/cmd/ttsc/build.go +177 -68
  13. package/cmd/ttsc/build_branches_test.go +35 -7
  14. package/cmd/ttsc/cli_command_operation_families_test.go +1287 -0
  15. package/cmd/ttsc/cli_contract_helpers_test.go +82 -0
  16. package/cmd/ttsc/compiler_argument_cwd_test.go +57 -0
  17. package/cmd/ttsc/filter.go +31 -14
  18. package/cmd/ttsc/filter_resolves_flag_names_case_insensitively_test.go +10 -13
  19. package/cmd/ttsc/filter_strips_unknown_forwarded_flag_test.go +10 -16
  20. package/cmd/ttsc/flags_gen.go +2 -2
  21. package/cmd/ttsc/helpers_test.go +67 -10
  22. package/cmd/ttsc/main.go +122 -21
  23. package/cmd/ttsc/main_alias_branches_test.go +35 -9
  24. package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/ambient.d.ts +1 -0
  25. package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/main.ts +2 -0
  26. package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/mytype.ts +1 -0
  27. package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/tsconfig.base.json +3 -0
  28. package/cmd/ttsc/testdata/cli_operation_families/TestAPITransformEnvelopeCarriesReferenceGraph/tsconfig.json +5 -0
  29. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/index.ts +1 -0
  30. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/decorated/main.ts +10 -0
  31. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/decorated/types.ts +3 -0
  32. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/helpers.ts +1 -0
  33. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/isolated.ts +1 -0
  34. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/main.ts +7 -0
  35. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/src/nested/model.ts +1 -0
  36. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPICompileAndTransform/tsconfig.json +14 -0
  37. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPITransformUsesCurrentDirectory/index.ts +1 -0
  38. package/cmd/ttsc/testdata/cli_operation_families/TestCLIAPITransformUsesCurrentDirectory/tsconfig.json +7 -0
  39. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildAllowsUnusedTypeParametersOnOverloadSignatures/index.ts +4 -0
  40. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildAllowsUnusedTypeParametersOnOverloadSignatures/tsconfig.json +11 -0
  41. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSemanticDiagnostics/index.ts +2 -0
  42. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSemanticDiagnostics/tsconfig.json +9 -0
  43. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSyntacticDiagnostics/index.ts +2 -0
  44. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksSyntacticDiagnostics/tsconfig.json +8 -0
  45. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksUnusedParameters/index.ts +3 -0
  46. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildBlocksUnusedParameters/tsconfig.json +10 -0
  47. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildEmitErrorRejectsManifest/index.ts +1 -0
  48. package/cmd/ttsc/testdata/cli_operation_families/TestCLIProjectBuildEmitErrorRejectsManifest/tsconfig.json +1 -0
  49. package/cmd/ttsc/testdata/cli_operation_families/TestCLIReportsDiagnosticsWithoutEmit/index.ts +1 -0
  50. package/cmd/ttsc/testdata/cli_operation_families/TestCLIReportsDiagnosticsWithoutEmit/tsconfig.json +8 -0
  51. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/emit.json +8 -0
  52. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/flag-shaped.json +7 -0
  53. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/index.ts +2 -0
  54. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/nested/tsconfig.app.json +11 -0
  55. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/outside.json +8 -0
  56. package/cmd/ttsc/testdata/cli_operation_families/shared-value-one/project/tsconfig.json +8 -0
  57. package/cmd/ttscgraph/auxiliary_identity_state_tracks_retargets_not_source_contents_test.go +26 -15
  58. package/cmd/ttscgraph/disk_realpath_other.go +2 -0
  59. package/cmd/ttscgraph/dump.go +46 -29
  60. package/cmd/ttscgraph/prepared_projection.go +61 -0
  61. package/cmd/ttscgraph/projection_fixture_test.go +96 -0
  62. package/cmd/ttscgraph/run_dump_claims_artifacts_only_when_it_asked_test.go +30 -5
  63. package/cmd/ttscgraph/run_dump_declares_the_capability_its_output_carries_test.go +6 -1
  64. package/cmd/ttscgraph/run_dump_emits_only_checker_verified_member_relations_test.go +12 -5
  65. package/cmd/ttscgraph/run_dump_prints_the_graph_as_json_test.go +17 -12
  66. package/cmd/ttscgraph/run_help_version_and_bad_flags_exit_codes_test.go +8 -3
  67. package/cmd/ttscgraph/serve.go +116 -79
  68. package/cmd/ttscgraph/serve_adopts_a_republished_artifact_set_test.go +16 -167
  69. package/cmd/ttscgraph/serve_adopts_a_republished_set_over_the_shard_protocol_test.go +122 -0
  70. package/cmd/ttscgraph/serve_answers_a_project_that_implements_its_own_ambient_declaration_test.go +35 -7
  71. package/cmd/ttscgraph/serve_early_error_encode_failure_is_observable_test.go +5 -0
  72. package/cmd/ttscgraph/serve_error_response_still_names_its_mode_test.go +10 -5
  73. package/cmd/ttscgraph/serve_git_ignore_projection_test.go +150 -0
  74. package/cmd/ttscgraph/serve_keeps_a_startup_set_a_client_never_mentions_test.go +69 -0
  75. package/cmd/ttscgraph/serve_object_members_refresh_without_identity_collisions_test.go +82 -0
  76. package/cmd/ttscgraph/serve_phase_trace_accounts_for_load_failure_test.go +9 -3
  77. package/cmd/ttscgraph/serve_phase_trace_is_opt_in_and_payload_free_test.go +12 -6
  78. package/cmd/ttscgraph/serve_projects_an_artifact_no_source_owns_test.go +13 -16
  79. package/cmd/ttscgraph/serve_protocol_fails_the_stream_on_an_unaddressable_request_line_test.go +10 -9
  80. package/cmd/ttscgraph/serve_protocol_negotiates_incremental_shards_test.go +37 -2
  81. package/cmd/ttscgraph/serve_protocol_retries_session_creation_test.go +7 -2
  82. package/cmd/ttscgraph/serve_protocol_reuses_session_test.go +13 -3
  83. package/cmd/ttscgraph/serve_session_applies_source_edit_incrementally_test.go +12 -7
  84. package/cmd/ttscgraph/serve_session_fails_closed_on_deleted_config_test.go +12 -7
  85. package/cmd/ttscgraph/serve_session_fails_closed_on_invalid_config_test.go +8 -3
  86. package/cmd/ttscgraph/serve_session_keeps_base_url_fallback_unchanged_test.go +7 -2
  87. package/cmd/ttscgraph/serve_session_keeps_change_detection_live_after_initial_dump_error_test.go +66 -0
  88. package/cmd/ttscgraph/serve_session_keeps_esm_directory_candidate_unchanged_test.go +12 -3
  89. package/cmd/ttscgraph/serve_session_keeps_exports_blocked_file_candidates_unchanged_test.go +8 -3
  90. package/cmd/ttscgraph/serve_session_keeps_inactive_conditional_export_unchanged_test.go +12 -3
  91. package/cmd/ttscgraph/serve_session_keeps_lower_priority_module_candidate_unchanged_test.go +14 -8
  92. package/cmd/ttscgraph/serve_session_keeps_lower_priority_paths_pattern_unchanged_test.go +12 -3
  93. package/cmd/ttscgraph/serve_session_keeps_missing_literal_root_unchanged_test.go +7 -2
  94. package/cmd/ttscgraph/serve_session_keeps_nonlongest_root_dirs_candidate_unchanged_test.go +12 -3
  95. package/cmd/ttscgraph/serve_session_rebuilds_import_graph_change_test.go +17 -8
  96. package/cmd/ttscgraph/serve_session_reloads_commonjs_package_entry_for_esm_test.go +11 -2
  97. package/cmd/ttscgraph/serve_session_reloads_created_literal_root_test.go +7 -2
  98. package/cmd/ttscgraph/serve_session_reloads_extended_config_change_test.go +9 -4
  99. package/cmd/ttscgraph/serve_session_reloads_module_suffix_candidate_test.go +13 -4
  100. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_conditional_export_test.go +13 -8
  101. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_config_types_test.go +7 -2
  102. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_excluded_import_test.go +11 -3
  103. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_export_test.go +11 -2
  104. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_import_test.go +11 -2
  105. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_path_alias_test.go +11 -2
  106. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_reference_path_test.go +11 -2
  107. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_root_dirs_target_test.go +11 -2
  108. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_type_reference_test.go +11 -2
  109. package/cmd/ttscgraph/serve_session_reloads_root_file_set_test.go +11 -5
  110. package/cmd/ttscgraph/serve_session_reloads_source_deleted_during_load_test.go +16 -9
  111. package/cmd/ttscgraph/serve_session_reloads_superseding_module_candidates_test.go +18 -13
  112. package/cmd/ttscgraph/serve_session_reloads_transitive_project_reference_test.go +14 -5
  113. package/cmd/ttscgraph/serve_session_reloads_when_program_plugin_linked_test.go +13 -8
  114. package/cmd/ttscgraph/serve_session_retries_a_pending_dump_before_unchanged_test.go +62 -0
  115. package/cmd/ttscgraph/serve_session_reuses_unchanged_preamble_source_test.go +21 -0
  116. package/cmd/ttscgraph/serve_session_reuses_unchanged_snapshot_test.go +12 -7
  117. package/cmd/ttscgraph/serve_session_revisits_source_edited_during_load_test.go +18 -8
  118. package/cmd/ttscgraph/serve_session_tolerates_os_invalid_resolution_candidate_test.go +13 -9
  119. package/cmd/ttscgraph/serve_session_tracks_all_module_specifier_forms_test.go +12 -3
  120. package/cmd/ttscgraph/serve_session_tracks_diamond_project_references_once_test.go +12 -8
  121. package/cmd/ttscgraph/serve_shards.go +356 -279
  122. package/cmd/ttscgraph/serve_shards_abandoned_generation_converges_on_retry_test.go +41 -16
  123. package/cmd/ttscgraph/serve_shards_delete_removed_source_test.go +14 -4
  124. package/cmd/ttscgraph/serve_shards_external_endpoints_test.go +18 -2
  125. package/cmd/ttscgraph/serve_shards_keep_source_distributed_dependencies_at_the_boundary_test.go +36 -5
  126. package/cmd/ttscgraph/serve_shards_match_full_dump_oracle_test.go +12 -3
  127. package/cmd/ttscgraph/serve_shards_merge_pending_and_new_edits_test.go +36 -3
  128. package/cmd/ttscgraph/serve_shards_prune_unreferenced_external_endpoints_test.go +18 -2
  129. package/cmd/ttscgraph/serve_shards_publish_created_source_test.go +16 -13
  130. package/cmd/ttscgraph/serve_shards_rebuild_declaration_edit_test.go +14 -4
  131. package/cmd/ttscgraph/serve_shards_refresh_cross_file_implementation_test.go +24 -5
  132. package/cmd/ttscgraph/serve_shards_refresh_dependent_diagnostics_test.go +30 -7
  133. package/cmd/ttscgraph/serve_shards_rename_moves_source_identity_test.go +14 -11
  134. package/cmd/ttscgraph/serve_shards_retry_preserves_committed_generation_test.go +17 -7
  135. package/cmd/ttscgraph/serve_shards_reuse_unaffected_sources_test.go +21 -7
  136. package/cmd/ttscgraph/serve_snapshot_proves_its_program_without_a_second_read_test.go +57 -16
  137. package/cmd/ttscgraph/serve_source_encoding_test.go +133 -0
  138. package/cmd/ttscserver/command_operation_families_test.go +207 -0
  139. package/cmd/ttscserver/main.go +121 -39
  140. package/cmd/ttscserver/resolve_launch_uses_native_flag_authority_test.go +147 -0
  141. package/cmd/ttscserver/run_lsp_forwards_execute_command_advertisement_flags_test.go +7 -0
  142. package/cmd/ttscserver/run_lsp_prefers_tsgo_flag_test.go +13 -1
  143. package/cmd/ttscserver/run_lsp_reports_getwd_error_test.go +5 -0
  144. package/cmd/ttscserver/run_lsp_reports_server_error_test.go +10 -3
  145. package/cmd/ttscserver/run_lsp_uses_native_plugin_manifest_source_test.go +13 -10
  146. package/cmd/ttscserver/run_lsp_uses_tsgo_environment_test.go +10 -3
  147. package/driver/authored_region_maps_positions_around_the_preamble_test.go +95 -0
  148. package/driver/build_information_uses_selected_output_identity_test.go +148 -0
  149. package/driver/check_observations.go +67 -0
  150. package/driver/config_discovery.go +93 -24
  151. package/driver/declaration_shape.go +9 -0
  152. package/driver/diagnostics_preamble.go +8 -7
  153. package/driver/emit_containment.go +29 -8
  154. package/driver/emit_plugin.go +106 -36
  155. package/driver/emit_plugin_output.go +26 -2
  156. package/driver/emit_provenance.go +155 -0
  157. package/driver/graph.go +54 -20
  158. package/driver/host.go +26 -3
  159. package/driver/input_observation.go +78 -16
  160. package/driver/input_observation_test.go +34 -11
  161. package/driver/lsp.go +401 -30
  162. package/driver/overlay.go +69 -2
  163. package/driver/plugins.go +256 -24
  164. package/driver/private_result.go +43 -0
  165. package/driver/program.go +439 -95
  166. package/driver/resolution_candidates.go +63 -14
  167. package/driver/resolution_candidates_test.go +28 -0
  168. package/driver/resolutioninputs/recorder.cjs +1149 -0
  169. package/driver/resolutioninputs/resolutioninputs.go +37 -0
  170. package/driver/rewrite.go +373 -420
  171. package/driver/session.go +80 -12
  172. package/driver/sourcemap_preamble.go +38 -16
  173. package/driver/transform_dependencies.go +38 -10
  174. package/driver/transform_dependencies_declares_every_file_without_a_contributor_test.go +9 -8
  175. package/driver/transform_dependencies_drops_a_self_reported_dependency_test.go +7 -6
  176. package/driver/transform_dependencies_keys_a_reported_path_like_the_envelope_test.go +9 -9
  177. package/driver/transform_dependencies_requires_every_contributor_to_declare_test.go +10 -5
  178. package/driver/transform_dependencies_stays_silent_for_an_undeclared_contributor_test.go +8 -6
  179. package/driver/transform_dependencies_withdraws_completeness_after_an_unusable_dependency_test.go +9 -5
  180. package/driver/transform_source_map.go +388 -0
  181. package/driver/windowsjunction/create_preserves_existing_directory_windows_test.go +48 -0
  182. package/driver/windowsjunction/create_treats_paths_as_data_windows_test.go +55 -0
  183. package/driver/windowsjunction/windowsjunction.go +17 -1
  184. package/go.mod +10 -10
  185. package/go.sum +10 -10
  186. package/internal/cwd/cwd.go +13 -0
  187. package/internal/e2etrace/artifact.go +147 -0
  188. package/internal/e2etrace/completion_hints.go +35 -0
  189. package/internal/e2etrace/completion_hints_test.go +76 -0
  190. package/internal/e2etrace/e2etrace.go +303 -0
  191. package/internal/e2etrace/output.go +50 -0
  192. package/internal/graph/artifacts.go +69 -12
  193. package/internal/graph/artifacts_index_what_a_plugin_published_test.go +19 -8
  194. package/internal/graph/artifacts_survive_a_partial_rebuild_test.go +11 -12
  195. package/internal/graph/assigned_implementations_of_declaration_file_symbols_leave_no_edge_source_test.go +10 -12
  196. package/internal/graph/assigned_implementations_of_node_modules_symbols_leave_no_edge_source_test.go +7 -1
  197. package/internal/graph/build.go +122 -38
  198. package/internal/graph/build_files_reuses_committed_cross_file_endpoints_test.go +9 -3
  199. package/internal/graph/build_keeps_source_distributed_dependencies_at_the_external_boundary_test.go +10 -1
  200. package/internal/graph/build_records_a_node_per_top_level_declaration_test.go +10 -4
  201. package/internal/graph/build_releases_the_scratch_it_no_longer_reads_test.go +22 -15
  202. package/internal/graph/decorators.go +18 -0
  203. package/internal/graph/decorators_capture_name_and_literal_arguments_test.go +9 -4
  204. package/internal/graph/diagnostics.go +21 -8
  205. package/internal/graph/doc_refs_are_the_use_the_checker_already_counts_test.go +25 -13
  206. package/internal/graph/doc_refs_resolve_documentation_links_test.go +19 -15
  207. package/internal/graph/doc_tags.go +28 -19
  208. package/internal/graph/doc_tags_are_claimed_before_they_are_read_test.go +16 -6
  209. package/internal/graph/doc_tags_capture_every_unrecognized_tag_test.go +9 -2
  210. package/internal/graph/doc_tags_read_only_what_the_parser_attached_test.go +12 -8
  211. package/internal/graph/doc_tags_stop_at_the_external_boundary_test.go +11 -1
  212. package/internal/graph/doc_tags_survive_line_endings_and_repeated_blocks_test.go +16 -6
  213. package/internal/graph/dump.go +200 -51
  214. package/internal/graph/dump_checkout_paths_are_stable_test.go +9 -2
  215. package/internal/graph/dump_diagnostics_ride_the_generation_that_built_it_test.go +10 -11
  216. package/internal/graph/dump_evidence_skips_leading_trivia_test.go +8 -2
  217. package/internal/graph/dump_is_a_function_of_the_source_test.go +12 -13
  218. package/internal/graph/dump_never_serializes_a_list_as_null_test.go +9 -9
  219. package/internal/graph/dump_path_mapper_caches_alias_resolution_test.go +10 -2
  220. package/internal/graph/dump_path_mapper_rejects_unportable_roots_and_collisions_test.go +53 -0
  221. package/internal/graph/{dump_paths_are_portable_and_injective_test.go → dump_path_mapper_uses_portable_coordinates_test.go} +8 -43
  222. package/internal/graph/dump_paths.go +61 -25
  223. package/internal/graph/dump_paths_canonicalize_windows_short_root_test.go +45 -8
  224. package/internal/graph/dump_rejects_provenance_only_path_errors_test.go +5 -0
  225. package/internal/graph/dump_serializes_the_full_graph_test.go +13 -19
  226. package/internal/graph/dump_symlink_project_publishes_matching_base_test.go +8 -0
  227. package/internal/graph/dump_uses_ecma_line_terminators_test.go +12 -6
  228. package/internal/graph/duplicate_variable_object_members_keep_first_declaration_test.go +11 -8
  229. package/internal/graph/edge_spans_point_to_resolved_usage_test.go +13 -5
  230. package/internal/graph/edges.go +44 -47
  231. package/internal/graph/edges_cover_class_level_references_test.go +14 -11
  232. package/internal/graph/enum_initializer_calls_are_edges_test.go +13 -3
  233. package/internal/graph/enum_members_carry_their_names_on_the_enum_node_test.go +19 -26
  234. package/internal/graph/exports.go +3 -5
  235. package/internal/graph/file_diagnostics_match_tsgo_code_and_location_test.go +9 -4
  236. package/internal/graph/file_diagnostics_report_code_column_and_message_test.go +11 -5
  237. package/internal/graph/function_locals_do_not_collide_test.go +27 -7
  238. package/internal/graph/gitignore.go +25 -12
  239. package/internal/graph/graph.go +167 -52
  240. package/internal/graph/heritage_edges_cover_implements_and_interface_extends_test.go +11 -3
  241. package/internal/graph/heritage_edges_keep_extends_and_implements_to_same_base_test.go +6 -0
  242. package/internal/graph/heritage_edges_record_extends_versus_implements_origin_test.go +9 -3
  243. package/internal/graph/heritage_edges_traverse_barrels_and_stop_at_external_leaves_test.go +11 -4
  244. package/internal/graph/line_model.go +44 -25
  245. package/internal/graph/literals.go +6 -7
  246. package/internal/graph/literals_are_absent_when_the_type_admits_more_than_it_can_name_test.go +10 -5
  247. package/internal/graph/literals_cover_enum_members_the_graph_has_no_nodes_for_test.go +15 -17
  248. package/internal/graph/literals_do_not_depend_on_declaration_line_wrapping_test.go +10 -9
  249. package/internal/graph/literals_render_every_value_in_typescript_source_form_test.go +11 -11
  250. package/internal/graph/literals_resolve_through_alias_indirection_test.go +11 -11
  251. package/internal/graph/member_relation_edges_follow_checker_validity_test.go +11 -2
  252. package/internal/graph/member_relation_edges_preserve_checker_boundaries_test.go +11 -1
  253. package/internal/graph/member_relation_edges_reject_checker_invalid_pairs_test.go +12 -7
  254. package/internal/graph/namespace_dotted_form_qualifies_deeply_test.go +12 -3
  255. package/internal/graph/namespace_members_become_qualified_nodes_and_edges_test.go +12 -2
  256. package/internal/graph/node_identity_is_position_invariant_test.go +8 -2
  257. package/internal/graph/node_ids_preserve_hash_bearing_components_test.go +10 -2
  258. package/internal/graph/node_modifiers_emit_union_strings_test.go +13 -12
  259. package/internal/graph/nodes_are_marked_exported_through_the_export_table_test.go +12 -14
  260. package/internal/graph/object_literal_declarations_resolve_calls_test.go +170 -0
  261. package/internal/graph/object_literal_members_ride_on_the_snapshot_test.go +14 -13
  262. package/internal/graph/object_member_signatures_preserve_literal_whitespace_test.go +11 -7
  263. package/internal/graph/object_members.go +100 -1
  264. package/internal/graph/overload_implementation_replaces_signature_test.go +13 -2
  265. package/internal/graph/property_member_edges_remain_owner_visible_test.go +9 -3
  266. package/internal/graph/provenance.go +172 -87
  267. package/internal/graph/resolve.go +46 -12
  268. package/internal/graph/resolve_prefers_implementation_declaration_test.go +10 -2
  269. package/internal/graph/resolve_unwraps_barrel_reexport_to_real_declaration_test.go +16 -20
  270. package/internal/graph/source.go +16 -6
  271. package/internal/graph/source_texts_cover_every_resident_program_source_test.go +11 -7
  272. package/internal/graph/type_ref_edges_cover_typeof_as_satisfies_test.go +21 -2
  273. package/internal/graph/type_ref_edges_resolve_named_types_across_files_test.go +8 -3
  274. package/internal/graph/value_access_edges_cover_properties_test.go +11 -3
  275. package/internal/graph/value_call_edges_attribute_function_assignments_to_members_test.go +10 -4
  276. package/internal/graph/value_call_edges_cover_jsx_components_test.go +12 -8
  277. package/internal/graph/value_call_edges_cover_methods_and_constructors_test.go +12 -9
  278. package/internal/graph/value_call_edges_cover_variable_bound_callables_test.go +9 -3
  279. package/internal/graph/value_call_edges_do_not_double_record_invoked_member_access_test.go +10 -3
  280. package/internal/graph/value_call_edges_record_construct_versus_call_origin_test.go +12 -9
  281. package/internal/graph/value_call_edges_resolve_across_files_and_dedupe_test.go +10 -3
  282. package/internal/graph/value_call_edges_skip_self_and_unresolved_test.go +16 -5
  283. package/internal/graph/wire_node_ids_share_alias_resolution_test.go +10 -4
  284. package/internal/graphsymbols/position_helpers_follow_ecma_line_terminators_test.go +16 -4
  285. package/internal/graphsymbols/provider.go +278 -113
  286. package/internal/lspserver/lsp_clean_didopen_refreshes_compiler_state_test.go +14 -12
  287. package/internal/lspserver/lsp_completion_gate_never_refuses_a_matching_line_test.go +7 -1
  288. package/internal/lspserver/lsp_completion_hints_longest_trigger_wins_test.go +30 -5
  289. package/internal/lspserver/lsp_completion_hints_nearest_trigger_wins_test.go +5 -0
  290. package/internal/lspserver/lsp_completion_merges_into_upstream_response_test.go +23 -10
  291. package/internal/lspserver/lsp_completion_nearest_hint_replaces_nearest_filter_test.go +7 -1
  292. package/internal/lspserver/lsp_completion_preserves_completion_list_extensions_test.go +13 -5
  293. package/internal/lspserver/lsp_completion_refuses_hints_inside_a_string_literal_test.go +11 -7
  294. package/internal/lspserver/lsp_completion_replaces_full_filter_in_rank_order_test.go +12 -2
  295. package/internal/lspserver/lsp_completion_request.go +5 -26
  296. package/internal/lspserver/lsp_completion_scope.go +13 -10
  297. package/internal/lspserver/lsp_completion_scope_bench_test.go +11 -5
  298. package/internal/lspserver/lsp_completion_scope_classifies_regex_statement_and_operator_boundaries_test.go +8 -1
  299. package/internal/lspserver/lsp_completion_scope_ignores_jsdoc_bytes_in_literals_test.go +11 -10
  300. package/internal/lspserver/lsp_completion_scope_refuses_regex_hints_test.go +7 -3
  301. package/internal/lspserver/lsp_completion_trigger_uses_last_rune_test.go +6 -0
  302. package/internal/lspserver/lsp_deleted_watched_file_withdraws_plugin_diagnostics_test.go +11 -10
  303. package/internal/lspserver/lsp_didsave_keeps_the_incremental_changed_uri_path_test.go +12 -9
  304. package/internal/lspserver/lsp_document_diagnostics_omits_cached_project_when_current_result_has_none_test.go +17 -5
  305. package/internal/lspserver/lsp_envelope.go +84 -11
  306. package/internal/lspserver/lsp_executable_project_input_change_requests_launcher_restart_test.go +12 -9
  307. package/internal/lspserver/lsp_external_watched_change_retains_program_test.go +8 -2
  308. package/internal/lspserver/lsp_frame.go +42 -10
  309. package/internal/lspserver/lsp_hints_absence_is_not_an_error_test.go +16 -15
  310. package/internal/lspserver/lsp_hints_refresh_coalesces_concurrent_requests_test.go +21 -12
  311. package/internal/lspserver/lsp_hints_refresh_ignores_a_superseded_generation_test.go +20 -12
  312. package/internal/lspserver/lsp_hints_refresh_keeps_each_producer_isolated_test.go +30 -9
  313. package/internal/lspserver/lsp_hints_refresh_replaces_the_session_snapshot_test.go +25 -18
  314. package/internal/lspserver/lsp_hints_refresh_scheduled_by_editor_events_test.go +12 -12
  315. package/internal/lspserver/lsp_hints_refresh_serves_completion_while_running_test.go +21 -8
  316. package/internal/lspserver/lsp_index_byte_from_bounds_its_search_start_test.go +9 -7
  317. package/internal/lspserver/lsp_initialize_constrains_position_encoding_to_utf16_test.go +57 -21
  318. package/internal/lspserver/lsp_late_completion_trigger_is_reported_once_test.go +16 -17
  319. package/internal/lspserver/lsp_native_completion_hints_decode_flat_lint_wire_test.go +8 -2
  320. package/internal/lspserver/lsp_native_completion_hints_grouped_compatibility_boundary_test.go +5 -0
  321. package/internal/lspserver/lsp_native_plugin_source.go +381 -202
  322. package/internal/lspserver/lsp_native_plugin_source_ends_the_session_on_a_selection_input_test.go +234 -0
  323. package/internal/lspserver/lsp_native_reply_policies_test.go +475 -0
  324. package/internal/lspserver/lsp_native_reply_policy.go +232 -0
  325. package/internal/lspserver/lsp_native_resident.go +171 -57
  326. package/internal/lspserver/lsp_plugin.go +372 -68
  327. package/internal/lspserver/lsp_plugin_completion_resolve_stays_local_test.go +13 -4
  328. package/internal/lspserver/lsp_plugin_selection_inputs.go +283 -0
  329. package/internal/lspserver/lsp_plugin_selection_inputs_follow_directory_case_semantics_windows_test.go +81 -0
  330. package/internal/lspserver/lsp_position_conversions_span_astral_and_combining_runes_test.go +33 -11
  331. package/internal/lspserver/lsp_project_context_transport_identity_test.go +14 -2
  332. package/internal/lspserver/lsp_project_diagnostics.go +25 -4
  333. package/internal/lspserver/lsp_project_diagnostics_capability_is_independent_test.go +13 -2
  334. package/internal/lspserver/lsp_project_diagnostics_program_input_overlap_refreshes_all_producers_test.go +14 -4
  335. package/internal/lspserver/lsp_project_diagnostics_refresh_accumulates_owner_freshness_test.go +8 -2
  336. package/internal/lspserver/lsp_project_diagnostics_refresh_keeps_each_producer_last_good_test.go +10 -5
  337. package/internal/lspserver/lsp_project_diagnostics_refreshes_only_input_owners_test.go +14 -2
  338. package/internal/lspserver/lsp_project_diagnostics_resume_preserves_generation_test.go +8 -2
  339. package/internal/lspserver/lsp_project_diagnostics_translates_relative_client_project_test.go +15 -11
  340. package/internal/lspserver/lsp_project_input_ownership_resolves_declared_spellings_test.go +17 -8
  341. package/internal/lspserver/lsp_project_input_path_key_windows.go +16 -16
  342. package/internal/lspserver/lsp_project_input_path_key_windows_test.go +34 -18
  343. package/internal/lspserver/lsp_project_input_registration.go +5 -1
  344. package/internal/lspserver/lsp_project_input_registration_rechecks_selection_baseline_test.go +10 -4
  345. package/internal/lspserver/lsp_project_input_registration_reconciles_rejected_pending_request_test.go +5 -0
  346. package/internal/lspserver/lsp_project_input_registration_shapes_patterns_test.go +9 -3
  347. package/internal/lspserver/lsp_project_input_watchers_anchor_missing_paths_test.go +8 -3
  348. package/internal/lspserver/lsp_project_inputs.go +203 -59
  349. package/internal/lspserver/lsp_project_inputs_match_missing_exact_and_glob_test.go +10 -6
  350. package/internal/lspserver/lsp_project_inputs_reject_invalid_and_foreign_snapshots_test.go +25 -2
  351. package/internal/lspserver/lsp_proxy.go +239 -80
  352. package/internal/lspserver/lsp_refresh.go +16 -1
  353. package/internal/lspserver/lsp_reload_directories_compare_immediate_topology_test.go +66 -19
  354. package/internal/lspserver/lsp_reload_directories_separate_glob_territory_test.go +26 -6
  355. package/internal/lspserver/lsp_reload_file_fingerprint_preserves_raw_symlink_target_test.go +12 -6
  356. package/internal/lspserver/lsp_reload_fingerprints_read_a_junction_as_a_link_test.go +76 -0
  357. package/internal/lspserver/lsp_resident_falls_back_when_serve_unsupported_test.go +20 -13
  358. package/internal/lspserver/lsp_resident_invalidation_broadcasts_program_input_overlap_test.go +9 -4
  359. package/internal/lspserver/lsp_resident_invalidation_targets_project_input_owners_test.go +6 -1
  360. package/internal/lspserver/lsp_resident_maps_verb_args_test.go +5 -0
  361. package/internal/lspserver/lsp_same_transport_entries_are_deduplicated_test.go +10 -1
  362. package/internal/lspserver/lsp_server.go +124 -21
  363. package/internal/lspserver/lsp_symbols.go +92 -13
  364. package/internal/lspserver/lsp_watched_file_changes_reach_compiler_caches_test.go +11 -10
  365. package/internal/sourceprocess/complete_group.go +70 -0
  366. package/internal/sourceprocess/complete_group_preserves_original_wait_and_requires_independent_absence_test.go +145 -0
  367. package/internal/sourceprocess/contain_unix.go +143 -0
  368. package/internal/sourceprocess/contain_windows.go +442 -0
  369. package/internal/sourceprocess/darwin_group_retirement_preserves_phase_evidence_test.go +287 -0
  370. package/internal/sourceprocess/observe_exit_darwin.go +57 -0
  371. package/internal/sourceprocess/observe_exit_linux.go +27 -0
  372. package/internal/sourceprocess/observe_exit_other.go +11 -0
  373. package/internal/sourceprocess/reap_linux.go +31 -0
  374. package/internal/sourceprocess/reap_other.go +10 -0
  375. package/internal/sourceprocess/request_preserves_native_command_inputs_test.go +86 -0
  376. package/internal/sourceprocess/run.go +216 -0
  377. package/internal/sourceprocess/target_windows.go +211 -0
  378. package/internal/sourceprocess/windows_job_accounting_rejects_invalid_boundary_test.go +97 -0
  379. package/internal/sourceprocess/windows_target_owns_suspended_admission_test.go +179 -0
  380. package/internal/watchhelper/run.go +32 -0
  381. package/internal/watchhelper/run_linux.go +323 -0
  382. package/internal/watchhelper/run_linux_test.go +418 -0
  383. package/internal/watchhelper/run_other.go +16 -0
  384. package/internal/watchhelper/watchhelper.go +100 -0
  385. package/lib/TtscCompiler.d.ts +118 -21
  386. package/lib/TtscCompiler.js +175 -179
  387. package/lib/TtscCompiler.js.map +1 -1
  388. package/lib/TtscService.d.ts +66 -18
  389. package/lib/TtscService.js +81 -24
  390. package/lib/TtscService.js.map +1 -1
  391. package/lib/TtscServiceRequestOptions.d.ts +21 -0
  392. package/lib/TtscServiceRequestOptions.js +3 -0
  393. package/lib/TtscServiceRequestOptions.js.map +1 -0
  394. package/lib/compiler/internal/CapturedProcessOutput.d.ts +61 -0
  395. package/lib/compiler/internal/CapturedProcessOutput.js +3 -0
  396. package/lib/compiler/internal/CapturedProcessOutput.js.map +1 -0
  397. package/lib/compiler/internal/CompilerArgumentsInspection.d.ts +53 -0
  398. package/lib/compiler/internal/CompilerArgumentsInspection.js +173 -0
  399. package/lib/compiler/internal/CompilerArgumentsInspection.js.map +1 -0
  400. package/lib/compiler/internal/EmitOwnershipIndex.d.ts +92 -0
  401. package/lib/compiler/internal/EmitOwnershipIndex.js +215 -0
  402. package/lib/compiler/internal/EmitOwnershipIndex.js.map +1 -0
  403. package/lib/compiler/internal/PrivateCompilerOutput.d.ts +67 -0
  404. package/lib/compiler/internal/PrivateCompilerOutput.js +245 -0
  405. package/lib/compiler/internal/PrivateCompilerOutput.js.map +1 -0
  406. package/lib/compiler/internal/ResidentCheckProcess.d.ts +127 -0
  407. package/lib/compiler/internal/ResidentCheckProcess.js +403 -0
  408. package/lib/compiler/internal/ResidentCheckProcess.js.map +1 -0
  409. package/lib/compiler/internal/ResidentCheckProcessOptions.d.ts +29 -0
  410. package/lib/compiler/internal/ResidentCheckProcessOptions.js +3 -0
  411. package/lib/compiler/internal/ResidentCheckProcessOptions.js.map +1 -0
  412. package/lib/compiler/internal/ResidentCheckRequest.d.ts +37 -0
  413. package/lib/compiler/internal/ResidentCheckRequest.js +3 -0
  414. package/lib/compiler/internal/ResidentCheckRequest.js.map +1 -0
  415. package/lib/compiler/internal/ResidentCheckResult.d.ts +23 -0
  416. package/lib/compiler/internal/ResidentCheckResult.js +3 -0
  417. package/lib/compiler/internal/ResidentCheckResult.js.map +1 -0
  418. package/lib/compiler/internal/ResidentCheckTelemetry.d.ts +33 -0
  419. package/lib/compiler/internal/ResidentCheckTelemetry.js +3 -0
  420. package/lib/compiler/internal/ResidentCheckTelemetry.js.map +1 -0
  421. package/lib/compiler/internal/ResidentReplyKind.d.ts +18 -0
  422. package/lib/compiler/internal/ResidentReplyKind.js +3 -0
  423. package/lib/compiler/internal/ResidentReplyKind.js.map +1 -0
  424. package/lib/compiler/internal/ResidentTransformProcess.d.ts +83 -0
  425. package/lib/compiler/internal/ResidentTransformProcess.js +261 -0
  426. package/lib/compiler/internal/ResidentTransformProcess.js.map +1 -0
  427. package/lib/compiler/internal/ResidentTransformProcessOptions.d.ts +27 -0
  428. package/lib/compiler/internal/ResidentTransformProcessOptions.js +3 -0
  429. package/lib/compiler/internal/ResidentTransformProcessOptions.js.map +1 -0
  430. package/lib/compiler/internal/ResidentTransformReply.d.ts +51 -0
  431. package/lib/compiler/internal/ResidentTransformReply.js +79 -0
  432. package/lib/compiler/internal/ResidentTransformReply.js.map +1 -0
  433. package/lib/compiler/internal/ResidentTransformRequestOptions.d.ts +16 -0
  434. package/lib/compiler/internal/ResidentTransformRequestOptions.js +3 -0
  435. package/lib/compiler/internal/ResidentTransformRequestOptions.js.map +1 -0
  436. package/lib/compiler/internal/ResidentTransformRequests.d.ts +102 -0
  437. package/lib/compiler/internal/ResidentTransformRequests.js +172 -0
  438. package/lib/compiler/internal/ResidentTransformRequests.js.map +1 -0
  439. package/lib/compiler/internal/StartedResidentTransform.d.ts +27 -0
  440. package/lib/compiler/internal/StartedResidentTransform.js +3 -0
  441. package/lib/compiler/internal/StartedResidentTransform.js.map +1 -0
  442. package/lib/compiler/internal/TransformProjectWorkerReply.d.ts +34 -0
  443. package/lib/compiler/internal/TransformProjectWorkerReply.js +3 -0
  444. package/lib/compiler/internal/TransformProjectWorkerReply.js.map +1 -0
  445. package/lib/compiler/internal/TransformProjectWorkerRequest.d.ts +39 -0
  446. package/lib/compiler/internal/TransformProjectWorkerRequest.js +3 -0
  447. package/lib/compiler/internal/TransformProjectWorkerRequest.js.map +1 -0
  448. package/lib/compiler/internal/build/BuildExecution.d.ts +359 -0
  449. package/lib/compiler/internal/build/BuildExecution.js +977 -0
  450. package/lib/compiler/internal/build/BuildExecution.js.map +1 -0
  451. package/lib/compiler/internal/build/BuildTiming.d.ts +99 -0
  452. package/lib/compiler/internal/build/BuildTiming.js +113 -0
  453. package/lib/compiler/internal/build/BuildTiming.js.map +1 -0
  454. package/lib/compiler/internal/build/CompilerDiagnostics.d.ts +82 -0
  455. package/lib/compiler/internal/build/CompilerDiagnostics.js +270 -0
  456. package/lib/compiler/internal/build/CompilerDiagnostics.js.map +1 -0
  457. package/lib/compiler/internal/build/NativePluginArguments.d.ts +114 -0
  458. package/lib/compiler/internal/build/NativePluginArguments.js +255 -0
  459. package/lib/compiler/internal/build/NativePluginArguments.js.map +1 -0
  460. package/lib/compiler/internal/build/PassthroughFlags.d.ts +137 -0
  461. package/lib/compiler/internal/build/PassthroughFlags.js +213 -0
  462. package/lib/compiler/internal/build/PassthroughFlags.js.map +1 -0
  463. package/lib/compiler/internal/build/PluginFailureDiagnostics.d.ts +48 -0
  464. package/lib/compiler/internal/build/PluginFailureDiagnostics.js +68 -0
  465. package/lib/compiler/internal/build/PluginFailureDiagnostics.js.map +1 -0
  466. package/lib/compiler/internal/build/ResidentCheckEntryPlan.d.ts +38 -0
  467. package/lib/compiler/internal/build/ResidentCheckEntryPlan.js +3 -0
  468. package/lib/compiler/internal/build/ResidentCheckEntryPlan.js.map +1 -0
  469. package/lib/compiler/internal/build/ResidentCheckWatchChange.d.ts +30 -0
  470. package/lib/compiler/internal/build/ResidentCheckWatchChange.js +3 -0
  471. package/lib/compiler/internal/build/ResidentCheckWatchChange.js.map +1 -0
  472. package/lib/compiler/internal/build/ResidentCheckWatchSession.d.ts +113 -0
  473. package/lib/compiler/internal/build/ResidentCheckWatchSession.js +378 -0
  474. package/lib/compiler/internal/build/ResidentCheckWatchSession.js.map +1 -0
  475. package/lib/compiler/internal/build/RunBuildOptions.d.ts +130 -0
  476. package/lib/compiler/internal/build/RunBuildOptions.js +3 -0
  477. package/lib/compiler/internal/build/RunBuildOptions.js.map +1 -0
  478. package/lib/compiler/internal/build/TsgoArguments.d.ts +168 -0
  479. package/lib/compiler/internal/build/TsgoArguments.js +324 -0
  480. package/lib/compiler/internal/build/TsgoArguments.js.map +1 -0
  481. package/lib/compiler/internal/build/appendBuildOutput.d.ts +41 -0
  482. package/lib/compiler/internal/build/appendBuildOutput.js +182 -0
  483. package/lib/compiler/internal/build/appendBuildOutput.js.map +1 -0
  484. package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.d.ts +20 -0
  485. package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.js +40 -0
  486. package/lib/compiler/internal/build/bufferResidentCheckEntryRequests.js.map +1 -0
  487. package/lib/compiler/internal/build/createProcessDiagnostic.d.ts +19 -0
  488. package/lib/compiler/internal/build/createProcessDiagnostic.js +30 -0
  489. package/lib/compiler/internal/build/createProcessDiagnostic.js.map +1 -0
  490. package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.d.ts +22 -0
  491. package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.js +59 -0
  492. package/lib/compiler/internal/build/isAbsoluteLocalProjectInputPath.js.map +1 -0
  493. package/lib/compiler/internal/build/mergeProjectInputSnapshots.d.ts +28 -0
  494. package/lib/compiler/internal/build/mergeProjectInputSnapshots.js +121 -0
  495. package/lib/compiler/internal/build/mergeProjectInputSnapshots.js.map +1 -0
  496. package/lib/compiler/internal/build/normalizeBuildOutput.d.ts +29 -0
  497. package/lib/compiler/internal/build/normalizeBuildOutput.js +72 -0
  498. package/lib/compiler/internal/build/normalizeBuildOutput.js.map +1 -0
  499. package/lib/compiler/internal/build/parseProjectInputSnapshot.d.ts +26 -0
  500. package/lib/compiler/internal/build/parseProjectInputSnapshot.js +68 -0
  501. package/lib/compiler/internal/build/parseProjectInputSnapshot.js.map +1 -0
  502. package/lib/compiler/internal/build/planResidentCheckEntries.d.ts +21 -0
  503. package/lib/compiler/internal/build/planResidentCheckEntries.js +45 -0
  504. package/lib/compiler/internal/build/planResidentCheckEntries.js.map +1 -0
  505. package/lib/compiler/internal/build/privateRuntimeRootDir.d.ts +20 -0
  506. package/lib/compiler/internal/build/privateRuntimeRootDir.js +35 -0
  507. package/lib/compiler/internal/build/privateRuntimeRootDir.js.map +1 -0
  508. package/lib/compiler/internal/build/residentCheckRequest.d.ts +22 -0
  509. package/lib/compiler/internal/build/residentCheckRequest.js +42 -0
  510. package/lib/compiler/internal/build/residentCheckRequest.js.map +1 -0
  511. package/lib/compiler/internal/build/runBuild.d.ts +22 -0
  512. package/lib/compiler/internal/build/runBuild.js +44 -0
  513. package/lib/compiler/internal/build/runBuild.js.map +1 -0
  514. package/lib/compiler/internal/build/runExternalEmitProvenance.d.ts +61 -0
  515. package/lib/compiler/internal/build/runExternalEmitProvenance.js +451 -0
  516. package/lib/compiler/internal/build/runExternalEmitProvenance.js.map +1 -0
  517. package/lib/compiler/internal/build/takeResidentCheckEntryRequest.d.ts +18 -0
  518. package/lib/compiler/internal/build/takeResidentCheckEntryRequest.js +28 -0
  519. package/lib/compiler/internal/build/takeResidentCheckEntryRequest.js.map +1 -0
  520. package/lib/compiler/internal/buildNativeCompiler.d.ts +16 -1
  521. package/lib/compiler/internal/buildNativeCompiler.js +14 -2
  522. package/lib/compiler/internal/buildNativeCompiler.js.map +1 -1
  523. package/lib/compiler/internal/captureProcessOutput.d.ts +23 -23
  524. package/lib/compiler/internal/captureProcessOutput.js +38 -26
  525. package/lib/compiler/internal/captureProcessOutput.js.map +1 -1
  526. package/lib/compiler/internal/compileProjectInMemory.d.ts +30 -7
  527. package/lib/compiler/internal/compileProjectInMemory.js +103 -83
  528. package/lib/compiler/internal/compileProjectInMemory.js.map +1 -1
  529. package/lib/compiler/internal/ensureExecutable.d.ts +15 -0
  530. package/lib/compiler/internal/ensureExecutable.js +40 -0
  531. package/lib/compiler/internal/ensureExecutable.js.map +1 -0
  532. package/lib/compiler/internal/findNearestGoMod.d.ts +23 -0
  533. package/lib/compiler/internal/findNearestGoMod.js +48 -0
  534. package/lib/compiler/internal/findNearestGoMod.js.map +1 -0
  535. package/lib/compiler/internal/isOutsideRelativePath.d.ts +18 -0
  536. package/lib/compiler/internal/isOutsideRelativePath.js +30 -0
  537. package/lib/compiler/internal/isOutsideRelativePath.js.map +1 -0
  538. package/lib/compiler/internal/outputText.d.ts +16 -0
  539. package/lib/compiler/internal/outputText.js +25 -0
  540. package/lib/compiler/internal/outputText.js.map +1 -0
  541. package/lib/compiler/internal/packageRootDir.d.ts +25 -0
  542. package/lib/compiler/internal/packageRootDir.js +47 -0
  543. package/lib/compiler/internal/packageRootDir.js.map +1 -0
  544. package/lib/compiler/internal/parseNativeTransformOutput.d.ts +88 -0
  545. package/lib/compiler/internal/parseNativeTransformOutput.js +552 -0
  546. package/lib/compiler/internal/parseNativeTransformOutput.js.map +1 -0
  547. package/lib/compiler/internal/project/CompilerProjectSelection.d.ts +80 -0
  548. package/lib/compiler/internal/project/CompilerProjectSelection.js +187 -0
  549. package/lib/compiler/internal/project/CompilerProjectSelection.js.map +1 -0
  550. package/lib/compiler/internal/project/ConfigJsonText.d.ts +50 -0
  551. package/lib/compiler/internal/project/ConfigJsonText.js +61 -0
  552. package/lib/compiler/internal/project/ConfigJsonText.js.map +1 -0
  553. package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.d.ts +48 -0
  554. package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.js +119 -0
  555. package/lib/compiler/internal/project/compilerUsesCaseSensitiveFileNames.js.map +1 -0
  556. package/lib/compiler/internal/project/createNativeProjectContextArgs.d.ts +11 -8
  557. package/lib/compiler/internal/project/createNativeProjectContextArgs.js +15 -17
  558. package/lib/compiler/internal/project/createNativeProjectContextArgs.js.map +1 -1
  559. package/lib/compiler/internal/project/createNativeProjectContextJson.d.ts +19 -0
  560. package/lib/compiler/internal/project/createNativeProjectContextJson.js +27 -0
  561. package/lib/compiler/internal/project/createNativeProjectContextJson.js.map +1 -0
  562. package/lib/compiler/internal/project/parseJsonc.d.ts +42 -0
  563. package/lib/compiler/internal/project/parseJsonc.js +317 -0
  564. package/lib/compiler/internal/project/parseJsonc.js.map +1 -0
  565. package/lib/compiler/internal/project/readJsonFile.d.ts +21 -0
  566. package/lib/compiler/internal/project/readJsonFile.js +38 -0
  567. package/lib/compiler/internal/project/readJsonFile.js.map +1 -0
  568. package/lib/compiler/internal/project/readJsoncFile.d.ts +20 -0
  569. package/lib/compiler/internal/project/readJsoncFile.js +47 -0
  570. package/lib/compiler/internal/project/readJsoncFile.js.map +1 -0
  571. package/lib/compiler/internal/project/readProjectConfig.d.ts +29 -2
  572. package/lib/compiler/internal/project/readProjectConfig.js +105 -168
  573. package/lib/compiler/internal/project/readProjectConfig.js.map +1 -1
  574. package/lib/compiler/internal/project/resolveOwningProjectConfig.d.ts +65 -0
  575. package/lib/compiler/internal/project/resolveOwningProjectConfig.js +248 -0
  576. package/lib/compiler/internal/project/resolveOwningProjectConfig.js.map +1 -0
  577. package/lib/compiler/internal/project/resolveProjectConfig.d.ts +17 -14
  578. package/lib/compiler/internal/project/resolveProjectConfig.js +19 -122
  579. package/lib/compiler/internal/project/resolveProjectConfig.js.map +1 -1
  580. package/lib/compiler/internal/project/resolveProjectIdentity.d.ts +32 -0
  581. package/lib/compiler/internal/project/resolveProjectIdentity.js +144 -0
  582. package/lib/compiler/internal/project/resolveProjectIdentity.js.map +1 -0
  583. package/lib/compiler/internal/project/resolveTsconfigExtends.d.ts +38 -0
  584. package/lib/compiler/internal/project/resolveTsconfigExtends.js +163 -0
  585. package/lib/compiler/internal/project/resolveTsconfigExtends.js.map +1 -0
  586. package/lib/compiler/internal/project/selectReferencedProject.d.ts +26 -0
  587. package/lib/compiler/internal/project/selectReferencedProject.js +48 -0
  588. package/lib/compiler/internal/project/selectReferencedProject.js.map +1 -0
  589. package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.d.ts +34 -0
  590. package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.js +55 -0
  591. package/lib/compiler/internal/project/tsconfigExtendsFileCandidates.js.map +1 -0
  592. package/lib/compiler/internal/readEffectiveCompilerOptions.d.ts +54 -0
  593. package/lib/compiler/internal/readEffectiveCompilerOptions.js +116 -0
  594. package/lib/compiler/internal/readEffectiveCompilerOptions.js.map +1 -0
  595. package/lib/compiler/internal/resolveBinary.d.ts +17 -1
  596. package/lib/compiler/internal/resolveBinary.js +24 -9
  597. package/lib/compiler/internal/resolveBinary.js.map +1 -1
  598. package/lib/compiler/internal/resolveTsgo.d.ts +22 -7
  599. package/lib/compiler/internal/resolveTsgo.js +25 -9
  600. package/lib/compiler/internal/resolveTsgo.js.map +1 -1
  601. package/lib/compiler/internal/runNativeCheckWithObservations.d.ts +41 -0
  602. package/lib/compiler/internal/runNativeCheckWithObservations.js +185 -0
  603. package/lib/compiler/internal/runNativeCheckWithObservations.js.map +1 -0
  604. package/lib/compiler/internal/runSingleFileEmit.d.ts +26 -5
  605. package/lib/compiler/internal/runSingleFileEmit.js +82 -27
  606. package/lib/compiler/internal/runSingleFileEmit.js.map +1 -1
  607. package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.d.ts +2 -0
  608. package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.js +6 -0
  609. package/lib/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.js.map +1 -0
  610. package/lib/compiler/internal/sharedHost/SidecarEnvironment.d.ts +90 -0
  611. package/lib/compiler/internal/sharedHost/SidecarEnvironment.js +153 -0
  612. package/lib/compiler/internal/sharedHost/SidecarEnvironment.js.map +1 -0
  613. package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.d.ts +7 -0
  614. package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.js +11 -0
  615. package/lib/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.js.map +1 -0
  616. package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.d.ts +7 -0
  617. package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.js +11 -0
  618. package/lib/compiler/internal/sharedHost/TSGO_ARGS_ENV.js.map +1 -0
  619. package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.d.ts +24 -0
  620. package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.js +46 -0
  621. package/lib/compiler/internal/sharedHost/assertSharedHostCompatibility.js.map +1 -0
  622. package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.d.ts +15 -0
  623. package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.js +23 -0
  624. package/lib/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.js.map +1 -0
  625. package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.d.ts +23 -0
  626. package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.js +33 -0
  627. package/lib/compiler/internal/sharedHost/clearInheritedTsgoArgs.js.map +1 -0
  628. package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.d.ts +27 -0
  629. package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.js +41 -0
  630. package/lib/compiler/internal/sharedHost/inheritedSidecarEnv.js.map +1 -0
  631. package/lib/compiler/internal/sharedHost/isLinkedTransform.d.ts +16 -0
  632. package/lib/compiler/internal/sharedHost/isLinkedTransform.js +21 -0
  633. package/lib/compiler/internal/sharedHost/isLinkedTransform.js.map +1 -0
  634. package/lib/compiler/internal/sharedHost/linkedTransformPlugins.d.ts +19 -0
  635. package/lib/compiler/internal/sharedHost/linkedTransformPlugins.js +25 -0
  636. package/lib/compiler/internal/sharedHost/linkedTransformPlugins.js.map +1 -0
  637. package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.d.ts +25 -0
  638. package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.js +35 -0
  639. package/lib/compiler/internal/sharedHost/publishLinkedTransformPlugins.js.map +1 -0
  640. package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.d.ts +26 -0
  641. package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.js +36 -0
  642. package/lib/compiler/internal/sharedHost/resolvePluginConfigDir.js.map +1 -0
  643. package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.d.ts +22 -0
  644. package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.js +32 -0
  645. package/lib/compiler/internal/sharedHost/selectSharedHostPlugin.js.map +1 -0
  646. package/lib/compiler/internal/spawnNative.d.ts +15 -16
  647. package/lib/compiler/internal/spawnNative.js +17 -45
  648. package/lib/compiler/internal/spawnNative.js.map +1 -1
  649. package/lib/compiler/internal/startResidentTransform.d.ts +26 -17
  650. package/lib/compiler/internal/startResidentTransform.js +51 -36
  651. package/lib/compiler/internal/startResidentTransform.js.map +1 -1
  652. package/lib/compiler/internal/transformProjectInMemory.d.ts +42 -5
  653. package/lib/compiler/internal/transformProjectInMemory.js +189 -469
  654. package/lib/compiler/internal/transformProjectInMemory.js.map +1 -1
  655. package/lib/compiler/internal/transformProjectInWorker.d.ts +49 -0
  656. package/lib/compiler/internal/transformProjectInWorker.js +168 -0
  657. package/lib/compiler/internal/transformProjectInWorker.js.map +1 -0
  658. package/lib/compiler/internal/transformProjectWorker.js +37 -0
  659. package/lib/compiler/internal/transformProjectWorker.js.map +1 -0
  660. package/lib/flags/AnySubcommand.d.ts +18 -0
  661. package/lib/flags/AnySubcommand.js +3 -0
  662. package/lib/flags/AnySubcommand.js.map +1 -0
  663. package/lib/flags/COMPILER_ENUM_WHITESPACE.d.ts +2 -0
  664. package/lib/flags/COMPILER_ENUM_WHITESPACE.js +38 -0
  665. package/lib/flags/COMPILER_ENUM_WHITESPACE.js.map +1 -0
  666. package/lib/flags/COMPILER_OPTIONS.d.ts +6 -0
  667. package/lib/flags/COMPILER_OPTIONS.js +509 -0
  668. package/lib/flags/COMPILER_OPTIONS.js.map +1 -0
  669. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.d.ts +2 -0
  670. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js +13 -0
  671. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js.map +1 -0
  672. package/lib/flags/COMPILER_OPTION_KINDS.d.ts +2 -0
  673. package/lib/flags/COMPILER_OPTION_KINDS.js +14 -0
  674. package/lib/flags/COMPILER_OPTION_KINDS.js.map +1 -0
  675. package/lib/flags/CompilerOptionSpec.d.ts +27 -0
  676. package/lib/flags/CompilerOptionSpec.js +3 -0
  677. package/lib/flags/CompilerOptionSpec.js.map +1 -0
  678. package/lib/flags/FLAG_BY_TOKEN.d.ts +8 -0
  679. package/lib/flags/FLAG_BY_TOKEN.js +34 -0
  680. package/lib/flags/FLAG_BY_TOKEN.js.map +1 -0
  681. package/lib/flags/FLAG_SCHEMA.d.ts +35 -0
  682. package/lib/flags/{schema.js → FLAG_SCHEMA.js} +47 -153
  683. package/lib/flags/FLAG_SCHEMA.js.map +1 -0
  684. package/lib/flags/FlagKind.d.ts +22 -0
  685. package/lib/flags/FlagKind.js +3 -0
  686. package/lib/flags/FlagKind.js.map +1 -0
  687. package/lib/flags/FlagLayer.d.ts +19 -0
  688. package/lib/flags/FlagLayer.js +3 -0
  689. package/lib/flags/FlagLayer.js.map +1 -0
  690. package/lib/flags/FlagSpec.d.ts +104 -0
  691. package/lib/flags/FlagSpec.js +3 -0
  692. package/lib/flags/FlagSpec.js.map +1 -0
  693. package/lib/flags/ParseOptions.d.ts +92 -0
  694. package/lib/flags/ParseOptions.js +3 -0
  695. package/lib/flags/ParseOptions.js.map +1 -0
  696. package/lib/flags/ParseResult.d.ts +37 -0
  697. package/lib/flags/ParseResult.js +3 -0
  698. package/lib/flags/ParseResult.js.map +1 -0
  699. package/lib/flags/TtscSubcommand.d.ts +14 -0
  700. package/lib/flags/TtscSubcommand.js +3 -0
  701. package/lib/flags/TtscSubcommand.js.map +1 -0
  702. package/lib/flags/TtsxSubcommand.d.ts +13 -0
  703. package/lib/flags/TtsxSubcommand.js +3 -0
  704. package/lib/flags/TtsxSubcommand.js.map +1 -0
  705. package/lib/flags/ValueValidator.d.ts +14 -0
  706. package/lib/flags/ValueValidator.js +3 -0
  707. package/lib/flags/ValueValidator.js.map +1 -0
  708. package/lib/flags/buildGoAllowList.d.ts +18 -0
  709. package/lib/flags/buildGoAllowList.js +45 -0
  710. package/lib/flags/buildGoAllowList.js.map +1 -0
  711. package/lib/flags/flagsForSubcommand.d.ts +18 -0
  712. package/lib/flags/flagsForSubcommand.js +23 -0
  713. package/lib/flags/flagsForSubcommand.js.map +1 -0
  714. package/lib/flags/getBoolean.d.ts +19 -0
  715. package/lib/flags/getBoolean.js +27 -0
  716. package/lib/flags/getBoolean.js.map +1 -0
  717. package/lib/flags/getNumber.d.ts +16 -0
  718. package/lib/flags/getNumber.js +24 -0
  719. package/lib/flags/getNumber.js.map +1 -0
  720. package/lib/flags/getString.d.ts +16 -0
  721. package/lib/flags/getString.js +24 -0
  722. package/lib/flags/getString.js.map +1 -0
  723. package/lib/flags/getStringList.d.ts +19 -0
  724. package/lib/flags/getStringList.js +24 -0
  725. package/lib/flags/getStringList.js.map +1 -0
  726. package/lib/flags/normalizeCompilerEnumValue.d.ts +20 -0
  727. package/lib/flags/normalizeCompilerEnumValue.js +40 -0
  728. package/lib/flags/normalizeCompilerEnumValue.js.map +1 -0
  729. package/lib/flags/normalizeFlagToken.d.ts +28 -0
  730. package/lib/flags/normalizeFlagToken.js +38 -0
  731. package/lib/flags/normalizeFlagToken.js.map +1 -0
  732. package/lib/flags/parseFlags.d.ts +18 -0
  733. package/lib/flags/parseFlags.js +288 -0
  734. package/lib/flags/parseFlags.js.map +1 -0
  735. package/lib/flags/readCompilerOptionOccurrence.d.ts +34 -0
  736. package/lib/flags/readCompilerOptionOccurrence.js +81 -0
  737. package/lib/flags/readCompilerOptionOccurrence.js.map +1 -0
  738. package/lib/flags/readCompilerOptionValues.d.ts +33 -0
  739. package/lib/flags/readCompilerOptionValues.js +58 -0
  740. package/lib/flags/readCompilerOptionValues.js.map +1 -0
  741. package/lib/flags/resolveFlagSpec.d.ts +21 -0
  742. package/lib/flags/resolveFlagSpec.js +32 -0
  743. package/lib/flags/resolveFlagSpec.js.map +1 -0
  744. package/lib/index.d.ts +8 -3
  745. package/lib/index.js +10 -3
  746. package/lib/index.js.map +1 -1
  747. package/lib/internal/CanonicalTempDirectoryOperations.d.ts +73 -0
  748. package/lib/internal/CanonicalTempDirectoryOperations.js +3 -0
  749. package/lib/internal/CanonicalTempDirectoryOperations.js.map +1 -0
  750. package/lib/internal/CompilerContextSnapshot.d.ts +66 -0
  751. package/lib/internal/CompilerContextSnapshot.js +121 -0
  752. package/lib/internal/CompilerContextSnapshot.js.map +1 -0
  753. package/lib/internal/CompilerResultAdapter.d.ts +129 -0
  754. package/lib/internal/CompilerResultAdapter.js +247 -0
  755. package/lib/internal/CompilerResultAdapter.js.map +1 -0
  756. package/lib/internal/E2ETrace.d.ts +219 -0
  757. package/lib/internal/E2ETrace.js +541 -0
  758. package/lib/internal/E2ETrace.js.map +1 -0
  759. package/lib/internal/IJavaScriptRuntimeCapabilities.d.ts +48 -0
  760. package/lib/internal/IJavaScriptRuntimeCapabilities.js +3 -0
  761. package/lib/internal/IJavaScriptRuntimeCapabilities.js.map +1 -0
  762. package/lib/internal/OwnedNativeProcess.d.ts +66 -0
  763. package/lib/internal/OwnedNativeProcess.js +317 -0
  764. package/lib/internal/OwnedNativeProcess.js.map +1 -0
  765. package/lib/internal/OwnedSynchronousProcess.d.ts +158 -0
  766. package/lib/internal/OwnedSynchronousProcess.js +171 -0
  767. package/lib/internal/OwnedSynchronousProcess.js.map +1 -0
  768. package/lib/internal/RetireLockDirectoryOperations.d.ts +77 -0
  769. package/lib/internal/RetireLockDirectoryOperations.js +3 -0
  770. package/lib/internal/RetireLockDirectoryOperations.js.map +1 -0
  771. package/lib/internal/SafeCacheCleanupTarget.d.ts +39 -0
  772. package/lib/internal/SafeCacheCleanupTarget.js +3 -0
  773. package/lib/internal/SafeCacheCleanupTarget.js.map +1 -0
  774. package/lib/internal/SourceNativeRetirement.d.ts +384 -0
  775. package/lib/internal/SourceNativeRetirement.js +892 -0
  776. package/lib/internal/SourceNativeRetirement.js.map +1 -0
  777. package/lib/internal/SpawnSyncOutputFiles.d.ts +28 -0
  778. package/lib/internal/SpawnSyncOutputFiles.js +3 -0
  779. package/lib/internal/SpawnSyncOutputFiles.js.map +1 -0
  780. package/lib/internal/cacheEntryExists.d.ts +13 -0
  781. package/lib/internal/cacheEntryExists.js +32 -0
  782. package/lib/internal/cacheEntryExists.js.map +1 -0
  783. package/lib/internal/createCanonicalTempDirectory.d.ts +23 -13
  784. package/lib/internal/createCanonicalTempDirectory.js +31 -12
  785. package/lib/internal/createCanonicalTempDirectory.js.map +1 -1
  786. package/lib/internal/isContendedCandidateRename.d.ts +27 -0
  787. package/lib/internal/isContendedCandidateRename.js +37 -0
  788. package/lib/internal/isContendedCandidateRename.js.map +1 -0
  789. package/lib/internal/isSpawnSyncFdExhaustion.d.ts +16 -0
  790. package/lib/internal/isSpawnSyncFdExhaustion.js +23 -0
  791. package/lib/internal/isSpawnSyncFdExhaustion.js.map +1 -0
  792. package/lib/internal/javascriptRuntimeCapabilities.d.ts +20 -0
  793. package/lib/internal/javascriptRuntimeCapabilities.js +142 -0
  794. package/lib/internal/javascriptRuntimeCapabilities.js.map +1 -0
  795. package/lib/internal/nativeBinary.d.ts +11 -0
  796. package/lib/internal/nativeBinary.js +16 -0
  797. package/lib/internal/nativeBinary.js.map +1 -0
  798. package/lib/internal/parseWindowsDirectoryCaseSensitivity.d.ts +24 -0
  799. package/lib/internal/parseWindowsDirectoryCaseSensitivity.js +47 -0
  800. package/lib/internal/parseWindowsDirectoryCaseSensitivity.js.map +1 -0
  801. package/lib/internal/pathIdentity/FilesystemPathIdentity.d.ts +43 -0
  802. package/lib/internal/pathIdentity/FilesystemPathIdentity.js +3 -0
  803. package/lib/internal/pathIdentity/FilesystemPathIdentity.js.map +1 -0
  804. package/lib/internal/pathIdentity/FilesystemPathIdentityContext.d.ts +176 -0
  805. package/lib/internal/pathIdentity/FilesystemPathIdentityContext.js +3 -0
  806. package/lib/internal/pathIdentity/FilesystemPathIdentityContext.js.map +1 -0
  807. package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.d.ts +100 -0
  808. package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.js +3 -0
  809. package/lib/internal/pathIdentity/FilesystemPathIdentityOperations.js.map +1 -0
  810. package/lib/internal/pathIdentity/ProjectInputPathIdentity.d.ts +20 -0
  811. package/lib/internal/pathIdentity/ProjectInputPathIdentity.js +3 -0
  812. package/lib/internal/pathIdentity/ProjectInputPathIdentity.js.map +1 -0
  813. package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.d.ts +20 -0
  814. package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.js +3 -0
  815. package/lib/internal/pathIdentity/ProjectInputPathIdentityContext.js.map +1 -0
  816. package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.d.ts +20 -0
  817. package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.js +3 -0
  818. package/lib/internal/pathIdentity/ProjectInputPathIdentityOperations.js.map +1 -0
  819. package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.d.ts +25 -0
  820. package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.js +336 -0
  821. package/lib/internal/pathIdentity/createFilesystemPathIdentityContext.js.map +1 -0
  822. package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.d.ts +28 -0
  823. package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.js +33 -0
  824. package/lib/internal/pathIdentity/createProjectInputPathIdentityContext.js.map +1 -0
  825. package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.d.ts +20 -0
  826. package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.js +33 -0
  827. package/lib/internal/pathIdentity/isFilesystemPathIdentityWithin.js.map +1 -0
  828. package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.d.ts +15 -0
  829. package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.js +22 -0
  830. package/lib/internal/pathIdentity/isProjectInputPathIdentityWithin.js.map +1 -0
  831. package/lib/internal/pathIdentity/resolveFilesystemPath.d.ts +22 -0
  832. package/lib/internal/pathIdentity/resolveFilesystemPath.js +44 -0
  833. package/lib/internal/pathIdentity/resolveFilesystemPath.js.map +1 -0
  834. package/lib/internal/pathIdentity/resolvePhysicalPath.d.ts +21 -0
  835. package/lib/internal/pathIdentity/resolvePhysicalPath.js +35 -0
  836. package/lib/internal/pathIdentity/resolvePhysicalPath.js.map +1 -0
  837. package/lib/internal/pathIdentity/resolveProjectInputPath.d.ts +14 -0
  838. package/lib/internal/pathIdentity/resolveProjectInputPath.js +21 -0
  839. package/lib/internal/pathIdentity/resolveProjectInputPath.js.map +1 -0
  840. package/lib/internal/pluginSource.d.ts +26 -0
  841. package/lib/internal/pluginSource.js +43 -0
  842. package/lib/internal/pluginSource.js.map +1 -0
  843. package/lib/internal/projectInputPathIdentity.d.ts +27 -31
  844. package/lib/internal/projectInputPathIdentity.js +37 -275
  845. package/lib/internal/projectInputPathIdentity.js.map +1 -1
  846. package/lib/internal/resolveNodeBinary.d.ts +9 -7
  847. package/lib/internal/resolveNodeBinary.js +14 -144
  848. package/lib/internal/resolveNodeBinary.js.map +1 -1
  849. package/lib/internal/resolveSafeCacheCleanupTargets.d.ts +27 -8
  850. package/lib/internal/resolveSafeCacheCleanupTargets.js +44 -11
  851. package/lib/internal/resolveSafeCacheCleanupTargets.js.map +1 -1
  852. package/lib/internal/restoreCompilerError.d.ts +21 -0
  853. package/lib/internal/restoreCompilerError.js +164 -0
  854. package/lib/internal/restoreCompilerError.js.map +1 -0
  855. package/lib/internal/retireLockDirectory.d.ts +45 -0
  856. package/lib/internal/retireLockDirectory.js +152 -0
  857. package/lib/internal/retireLockDirectory.js.map +1 -0
  858. package/lib/internal/runHoldingLock.d.ts +30 -0
  859. package/lib/internal/runHoldingLock.js +53 -0
  860. package/lib/internal/runHoldingLock.js.map +1 -0
  861. package/lib/internal/runtimeExecutableIdentity.d.ts +20 -0
  862. package/lib/internal/runtimeExecutableIdentity.js +171 -0
  863. package/lib/internal/runtimeExecutableIdentity.js.map +1 -0
  864. package/lib/internal/serializeCompilerError.d.ts +28 -0
  865. package/lib/internal/serializeCompilerError.js +138 -0
  866. package/lib/internal/serializeCompilerError.js.map +1 -0
  867. package/lib/internal/spawnSyncResilient.d.ts +21 -10
  868. package/lib/internal/spawnSyncResilient.js +31 -147
  869. package/lib/internal/spawnSyncResilient.js.map +1 -1
  870. package/lib/internal/spawnSyncWithLowDescriptors.d.ts +30 -0
  871. package/lib/internal/spawnSyncWithLowDescriptors.js +194 -0
  872. package/lib/internal/spawnSyncWithLowDescriptors.js.map +1 -0
  873. package/lib/internal/tsconfig.d.ts +16 -0
  874. package/lib/internal/tsconfig.js +33 -0
  875. package/lib/internal/tsconfig.js.map +1 -0
  876. package/lib/launcher/internal/PendingResidentCheckWatchChanges.d.ts +56 -0
  877. package/lib/launcher/internal/PendingResidentCheckWatchChanges.js +97 -0
  878. package/lib/launcher/internal/PendingResidentCheckWatchChanges.js.map +1 -0
  879. package/lib/launcher/internal/TtscBuildMode.d.ts +14 -0
  880. package/lib/launcher/internal/TtscBuildMode.js +3 -0
  881. package/lib/launcher/internal/TtscBuildMode.js.map +1 -0
  882. package/lib/launcher/internal/TtsxEntryOptions.d.ts +50 -0
  883. package/lib/launcher/internal/TtsxEntryOptions.js +94 -0
  884. package/lib/launcher/internal/TtsxEntryOptions.js.map +1 -0
  885. package/lib/launcher/internal/assertNoSolutionBuild.d.ts +17 -10
  886. package/lib/launcher/internal/assertNoSolutionBuild.js +16 -9
  887. package/lib/launcher/internal/assertNoSolutionBuild.js.map +1 -1
  888. package/lib/launcher/internal/assertTtsxNoWatch.d.ts +25 -0
  889. package/lib/launcher/internal/assertTtsxNoWatch.js +46 -0
  890. package/lib/launcher/internal/assertTtsxNoWatch.js.map +1 -0
  891. package/lib/launcher/internal/buildSingleRootProject.d.ts +108 -0
  892. package/lib/launcher/internal/buildSingleRootProject.js +229 -0
  893. package/lib/launcher/internal/buildSingleRootProject.js.map +1 -0
  894. package/lib/launcher/internal/getCompilerVersionText.d.ts +14 -1
  895. package/lib/launcher/internal/getCompilerVersionText.js +21 -6
  896. package/lib/launcher/internal/getCompilerVersionText.js.map +1 -1
  897. package/lib/launcher/internal/inlineServedSourceMap.d.ts +35 -0
  898. package/lib/launcher/internal/inlineServedSourceMap.js +255 -0
  899. package/lib/launcher/internal/inlineServedSourceMap.js.map +1 -0
  900. package/lib/launcher/internal/linkVirtualEntry.d.ts +31 -0
  901. package/lib/launcher/internal/linkVirtualEntry.js +87 -0
  902. package/lib/launcher/internal/linkVirtualEntry.js.map +1 -0
  903. package/lib/launcher/internal/parseCommonJsExports.d.ts +17 -0
  904. package/lib/launcher/internal/{commonJsExportMetadata.js → parseCommonJsExports.js} +13 -3
  905. package/lib/launcher/internal/parseCommonJsExports.js.map +1 -0
  906. package/lib/launcher/internal/parseTtscBuildArgs.d.ts +34 -0
  907. package/lib/launcher/internal/parseTtscBuildArgs.js +97 -0
  908. package/lib/launcher/internal/parseTtscBuildArgs.js.map +1 -0
  909. package/lib/launcher/internal/parseTtsxCLI.d.ts +35 -0
  910. package/lib/launcher/internal/parseTtsxCLI.js +187 -0
  911. package/lib/launcher/internal/parseTtsxCLI.js.map +1 -0
  912. package/lib/launcher/internal/prepareExecution.d.ts +49 -5
  913. package/lib/launcher/internal/prepareExecution.js +360 -324
  914. package/lib/launcher/internal/prepareExecution.js.map +1 -1
  915. package/lib/launcher/internal/prepareTtscBuildMode.d.ts +23 -0
  916. package/lib/launcher/internal/prepareTtscBuildMode.js +58 -0
  917. package/lib/launcher/internal/prepareTtscBuildMode.js.map +1 -0
  918. package/lib/launcher/internal/resolveCacheDir.d.ts +12 -3
  919. package/lib/launcher/internal/resolveCacheDir.js +12 -3
  920. package/lib/launcher/internal/resolveCacheDir.js.map +1 -1
  921. package/lib/launcher/internal/resolveSingleFileOutput.d.ts +35 -0
  922. package/lib/launcher/internal/resolveSingleFileOutput.js +115 -0
  923. package/lib/launcher/internal/resolveSingleFileOutput.js.map +1 -0
  924. package/lib/launcher/internal/resolveTtscserverBinary.d.ts +15 -3
  925. package/lib/launcher/internal/resolveTtscserverBinary.js +19 -5
  926. package/lib/launcher/internal/resolveTtscserverBinary.js.map +1 -1
  927. package/lib/launcher/internal/runTtsc.d.ts +23 -23
  928. package/lib/launcher/internal/runTtsc.js +336 -286
  929. package/lib/launcher/internal/runTtsc.js.map +1 -1
  930. package/lib/launcher/internal/runTtsx.d.ts +32 -4
  931. package/lib/launcher/internal/runTtsx.js +286 -138
  932. package/lib/launcher/internal/runTtsx.js.map +1 -1
  933. package/lib/launcher/internal/runtime/CommonJsRuntimeSource.d.ts +92 -0
  934. package/lib/launcher/internal/runtime/CommonJsRuntimeSource.js +354 -0
  935. package/lib/launcher/internal/runtime/CommonJsRuntimeSource.js.map +1 -0
  936. package/lib/launcher/internal/runtime/DependencyBuildAdmission.d.ts +72 -0
  937. package/lib/launcher/internal/runtime/DependencyBuildAdmission.js +120 -0
  938. package/lib/launcher/internal/runtime/DependencyBuildAdmission.js.map +1 -0
  939. package/lib/launcher/internal/runtime/DependencyBuildGeneration.d.ts +185 -0
  940. package/lib/launcher/internal/runtime/DependencyBuildGeneration.js +153 -0
  941. package/lib/launcher/internal/runtime/DependencyBuildGeneration.js.map +1 -0
  942. package/lib/launcher/internal/runtime/DependencyBuildLockFence.d.ts +22 -0
  943. package/lib/launcher/internal/runtime/DependencyBuildLockFence.js +3 -0
  944. package/lib/launcher/internal/runtime/DependencyBuildLockFence.js.map +1 -0
  945. package/lib/launcher/internal/runtime/DependencyBuildLockLease.d.ts +22 -0
  946. package/lib/launcher/internal/runtime/DependencyBuildLockLease.js +3 -0
  947. package/lib/launcher/internal/runtime/DependencyBuildLockLease.js.map +1 -0
  948. package/lib/launcher/internal/runtime/DependencyBuildLockObservation.d.ts +41 -0
  949. package/lib/launcher/internal/runtime/DependencyBuildLockObservation.js +3 -0
  950. package/lib/launcher/internal/runtime/DependencyBuildLockObservation.js.map +1 -0
  951. package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.d.ts +83 -0
  952. package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.js +126 -0
  953. package/lib/launcher/internal/runtime/DependencyBuildLockProtocol.js.map +1 -0
  954. package/lib/launcher/internal/runtime/OwnedProjectSource.d.ts +112 -0
  955. package/lib/launcher/internal/runtime/OwnedProjectSource.js +59 -0
  956. package/lib/launcher/internal/runtime/OwnedProjectSource.js.map +1 -0
  957. package/lib/launcher/internal/runtime/OwningModuleOptions.d.ts +21 -0
  958. package/lib/launcher/internal/runtime/OwningModuleOptions.js +3 -0
  959. package/lib/launcher/internal/runtime/OwningModuleOptions.js.map +1 -0
  960. package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.d.ts +89 -0
  961. package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.js +115 -0
  962. package/lib/launcher/internal/runtime/PluginDescriptorInputObservation.js.map +1 -0
  963. package/lib/launcher/internal/runtime/ProcessOwnedDirectory.d.ts +168 -0
  964. package/lib/launcher/internal/runtime/ProcessOwnedDirectory.js +251 -0
  965. package/lib/launcher/internal/runtime/ProcessOwnedDirectory.js.map +1 -0
  966. package/lib/launcher/internal/runtime/ResolveResult.d.ts +24 -0
  967. package/lib/launcher/internal/runtime/ResolveResult.js +3 -0
  968. package/lib/launcher/internal/runtime/ResolveResult.js.map +1 -0
  969. package/lib/launcher/internal/runtime/RuntimeEmitProvenance.d.ts +38 -0
  970. package/lib/launcher/internal/runtime/RuntimeEmitProvenance.js +60 -0
  971. package/lib/launcher/internal/runtime/RuntimeEmitProvenance.js.map +1 -0
  972. package/lib/launcher/internal/runtime/RuntimeEntryPreparer.d.ts +22 -0
  973. package/lib/launcher/internal/runtime/RuntimeEntryPreparer.js +3 -0
  974. package/lib/launcher/internal/runtime/RuntimeEntryPreparer.js.map +1 -0
  975. package/lib/launcher/internal/runtime/RuntimeFilesystem.d.ts +52 -0
  976. package/lib/launcher/internal/runtime/RuntimeFilesystem.js +73 -0
  977. package/lib/launcher/internal/runtime/RuntimeFilesystem.js.map +1 -0
  978. package/lib/launcher/internal/runtime/RuntimeHookOptions.d.ts +22 -0
  979. package/lib/launcher/internal/runtime/RuntimeHookOptions.js +3 -0
  980. package/lib/launcher/internal/runtime/RuntimeHookOptions.js.map +1 -0
  981. package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.d.ts +53 -0
  982. package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.js +88 -0
  983. package/lib/launcher/internal/runtime/RuntimeIsolatedEmit.js.map +1 -0
  984. package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.d.ts +78 -0
  985. package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.js +256 -0
  986. package/lib/launcher/internal/runtime/RuntimeLoaderCapabilities.js.map +1 -0
  987. package/lib/launcher/internal/runtime/RuntimeManifest.d.ts +65 -0
  988. package/lib/launcher/internal/runtime/RuntimeManifest.js +3 -0
  989. package/lib/launcher/internal/runtime/RuntimeManifest.js.map +1 -0
  990. package/lib/launcher/internal/runtime/RuntimeManifestRegistry.d.ts +95 -0
  991. package/lib/launcher/internal/runtime/RuntimeManifestRegistry.js +268 -0
  992. package/lib/launcher/internal/runtime/RuntimeManifestRegistry.js.map +1 -0
  993. package/lib/launcher/internal/runtime/RuntimeModuleFormat.d.ts +60 -0
  994. package/lib/launcher/internal/runtime/RuntimeModuleFormat.js +249 -0
  995. package/lib/launcher/internal/runtime/RuntimeModuleFormat.js.map +1 -0
  996. package/lib/launcher/internal/runtime/RuntimeProjectOwnership.d.ts +50 -0
  997. package/lib/launcher/internal/runtime/RuntimeProjectOwnership.js +134 -0
  998. package/lib/launcher/internal/runtime/RuntimeProjectOwnership.js.map +1 -0
  999. package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.d.ts +11 -0
  1000. package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.js +15 -0
  1001. package/lib/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.js.map +1 -0
  1002. package/lib/launcher/internal/runtime/acquireDependencyBuildLock.d.ts +22 -0
  1003. package/lib/launcher/internal/runtime/acquireDependencyBuildLock.js +74 -0
  1004. package/lib/launcher/internal/runtime/acquireDependencyBuildLock.js.map +1 -0
  1005. package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.d.ts +30 -0
  1006. package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.js +83 -0
  1007. package/lib/launcher/internal/runtime/checkNodeRuntimeSupport.js.map +1 -0
  1008. package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.d.ts +30 -0
  1009. package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.js +52 -0
  1010. package/lib/launcher/internal/runtime/claimRuntimeProjectDirectory.js.map +1 -0
  1011. package/lib/launcher/internal/runtime/commonJsExportNames.d.ts +21 -0
  1012. package/lib/launcher/internal/runtime/commonJsExportNames.js +68 -0
  1013. package/lib/launcher/internal/runtime/commonJsExportNames.js.map +1 -0
  1014. package/lib/launcher/internal/runtime/commonJsImportFacade.d.ts +32 -0
  1015. package/lib/launcher/internal/runtime/commonJsImportFacade.js +56 -0
  1016. package/lib/launcher/internal/runtime/commonJsImportFacade.js.map +1 -0
  1017. package/lib/launcher/internal/runtime/dependencyCacheKey.d.ts +36 -0
  1018. package/lib/launcher/internal/runtime/dependencyCacheKey.js +57 -0
  1019. package/lib/launcher/internal/runtime/dependencyCacheKey.js.map +1 -0
  1020. package/lib/launcher/internal/runtime/dependencyCacheRoot.d.ts +32 -0
  1021. package/lib/launcher/internal/runtime/dependencyCacheRoot.js +98 -0
  1022. package/lib/launcher/internal/runtime/dependencyCacheRoot.js.map +1 -0
  1023. package/lib/launcher/internal/runtime/inspectDependencyBuildLock.d.ts +23 -0
  1024. package/lib/launcher/internal/runtime/inspectDependencyBuildLock.js +126 -0
  1025. package/lib/launcher/internal/runtime/inspectDependencyBuildLock.js.map +1 -0
  1026. package/lib/launcher/internal/runtime/installRuntimeHooks.d.ts +58 -0
  1027. package/lib/launcher/internal/runtime/installRuntimeHooks.js +1988 -0
  1028. package/lib/launcher/internal/runtime/installRuntimeHooks.js.map +1 -0
  1029. package/lib/launcher/internal/runtime/interopProbe.d.ts +8 -0
  1030. package/lib/launcher/internal/runtime/interopProbe.js +3 -0
  1031. package/lib/launcher/internal/runtime/interopProbe.js.map +1 -0
  1032. package/lib/launcher/internal/runtime/isLocalProcessGone.d.ts +33 -0
  1033. package/lib/launcher/internal/runtime/isLocalProcessGone.js +60 -0
  1034. package/lib/launcher/internal/runtime/isLocalProcessGone.js.map +1 -0
  1035. package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.d.ts +28 -0
  1036. package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.js +50 -0
  1037. package/lib/launcher/internal/runtime/observeMappedDescriptorResolution.js.map +1 -0
  1038. package/lib/launcher/internal/runtime/projectModuleOptions.d.ts +16 -0
  1039. package/lib/launcher/internal/runtime/projectModuleOptions.js +28 -0
  1040. package/lib/launcher/internal/runtime/projectModuleOptions.js.map +1 -0
  1041. package/lib/launcher/internal/runtime/readDependencyCache.d.ts +28 -0
  1042. package/lib/launcher/internal/runtime/readDependencyCache.js +83 -0
  1043. package/lib/launcher/internal/runtime/readDependencyCache.js.map +1 -0
  1044. package/lib/launcher/internal/runtime/realPath.d.ts +22 -0
  1045. package/lib/launcher/internal/runtime/realPath.js +37 -0
  1046. package/lib/launcher/internal/runtime/realPath.js.map +1 -0
  1047. package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.d.ts +17 -0
  1048. package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.js +23 -0
  1049. package/lib/launcher/internal/runtime/reclaimDependencyBuildLock.js.map +1 -0
  1050. package/lib/launcher/internal/runtime/releaseDependencyBuildLock.d.ts +17 -0
  1051. package/lib/launcher/internal/runtime/releaseDependencyBuildLock.js +23 -0
  1052. package/lib/launcher/internal/runtime/releaseDependencyBuildLock.js.map +1 -0
  1053. package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.d.ts +34 -0
  1054. package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.js +88 -0
  1055. package/lib/launcher/internal/runtime/resolveRuntimeCleanTargets.js.map +1 -0
  1056. package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.d.ts +20 -0
  1057. package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.js +30 -0
  1058. package/lib/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.js.map +1 -0
  1059. package/lib/launcher/internal/runtime/runtimeRunKey.d.ts +24 -0
  1060. package/lib/launcher/internal/runtime/runtimeRunKey.js +36 -0
  1061. package/lib/launcher/internal/runtime/runtimeRunKey.js.map +1 -0
  1062. package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.d.ts +21 -0
  1063. package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.js +29 -0
  1064. package/lib/launcher/internal/runtime/selectRuntimePluginPolicy.js.map +1 -0
  1065. package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.d.ts +35 -0
  1066. package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.js +76 -0
  1067. package/lib/launcher/internal/runtime/withRuntimeDirectoryLock.js.map +1 -0
  1068. package/lib/launcher/internal/runtimeCompilerArgs.d.ts +35 -6
  1069. package/lib/launcher/internal/runtimeCompilerArgs.js +87 -58
  1070. package/lib/launcher/internal/runtimeCompilerArgs.js.map +1 -1
  1071. package/lib/launcher/internal/runtimeEmitProfile.d.ts +39 -0
  1072. package/lib/launcher/internal/runtimeEmitProfile.js +56 -0
  1073. package/lib/launcher/internal/runtimeEmitProfile.js.map +1 -0
  1074. package/lib/launcher/internal/runtimeHookPreload.js +4 -4
  1075. package/lib/launcher/internal/runtimeHookPreload.js.map +1 -1
  1076. package/lib/launcher/internal/runtimeOwnerPreload.d.ts +1 -0
  1077. package/lib/launcher/internal/runtimeOwnerPreload.js +43 -0
  1078. package/lib/launcher/internal/runtimeOwnerPreload.js.map +1 -0
  1079. package/lib/launcher/internal/singleRootProjectConfig.d.ts +34 -0
  1080. package/lib/launcher/internal/singleRootProjectConfig.js +39 -0
  1081. package/lib/launcher/internal/singleRootProjectConfig.js.map +1 -0
  1082. package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.d.ts +61 -0
  1083. package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.js +3 -0
  1084. package/lib/launcher/internal/ttscserver/ILSPPluginSelectionInputs.js.map +1 -0
  1085. package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.d.ts +95 -0
  1086. package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.js +270 -0
  1087. package/lib/launcher/internal/ttscserver/LSPProjectInputDigest.js.map +1 -0
  1088. package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.d.ts +46 -0
  1089. package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.js +91 -0
  1090. package/lib/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.js.map +1 -0
  1091. package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.d.ts +21 -0
  1092. package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.js +39 -0
  1093. package/lib/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.js.map +1 -0
  1094. package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.d.ts +18 -0
  1095. package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.js +27 -0
  1096. package/lib/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.js.map +1 -0
  1097. package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.d.ts +26 -0
  1098. package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.js +62 -0
  1099. package/lib/launcher/internal/ttscserver/materializeLSPPluginManifest.js.map +1 -0
  1100. package/lib/launcher/internal/ttscserver/needsStdio.d.ts +17 -0
  1101. package/lib/launcher/internal/ttscserver/needsStdio.js +36 -0
  1102. package/lib/launcher/internal/ttscserver/needsStdio.js.map +1 -0
  1103. package/lib/launcher/internal/ttscserver/runTtscserver.d.ts +25 -0
  1104. package/lib/launcher/internal/ttscserver/runTtscserver.js +439 -0
  1105. package/lib/launcher/internal/ttscserver/runTtscserver.js.map +1 -0
  1106. package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.d.ts +29 -0
  1107. package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.js +3 -0
  1108. package/lib/launcher/internal/watch/CompilerDirectoryWatchEventPlan.js.map +1 -0
  1109. package/lib/launcher/internal/watch/DirectoryWatcher.d.ts +44 -0
  1110. package/lib/launcher/internal/watch/DirectoryWatcher.js +3 -0
  1111. package/lib/launcher/internal/watch/DirectoryWatcher.js.map +1 -0
  1112. package/lib/launcher/internal/watch/FseventsStreams.d.ts +87 -0
  1113. package/lib/launcher/internal/watch/FseventsStreams.js +266 -0
  1114. package/lib/launcher/internal/watch/FseventsStreams.js.map +1 -0
  1115. package/lib/launcher/internal/watch/ProjectInputWatchRules.d.ts +92 -0
  1116. package/lib/launcher/internal/watch/ProjectInputWatchRules.js +163 -0
  1117. package/lib/launcher/internal/watch/ProjectInputWatchRules.js.map +1 -0
  1118. package/lib/launcher/internal/watch/WatchInputChange.d.ts +29 -0
  1119. package/lib/launcher/internal/watch/WatchInputChange.js +3 -0
  1120. package/lib/launcher/internal/watch/WatchInputChange.js.map +1 -0
  1121. package/lib/launcher/internal/watch/WatchPaths.d.ts +101 -0
  1122. package/lib/launcher/internal/watch/WatchPaths.js +150 -0
  1123. package/lib/launcher/internal/watch/WatchPaths.js.map +1 -0
  1124. package/lib/launcher/internal/watch/WatchTopology.d.ts +384 -0
  1125. package/lib/launcher/internal/{watchTopology.js → watch/WatchTopology.js} +726 -799
  1126. package/lib/launcher/internal/watch/WatchTopology.js.map +1 -0
  1127. package/lib/launcher/internal/watch/literalGlobRoot.d.ts +22 -0
  1128. package/lib/launcher/internal/watch/literalGlobRoot.js +45 -0
  1129. package/lib/launcher/internal/watch/literalGlobRoot.js.map +1 -0
  1130. package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.d.ts +40 -0
  1131. package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.js +69 -0
  1132. package/lib/launcher/internal/watch/planCompilerDirectoryWatchEvent.js.map +1 -0
  1133. package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.d.ts +19 -0
  1134. package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.js +52 -0
  1135. package/lib/launcher/internal/watch/projectInputActiveWatchDirectories.js.map +1 -0
  1136. package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.d.ts +21 -0
  1137. package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.js +55 -0
  1138. package/lib/launcher/internal/watch/projectInputAvailableWatchDirectory.js.map +1 -0
  1139. package/lib/launcher/internal/watch/projectInputEventShouldNotify.d.ts +21 -0
  1140. package/lib/launcher/internal/watch/projectInputEventShouldNotify.js +23 -0
  1141. package/lib/launcher/internal/watch/projectInputEventShouldNotify.js.map +1 -0
  1142. package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.d.ts +27 -0
  1143. package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.js +54 -0
  1144. package/lib/launcher/internal/watch/projectInputMembershipInvalidatesProgram.js.map +1 -0
  1145. package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.d.ts +26 -0
  1146. package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.js +100 -0
  1147. package/lib/launcher/internal/watch/projectInputReloadEventShouldNotify.js.map +1 -0
  1148. package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.d.ts +37 -0
  1149. package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.js +54 -0
  1150. package/lib/launcher/internal/watch/projectInputReplacementStrandsWatchers.js.map +1 -0
  1151. package/lib/launcher/internal/watch/projectInputTopologyMayAffect.d.ts +23 -0
  1152. package/lib/launcher/internal/watch/projectInputTopologyMayAffect.js +67 -0
  1153. package/lib/launcher/internal/watch/projectInputTopologyMayAffect.js.map +1 -0
  1154. package/lib/launcher/internal/watch/projectInputWatchDirectories.d.ts +22 -0
  1155. package/lib/launcher/internal/watch/projectInputWatchDirectories.js +30 -0
  1156. package/lib/launcher/internal/watch/projectInputWatchDirectories.js.map +1 -0
  1157. package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.d.ts +22 -0
  1158. package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.js +45 -0
  1159. package/lib/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.js.map +1 -0
  1160. package/lib/launcher/internal/watch/syncWatchers.d.ts +25 -0
  1161. package/lib/launcher/internal/watch/syncWatchers.js +61 -0
  1162. package/lib/launcher/internal/watch/syncWatchers.js.map +1 -0
  1163. package/lib/launcher/internal/watch/watchDirectory.d.ts +28 -0
  1164. package/lib/launcher/internal/watch/watchDirectory.js +46 -0
  1165. package/lib/launcher/internal/watch/watchDirectory.js.map +1 -0
  1166. package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.d.ts +28 -0
  1167. package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.js +38 -0
  1168. package/lib/launcher/internal/watch/watchDirectoryThroughFsWatch.js.map +1 -0
  1169. package/lib/launcher/ttscserver.js +1 -1
  1170. package/lib/launcher/ttscserver.js.map +1 -1
  1171. package/lib/launcher/ttsx.js +2 -3
  1172. package/lib/launcher/ttsx.js.map +1 -1
  1173. package/lib/plugin/CapabilityPluginResolver.d.ts +140 -0
  1174. package/lib/plugin/CapabilityPluginResolver.js +400 -0
  1175. package/lib/plugin/CapabilityPluginResolver.js.map +1 -0
  1176. package/lib/plugin/ITtscCapabilityPlugin.d.ts +87 -0
  1177. package/lib/plugin/ITtscCapabilityPlugin.js +3 -0
  1178. package/lib/plugin/ITtscCapabilityPlugin.js.map +1 -0
  1179. package/lib/plugin/internal/CapabilityPluginResult.d.ts +66 -0
  1180. package/lib/plugin/internal/CapabilityPluginResult.js +86 -0
  1181. package/lib/plugin/internal/CapabilityPluginResult.js.map +1 -0
  1182. package/lib/plugin/internal/CapabilityResolutionFormat.d.ts +114 -0
  1183. package/lib/plugin/internal/CapabilityResolutionFormat.js +229 -0
  1184. package/lib/plugin/internal/CapabilityResolutionFormat.js.map +1 -0
  1185. package/lib/plugin/internal/ITtscCapabilityPluginSource.d.ts +35 -0
  1186. package/lib/plugin/internal/ITtscCapabilityPluginSource.js +3 -0
  1187. package/lib/plugin/internal/ITtscCapabilityPluginSource.js.map +1 -0
  1188. package/lib/plugin/internal/ITtscCapabilityResolutionEntry.d.ts +49 -0
  1189. package/lib/plugin/internal/ITtscCapabilityResolutionEntry.js +3 -0
  1190. package/lib/plugin/internal/ITtscCapabilityResolutionEntry.js.map +1 -0
  1191. package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.d.ts +21 -0
  1192. package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.js +3 -0
  1193. package/lib/plugin/internal/ITtscCapabilityResolutionPlugin.js.map +1 -0
  1194. package/lib/plugin/internal/capabilityPluginWorker.d.ts +1 -0
  1195. package/lib/plugin/internal/capabilityPluginWorker.js +178 -0
  1196. package/lib/plugin/internal/capabilityPluginWorker.js.map +1 -0
  1197. package/lib/plugin/internal/decodeCapabilityCommandReply.d.ts +23 -0
  1198. package/lib/plugin/internal/decodeCapabilityCommandReply.js +25 -0
  1199. package/lib/plugin/internal/decodeCapabilityCommandReply.js.map +1 -0
  1200. package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.d.ts +15 -0
  1201. package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.js +182 -0
  1202. package/lib/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.js.map +1 -0
  1203. package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.d.ts +11 -0
  1204. package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.js +62 -0
  1205. package/lib/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.js.map +1 -0
  1206. package/lib/plugin/internal/load/PluginDescriptorAdmission.d.ts +46 -0
  1207. package/lib/plugin/internal/load/PluginDescriptorAdmission.js +72 -0
  1208. package/lib/plugin/internal/load/PluginDescriptorAdmission.js.map +1 -0
  1209. package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.d.ts +154 -0
  1210. package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.js +317 -0
  1211. package/lib/plugin/internal/load/PluginDescriptorEvaluationCache.js.map +1 -0
  1212. package/lib/plugin/internal/load/PluginPackageResolution.d.ts +208 -0
  1213. package/lib/plugin/internal/load/PluginPackageResolution.js +593 -0
  1214. package/lib/plugin/internal/load/PluginPackageResolution.js.map +1 -0
  1215. package/lib/plugin/internal/load/ProjectPluginEntries.d.ts +60 -0
  1216. package/lib/plugin/internal/load/ProjectPluginEntries.js +164 -0
  1217. package/lib/plugin/internal/load/ProjectPluginEntries.js.map +1 -0
  1218. package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.d.ts +13 -0
  1219. package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.js +21 -0
  1220. package/lib/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.js.map +1 -0
  1221. package/lib/plugin/internal/load/collectProjectHostInputs.d.ts +16 -0
  1222. package/lib/plugin/internal/load/collectProjectHostInputs.js +66 -0
  1223. package/lib/plugin/internal/load/collectProjectHostInputs.js.map +1 -0
  1224. package/lib/plugin/internal/load/composePluginSources.d.ts +20 -0
  1225. package/lib/plugin/internal/load/composePluginSources.js +95 -0
  1226. package/lib/plugin/internal/load/composePluginSources.js.map +1 -0
  1227. package/lib/plugin/internal/load/declaresHostInputReads.d.ts +24 -0
  1228. package/lib/plugin/internal/load/declaresHostInputReads.js +48 -0
  1229. package/lib/plugin/internal/load/declaresHostInputReads.js.map +1 -0
  1230. package/lib/plugin/internal/load/hasProjectPluginEntries.d.ts +21 -0
  1231. package/lib/plugin/internal/load/hasProjectPluginEntries.js +29 -0
  1232. package/lib/plugin/internal/load/hasProjectPluginEntries.js.map +1 -0
  1233. package/lib/plugin/internal/load/hashHostInputPaths.d.ts +17 -0
  1234. package/lib/plugin/internal/load/hashHostInputPaths.js +46 -0
  1235. package/lib/plugin/internal/load/hashHostInputPaths.js.map +1 -0
  1236. package/lib/plugin/internal/load/isRelativePluginSpecifier.d.ts +22 -0
  1237. package/lib/plugin/internal/load/isRelativePluginSpecifier.js +33 -0
  1238. package/lib/plugin/internal/load/isRelativePluginSpecifier.js.map +1 -0
  1239. package/lib/plugin/internal/load/loadProjectPlugins.d.ts +113 -0
  1240. package/lib/plugin/internal/load/loadProjectPlugins.js +1615 -0
  1241. package/lib/plugin/internal/load/loadProjectPlugins.js.map +1 -0
  1242. package/lib/plugin/internal/load/moduleResolutionBaseSelects.d.ts +42 -0
  1243. package/lib/plugin/internal/load/moduleResolutionBaseSelects.js +51 -0
  1244. package/lib/plugin/internal/load/moduleResolutionBaseSelects.js.map +1 -0
  1245. package/lib/plugin/internal/load/observeImportSearchRoots.d.ts +29 -0
  1246. package/lib/plugin/internal/load/observeImportSearchRoots.js +38 -0
  1247. package/lib/plugin/internal/load/observeImportSearchRoots.js.map +1 -0
  1248. package/lib/plugin/internal/load/pluginLabel.d.ts +15 -0
  1249. package/lib/plugin/internal/load/pluginLabel.js +25 -0
  1250. package/lib/plugin/internal/load/pluginLabel.js.map +1 -0
  1251. package/lib/plugin/internal/load/realpathHostInput.d.ts +14 -0
  1252. package/lib/plugin/internal/load/realpathHostInput.js +29 -0
  1253. package/lib/plugin/internal/load/realpathHostInput.js.map +1 -0
  1254. package/lib/plugin/internal/load/realpathHostInputPaths.d.ts +17 -0
  1255. package/lib/plugin/internal/load/realpathHostInputPaths.js +28 -0
  1256. package/lib/plugin/internal/load/realpathHostInputPaths.js.map +1 -0
  1257. package/lib/plugin/internal/load/rejectJsTransformFunctions.d.ts +13 -0
  1258. package/lib/plugin/internal/load/rejectJsTransformFunctions.js +22 -0
  1259. package/lib/plugin/internal/load/rejectJsTransformFunctions.js.map +1 -0
  1260. package/lib/plugin/internal/load/requirePluginSource.d.ts +14 -0
  1261. package/lib/plugin/internal/load/requirePluginSource.js +38 -0
  1262. package/lib/plugin/internal/load/requirePluginSource.js.map +1 -0
  1263. package/lib/plugin/internal/load/resolveNativeSource.d.ts +29 -0
  1264. package/lib/plugin/internal/load/resolveNativeSource.js +37 -0
  1265. package/lib/plugin/internal/load/resolveNativeSource.js.map +1 -0
  1266. package/lib/plugin/internal/load/validatePluginContributors.d.ts +22 -0
  1267. package/lib/plugin/internal/load/validatePluginContributors.js +86 -0
  1268. package/lib/plugin/internal/load/validatePluginContributors.js.map +1 -0
  1269. package/lib/plugin/internal/load/validatePluginSource.d.ts +14 -0
  1270. package/lib/plugin/internal/load/validatePluginSource.js +21 -0
  1271. package/lib/plugin/internal/load/validatePluginSource.js.map +1 -0
  1272. package/lib/plugin/internal/load/visitImportMappedCandidates.d.ts +36 -0
  1273. package/lib/plugin/internal/load/visitImportMappedCandidates.js +45 -0
  1274. package/lib/plugin/internal/load/visitImportMappedCandidates.js.map +1 -0
  1275. package/lib/plugin/internal/pluginDescriptorFailureReason.d.ts +23 -0
  1276. package/lib/plugin/internal/pluginDescriptorFailureReason.js +43 -0
  1277. package/lib/plugin/internal/pluginDescriptorFailureReason.js.map +1 -0
  1278. package/lib/plugin/internal/pluginDescriptorProcessFailure.d.ts +28 -0
  1279. package/lib/plugin/internal/pluginDescriptorProcessFailure.js +37 -0
  1280. package/lib/plugin/internal/pluginDescriptorProcessFailure.js.map +1 -0
  1281. package/lib/plugin/internal/readCapabilityResolution.d.ts +42 -0
  1282. package/lib/plugin/internal/readCapabilityResolution.js +158 -0
  1283. package/lib/plugin/internal/readCapabilityResolution.js.map +1 -0
  1284. package/lib/plugin/internal/receiveCapabilityFailure.d.ts +21 -0
  1285. package/lib/plugin/internal/receiveCapabilityFailure.js +28 -0
  1286. package/lib/plugin/internal/receiveCapabilityFailure.js.map +1 -0
  1287. package/lib/plugin/internal/source/CachePrunePolicy.d.ts +42 -0
  1288. package/lib/plugin/internal/source/CachePrunePolicy.js +47 -0
  1289. package/lib/plugin/internal/source/CachePrunePolicy.js.map +1 -0
  1290. package/lib/plugin/internal/source/GoBuildCacheCoordination.d.ts +159 -0
  1291. package/lib/plugin/internal/source/GoBuildCacheCoordination.js +475 -0
  1292. package/lib/plugin/internal/source/GoBuildCacheCoordination.js.map +1 -0
  1293. package/lib/plugin/internal/source/GoSourceInputs.d.ts +124 -0
  1294. package/lib/plugin/internal/source/GoSourceInputs.js +180 -0
  1295. package/lib/plugin/internal/source/GoSourceInputs.js.map +1 -0
  1296. package/lib/plugin/internal/source/GoToolResolution.d.ts +125 -0
  1297. package/lib/plugin/internal/source/GoToolResolution.js +278 -0
  1298. package/lib/plugin/internal/source/GoToolResolution.js.map +1 -0
  1299. package/lib/plugin/internal/source/IGoBuildCachePruneOptions.d.ts +30 -0
  1300. package/lib/plugin/internal/source/IGoBuildCachePruneOptions.js +3 -0
  1301. package/lib/plugin/internal/source/IGoBuildCachePruneOptions.js.map +1 -0
  1302. package/lib/plugin/internal/source/IPluginCachePruneOptions.d.ts +33 -0
  1303. package/lib/plugin/internal/source/IPluginCachePruneOptions.js +3 -0
  1304. package/lib/plugin/internal/source/IPluginCachePruneOptions.js.map +1 -0
  1305. package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.d.ts +27 -0
  1306. package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.js +3 -0
  1307. package/lib/plugin/internal/source/IPluginModuleReplaceDirectory.js.map +1 -0
  1308. package/lib/plugin/internal/source/ITtscBuildContributor.d.ts +18 -0
  1309. package/lib/plugin/internal/source/ITtscBuildContributor.js +3 -0
  1310. package/lib/plugin/internal/source/ITtscBuildContributor.js.map +1 -0
  1311. package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.d.ts +25 -0
  1312. package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.js +3 -0
  1313. package/lib/plugin/internal/source/ITtscSourceBuildCachePaths.js.map +1 -0
  1314. package/lib/plugin/internal/source/NativeSourcePackages.d.ts +155 -0
  1315. package/lib/plugin/internal/source/NativeSourcePackages.js +317 -0
  1316. package/lib/plugin/internal/source/NativeSourcePackages.js.map +1 -0
  1317. package/lib/plugin/internal/source/PluginBinaryUse.d.ts +66 -0
  1318. package/lib/plugin/internal/source/PluginBinaryUse.js +163 -0
  1319. package/lib/plugin/internal/source/PluginBinaryUse.js.map +1 -0
  1320. package/lib/plugin/internal/source/PluginBinaryWaitResult.d.ts +34 -0
  1321. package/lib/plugin/internal/source/PluginBinaryWaitResult.js +3 -0
  1322. package/lib/plugin/internal/source/PluginBinaryWaitResult.js.map +1 -0
  1323. package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.d.ts +90 -0
  1324. package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.js +207 -0
  1325. package/lib/plugin/internal/source/PluginBuildEnvironmentReadings.js.map +1 -0
  1326. package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.d.ts +128 -0
  1327. package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.js +209 -0
  1328. package/lib/plugin/internal/source/PluginBuildEnvironmentWitness.js.map +1 -0
  1329. package/lib/plugin/internal/source/PluginBuildLockFence.d.ts +25 -0
  1330. package/lib/plugin/internal/source/PluginBuildLockFence.js +3 -0
  1331. package/lib/plugin/internal/source/PluginBuildLockFence.js.map +1 -0
  1332. package/lib/plugin/internal/source/PluginBuildLockLease.d.ts +29 -0
  1333. package/lib/plugin/internal/source/PluginBuildLockLease.js +3 -0
  1334. package/lib/plugin/internal/source/PluginBuildLockLease.js.map +1 -0
  1335. package/lib/plugin/internal/source/PluginBuildLockObservation.d.ts +42 -0
  1336. package/lib/plugin/internal/source/PluginBuildLockObservation.js +3 -0
  1337. package/lib/plugin/internal/source/PluginBuildLockObservation.js.map +1 -0
  1338. package/lib/plugin/internal/source/PluginBuildLockOwner.d.ts +126 -0
  1339. package/lib/plugin/internal/source/PluginBuildLockOwner.js +165 -0
  1340. package/lib/plugin/internal/source/PluginBuildLockOwner.js.map +1 -0
  1341. package/lib/plugin/internal/source/PluginBuildLockProtocol.d.ts +234 -0
  1342. package/lib/plugin/internal/source/PluginBuildLockProtocol.js +287 -0
  1343. package/lib/plugin/internal/source/PluginBuildLockProtocol.js.map +1 -0
  1344. package/lib/plugin/internal/source/SourceBuildCacheLayout.d.ts +183 -0
  1345. package/lib/plugin/internal/source/SourceBuildCacheLayout.js +291 -0
  1346. package/lib/plugin/internal/source/SourceBuildCacheLayout.js.map +1 -0
  1347. package/lib/plugin/internal/source/SourceBuildFilesystemOperations.d.ts +32 -0
  1348. package/lib/plugin/internal/source/SourceBuildFilesystemOperations.js +3 -0
  1349. package/lib/plugin/internal/source/SourceBuildFilesystemOperations.js.map +1 -0
  1350. package/lib/plugin/internal/source/SourcePluginAdmission.d.ts +80 -0
  1351. package/lib/plugin/internal/source/SourcePluginAdmission.js +114 -0
  1352. package/lib/plugin/internal/source/SourcePluginAdmission.js.map +1 -0
  1353. package/lib/plugin/internal/source/SourcePluginWorkspace.d.ts +122 -0
  1354. package/lib/plugin/internal/source/SourcePluginWorkspace.js +307 -0
  1355. package/lib/plugin/internal/source/SourcePluginWorkspace.js.map +1 -0
  1356. package/lib/plugin/internal/source/acquirePluginBuildLock.d.ts +35 -0
  1357. package/lib/plugin/internal/source/acquirePluginBuildLock.js +176 -0
  1358. package/lib/plugin/internal/source/acquirePluginBuildLock.js.map +1 -0
  1359. package/lib/plugin/internal/source/autoQuoteGoModToken.d.ts +24 -0
  1360. package/lib/plugin/internal/source/autoQuoteGoModToken.js +110 -0
  1361. package/lib/plugin/internal/source/autoQuoteGoModToken.js.map +1 -0
  1362. package/lib/plugin/internal/source/buildSourcePlugin.d.ts +86 -0
  1363. package/lib/plugin/internal/source/buildSourcePlugin.js +857 -0
  1364. package/lib/plugin/internal/source/buildSourcePlugin.js.map +1 -0
  1365. package/lib/plugin/internal/source/collectPluginSourceDirectories.d.ts +30 -0
  1366. package/lib/plugin/internal/source/collectPluginSourceDirectories.js +77 -0
  1367. package/lib/plugin/internal/source/collectPluginSourceDirectories.js.map +1 -0
  1368. package/lib/plugin/internal/source/collectPluginSourceFiles.d.ts +40 -0
  1369. package/lib/plugin/internal/source/collectPluginSourceFiles.js +95 -0
  1370. package/lib/plugin/internal/source/collectPluginSourceFiles.js.map +1 -0
  1371. package/lib/plugin/internal/source/computeCacheKey.d.ts +73 -0
  1372. package/lib/plugin/internal/source/computeCacheKey.js +113 -0
  1373. package/lib/plugin/internal/source/computeCacheKey.js.map +1 -0
  1374. package/lib/plugin/internal/source/copiesPluginSourceEntry.d.ts +33 -0
  1375. package/lib/plugin/internal/source/copiesPluginSourceEntry.js +57 -0
  1376. package/lib/plugin/internal/source/copiesPluginSourceEntry.js.map +1 -0
  1377. package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.d.ts +22 -0
  1378. package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.js +60 -0
  1379. package/lib/plugin/internal/source/createExternalSourceSnapshotLayout.js.map +1 -0
  1380. package/lib/plugin/internal/source/ensureExecutableGoToolchain.d.ts +25 -0
  1381. package/lib/plugin/internal/source/ensureExecutableGoToolchain.js +96 -0
  1382. package/lib/plugin/internal/source/ensureExecutableGoToolchain.js.map +1 -0
  1383. package/lib/plugin/internal/source/formatDuration.d.ts +18 -0
  1384. package/lib/plugin/internal/source/formatDuration.js +36 -0
  1385. package/lib/plugin/internal/source/formatDuration.js.map +1 -0
  1386. package/lib/plugin/internal/source/formatGoWorkPath.d.ts +35 -0
  1387. package/lib/plugin/internal/source/formatGoWorkPath.js +42 -0
  1388. package/lib/plugin/internal/source/formatGoWorkPath.js.map +1 -0
  1389. package/lib/plugin/internal/source/hashPluginBuildEnvironment.d.ts +47 -0
  1390. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js +663 -0
  1391. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js.map +1 -0
  1392. package/lib/plugin/internal/source/inspectPluginBuildLock.d.ts +29 -0
  1393. package/lib/plugin/internal/source/inspectPluginBuildLock.js +285 -0
  1394. package/lib/plugin/internal/source/inspectPluginBuildLock.js.map +1 -0
  1395. package/lib/plugin/internal/source/isPathWithin.d.ts +16 -0
  1396. package/lib/plugin/internal/source/isPathWithin.js +28 -0
  1397. package/lib/plugin/internal/source/isPathWithin.js.map +1 -0
  1398. package/lib/plugin/internal/source/legacyGlobalCacheTargets.d.ts +24 -0
  1399. package/lib/plugin/internal/source/legacyGlobalCacheTargets.js +60 -0
  1400. package/lib/plugin/internal/source/legacyGlobalCacheTargets.js.map +1 -0
  1401. package/lib/plugin/internal/source/pluginBuildEnvironment.d.ts +31 -0
  1402. package/lib/plugin/internal/source/pluginBuildEnvironment.js +47 -0
  1403. package/lib/plugin/internal/source/pluginBuildEnvironment.js.map +1 -0
  1404. package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.d.ts +1 -0
  1405. package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.js +24 -0
  1406. package/lib/plugin/internal/source/pluginBuildEnvironmentWorker.js.map +1 -0
  1407. package/lib/plugin/internal/source/pluginBuildVersions.d.ts +31 -0
  1408. package/lib/plugin/internal/source/pluginBuildVersions.js +65 -0
  1409. package/lib/plugin/internal/source/pluginBuildVersions.js.map +1 -0
  1410. package/lib/plugin/internal/source/pluginModuleReplaceDirectories.d.ts +40 -0
  1411. package/lib/plugin/internal/source/pluginModuleReplaceDirectories.js +81 -0
  1412. package/lib/plugin/internal/source/pluginModuleReplaceDirectories.js.map +1 -0
  1413. package/lib/plugin/internal/source/pluginSourceCovers.d.ts +32 -0
  1414. package/lib/plugin/internal/source/pluginSourceCovers.js +54 -0
  1415. package/lib/plugin/internal/source/pluginSourceCovers.js.map +1 -0
  1416. package/lib/plugin/internal/source/pluginSourceDigest.d.ts +40 -0
  1417. package/lib/plugin/internal/source/pluginSourceDigest.js +60 -0
  1418. package/lib/plugin/internal/source/pluginSourceDigest.js.map +1 -0
  1419. package/lib/plugin/internal/source/pluginSourceFilesSignature.d.ts +38 -0
  1420. package/lib/plugin/internal/source/pluginSourceFilesSignature.js +53 -0
  1421. package/lib/plugin/internal/source/pluginSourceFilesSignature.js.map +1 -0
  1422. package/lib/plugin/internal/source/pluginSourceState.d.ts +47 -0
  1423. package/lib/plugin/internal/source/pluginSourceState.js +63 -0
  1424. package/lib/plugin/internal/source/pluginSourceState.js.map +1 -0
  1425. package/lib/plugin/internal/source/pluginSourceStateHolds.d.ts +34 -0
  1426. package/lib/plugin/internal/source/pluginSourceStateHolds.js +45 -0
  1427. package/lib/plugin/internal/source/pluginSourceStateHolds.js.map +1 -0
  1428. package/lib/plugin/internal/source/processPluginBuildEnvironment.d.ts +33 -0
  1429. package/lib/plugin/internal/source/processPluginBuildEnvironment.js +40 -0
  1430. package/lib/plugin/internal/source/processPluginBuildEnvironment.js.map +1 -0
  1431. package/lib/plugin/internal/source/pruneCacheFileRoot.d.ts +34 -0
  1432. package/lib/plugin/internal/source/pruneCacheFileRoot.js +120 -0
  1433. package/lib/plugin/internal/source/pruneCacheFileRoot.js.map +1 -0
  1434. package/lib/plugin/internal/source/pruneGoBuildCacheRoot.d.ts +28 -0
  1435. package/lib/plugin/internal/source/pruneGoBuildCacheRoot.js +185 -0
  1436. package/lib/plugin/internal/source/pruneGoBuildCacheRoot.js.map +1 -0
  1437. package/lib/plugin/internal/source/prunePluginCacheRoot.d.ts +46 -0
  1438. package/lib/plugin/internal/source/prunePluginCacheRoot.js +446 -0
  1439. package/lib/plugin/internal/source/prunePluginCacheRoot.js.map +1 -0
  1440. package/lib/plugin/internal/source/prunesPluginSourceDirectory.d.ts +21 -0
  1441. package/lib/plugin/internal/source/prunesPluginSourceDirectory.js +28 -0
  1442. package/lib/plugin/internal/source/prunesPluginSourceDirectory.js.map +1 -0
  1443. package/lib/plugin/internal/source/reclaimPluginBuildLock.d.ts +23 -0
  1444. package/lib/plugin/internal/source/reclaimPluginBuildLock.js +48 -0
  1445. package/lib/plugin/internal/source/reclaimPluginBuildLock.js.map +1 -0
  1446. package/lib/plugin/internal/source/recordCacheFileUse.d.ts +22 -0
  1447. package/lib/plugin/internal/source/recordCacheFileUse.js +43 -0
  1448. package/lib/plugin/internal/source/recordCacheFileUse.js.map +1 -0
  1449. package/lib/plugin/internal/source/releasePluginBuildLock.d.ts +33 -0
  1450. package/lib/plugin/internal/source/releasePluginBuildLock.js +100 -0
  1451. package/lib/plugin/internal/source/releasePluginBuildLock.js.map +1 -0
  1452. package/lib/plugin/internal/source/resolveCleanTargets.d.ts +26 -0
  1453. package/lib/plugin/internal/source/resolveCleanTargets.js +73 -0
  1454. package/lib/plugin/internal/source/resolveCleanTargets.js.map +1 -0
  1455. package/lib/plugin/internal/source/resolveGoCompiler.d.ts +29 -0
  1456. package/lib/plugin/internal/source/resolveGoCompiler.js +62 -0
  1457. package/lib/plugin/internal/source/resolveGoCompiler.js.map +1 -0
  1458. package/lib/plugin/internal/source/resolvePluginCacheRoot.d.ts +21 -0
  1459. package/lib/plugin/internal/source/resolvePluginCacheRoot.js +31 -0
  1460. package/lib/plugin/internal/source/resolvePluginCacheRoot.js.map +1 -0
  1461. package/lib/plugin/internal/source/resolvePluginGoModule.d.ts +34 -0
  1462. package/lib/plugin/internal/source/resolvePluginGoModule.js +65 -0
  1463. package/lib/plugin/internal/source/resolvePluginGoModule.js.map +1 -0
  1464. package/lib/plugin/internal/source/resolveSourceBuildCachePaths.d.ts +21 -0
  1465. package/lib/plugin/internal/source/resolveSourceBuildCachePaths.js +236 -0
  1466. package/lib/plugin/internal/source/resolveSourceBuildCachePaths.js.map +1 -0
  1467. package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.d.ts +29 -0
  1468. package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.js +68 -0
  1469. package/lib/plugin/internal/source/selectPluginModuleReplaceDirectories.js.map +1 -0
  1470. package/lib/plugin/internal/source/spawnGoTool.d.ts +22 -0
  1471. package/lib/plugin/internal/source/spawnGoTool.js +164 -0
  1472. package/lib/plugin/internal/source/spawnGoTool.js.map +1 -0
  1473. package/lib/plugin/internal/source/touchPluginCacheEntryInUse.d.ts +27 -0
  1474. package/lib/plugin/internal/source/touchPluginCacheEntryInUse.js +48 -0
  1475. package/lib/plugin/internal/source/touchPluginCacheEntryInUse.js.map +1 -0
  1476. package/lib/plugin/internal/source/waitForPluginBinary.d.ts +36 -0
  1477. package/lib/plugin/internal/source/waitForPluginBinary.js +94 -0
  1478. package/lib/plugin/internal/source/waitForPluginBinary.js.map +1 -0
  1479. package/lib/plugin/internal/source/windowsGoCommandArgs.d.ts +17 -0
  1480. package/lib/plugin/internal/source/windowsGoCommandArgs.js +23 -0
  1481. package/lib/plugin/internal/source/windowsGoCommandArgs.js.map +1 -0
  1482. package/lib/plugin/internal/source/withGoBuildCacheLease.d.ts +37 -0
  1483. package/lib/plugin/internal/source/withGoBuildCacheLease.js +87 -0
  1484. package/lib/plugin/internal/source/withGoBuildCacheLease.js.map +1 -0
  1485. package/lib/plugin/internal/writeCapabilityResolution.d.ts +80 -0
  1486. package/lib/plugin/internal/writeCapabilityResolution.js +196 -0
  1487. package/lib/plugin/internal/writeCapabilityResolution.js.map +1 -0
  1488. package/lib/plugin/resolveCapabilityPlugins.d.ts +53 -32
  1489. package/lib/plugin/resolveCapabilityPlugins.js +209 -38
  1490. package/lib/plugin/resolveCapabilityPlugins.js.map +1 -1
  1491. package/lib/register.js +20 -5
  1492. package/lib/register.js.map +1 -1
  1493. package/lib/structures/ITtscCompilerContext.d.ts +29 -11
  1494. package/lib/structures/ITtscCompilerDiagnostic.d.ts +24 -7
  1495. package/lib/structures/ITtscCompilerResult.d.ts +75 -25
  1496. package/lib/structures/ITtscCompilerTransformation.d.ts +287 -64
  1497. package/lib/structures/ITtscPlugin.d.ts +24 -8
  1498. package/lib/structures/ITtscPluginCapabilities.d.ts +55 -5
  1499. package/lib/structures/ITtscPluginContributor.d.ts +19 -8
  1500. package/lib/structures/ITtscPluginFactoryContext.d.ts +12 -3
  1501. package/lib/structures/ITtscProjectPluginConfig.d.ts +35 -10
  1502. package/lib/structures/TtscPluginStage.d.ts +9 -0
  1503. package/lib/structures/internal/ITtscLoadedNativePlugin.d.ts +19 -5
  1504. package/lib/structures/internal/ITtscParsedProjectConfig.d.ts +29 -3
  1505. package/lib/structures/internal/ITtscProjectIdentity.d.ts +21 -6
  1506. package/lib/structures/internal/ITtscProjectInputSnapshot.d.ts +23 -8
  1507. package/lib/structures/internal/ITtscProjectLocatorOptions.d.ts +18 -4
  1508. package/lib/structures/internal/TtscBuildOptions.d.ts +33 -14
  1509. package/lib/structures/internal/TtscBuildResult.d.ts +63 -4
  1510. package/lib/structures/internal/TtscCommonOptions.d.ts +47 -14
  1511. package/lib/structures/internal/TtscSingleFileEmitOptions.d.ts +46 -5
  1512. package/package.json +26 -12
  1513. package/shim/ast/enums_gen.go +4 -2
  1514. package/shim/ast/go.mod +5 -5
  1515. package/shim/ast/go.sum +10 -10
  1516. package/shim/ast/lint.go +1088 -20
  1517. package/shim/ast/parent.go +38 -22
  1518. package/shim/ast/safe_text.go +48 -26
  1519. package/shim/ast/shim.go +1307 -20
  1520. package/shim/ast/test/next_jsdoc_comment_location_reaches_variable_statement_test.go +51 -0
  1521. package/shim/ast/test/node_text_joins_multi_hop_qualified_name_test.go +24 -9
  1522. package/shim/ast/test/node_text_joins_one_hop_qualified_name_test.go +9 -5
  1523. package/shim/ast/test/node_text_returns_empty_for_nil_test.go +13 -5
  1524. package/shim/ast/test/node_text_returns_identifier_text_test.go +12 -5
  1525. package/shim/ast/test/node_text_skips_empty_qualified_left_test.go +35 -5
  1526. package/shim/astnav/go.mod +5 -5
  1527. package/shim/astnav/go.sum +12 -10
  1528. package/shim/astnav/shim.go +9 -0
  1529. package/shim/bundled/go.mod +7 -1
  1530. package/shim/bundled/go.sum +12 -0
  1531. package/shim/checker/enums_gen.go +4 -2
  1532. package/shim/checker/extra-shim.json +6 -0
  1533. package/shim/checker/go.mod +5 -5
  1534. package/shim/checker/go.sum +10 -10
  1535. package/shim/checker/node_builder_fields_gen.go +19 -0
  1536. package/shim/checker/shim.go +827 -114
  1537. package/shim/compiler/emit_sourcemap.go +68 -29
  1538. package/shim/compiler/emitassemble.go +36 -2
  1539. package/shim/compiler/emithook.go +13 -3
  1540. package/shim/compiler/go.mod +5 -5
  1541. package/shim/compiler/go.sum +10 -10
  1542. package/shim/compiler/incremental.go +56 -20
  1543. package/shim/compiler/resolution.go +92 -9
  1544. package/shim/core/enums_gen.go +2 -2
  1545. package/shim/core/go.mod +6 -1
  1546. package/shim/core/go.sum +10 -0
  1547. package/shim/core/modulekind.go +9 -0
  1548. package/shim/core/shim.go +157 -6
  1549. package/shim/diagnosticwriter/go.mod +10 -1
  1550. package/shim/diagnosticwriter/go.sum +20 -0
  1551. package/shim/diagnosticwriter/lint.go +188 -10
  1552. package/shim/diagnosticwriter/shim.go +14 -0
  1553. package/shim/lsp/go.mod +5 -5
  1554. package/shim/lsp/go.sum +10 -10
  1555. package/shim/lsp/shim.go +78 -2
  1556. package/shim/parser/go.mod +10 -1
  1557. package/shim/parser/go.sum +22 -0
  1558. package/shim/printer/emithost.go +46 -1
  1559. package/shim/printer/go.mod +5 -5
  1560. package/shim/printer/go.sum +10 -10
  1561. package/shim/printer/shim.go +114 -7
  1562. package/shim/printer/sourcemap.go +55 -0
  1563. package/shim/scanner/go.mod +10 -1
  1564. package/shim/scanner/go.sum +20 -0
  1565. package/shim/scanner/regexp.go +19 -4
  1566. package/shim/scanner/shim.go +3 -0
  1567. package/shim/stringutil/extra-shim.json +1 -0
  1568. package/shim/stringutil/go.mod +5 -0
  1569. package/shim/stringutil/go.sum +2 -0
  1570. package/shim/stringutil/shim.go +119 -0
  1571. package/shim/transformers/go.mod +5 -5
  1572. package/shim/transformers/go.sum +12 -10
  1573. package/shim/transformers/shim.go +12 -3
  1574. package/shim/tsoptions/command_line_raw.go +44 -0
  1575. package/shim/tsoptions/go.mod +10 -1
  1576. package/shim/tsoptions/go.sum +22 -0
  1577. package/shim/tsoptions/shim.go +1 -1
  1578. package/shim/tspath/go.mod +1 -1
  1579. package/shim/tspath/go.sum +6 -0
  1580. package/shim/vfs/cachedvfs/go.mod +3 -1
  1581. package/shim/vfs/cachedvfs/go.sum +12 -0
  1582. package/shim/vfs/decode.go +26 -0
  1583. package/shim/vfs/decode_test.go +42 -0
  1584. package/shim/vfs/go.mod +7 -1
  1585. package/shim/vfs/go.sum +12 -0
  1586. package/shim/vfs/osvfs/go.mod +7 -1
  1587. package/shim/vfs/osvfs/go.sum +12 -0
  1588. package/src/TtscCompiler.ts +223 -234
  1589. package/src/TtscService.ts +87 -31
  1590. package/src/TtscServiceRequestOptions.ts +21 -0
  1591. package/src/compiler/internal/CapturedProcessOutput.ts +69 -0
  1592. package/src/compiler/internal/CompilerArgumentsInspection.ts +184 -0
  1593. package/src/compiler/internal/EmitOwnershipIndex.ts +254 -0
  1594. package/src/compiler/internal/PrivateCompilerOutput.ts +330 -0
  1595. package/src/compiler/internal/ResidentCheckProcess.ts +445 -0
  1596. package/src/compiler/internal/ResidentCheckProcessOptions.ts +32 -0
  1597. package/src/compiler/internal/ResidentCheckRequest.ts +39 -0
  1598. package/src/compiler/internal/ResidentCheckResult.ts +24 -0
  1599. package/src/compiler/internal/ResidentCheckTelemetry.ts +36 -0
  1600. package/src/compiler/internal/ResidentReplyKind.ts +18 -0
  1601. package/src/compiler/internal/ResidentTransformProcess.ts +299 -0
  1602. package/src/compiler/internal/ResidentTransformProcessOptions.ts +30 -0
  1603. package/src/compiler/internal/ResidentTransformReply.ts +79 -0
  1604. package/src/compiler/internal/ResidentTransformRequestOptions.ts +16 -0
  1605. package/src/compiler/internal/ResidentTransformRequests.ts +198 -0
  1606. package/src/compiler/internal/StartedResidentTransform.ts +29 -0
  1607. package/src/compiler/internal/TransformProjectWorkerReply.ts +37 -0
  1608. package/src/compiler/internal/TransformProjectWorkerRequest.ts +42 -0
  1609. package/src/compiler/internal/build/BuildExecution.ts +1261 -0
  1610. package/src/compiler/internal/build/BuildTiming.ts +145 -0
  1611. package/src/compiler/internal/build/CompilerDiagnostics.ts +307 -0
  1612. package/src/compiler/internal/build/NativePluginArguments.ts +302 -0
  1613. package/src/compiler/internal/build/PassthroughFlags.ts +229 -0
  1614. package/src/compiler/internal/build/PluginFailureDiagnostics.ts +70 -0
  1615. package/src/compiler/internal/build/ResidentCheckEntryPlan.ts +42 -0
  1616. package/src/compiler/internal/build/ResidentCheckWatchChange.ts +33 -0
  1617. package/src/compiler/internal/build/ResidentCheckWatchSession.ts +501 -0
  1618. package/src/compiler/internal/build/RunBuildOptions.ts +145 -0
  1619. package/src/compiler/internal/build/TsgoArguments.ts +349 -0
  1620. package/src/compiler/internal/build/appendBuildOutput.ts +218 -0
  1621. package/src/compiler/internal/build/bufferResidentCheckEntryRequests.ts +52 -0
  1622. package/src/compiler/internal/build/createProcessDiagnostic.ts +32 -0
  1623. package/src/compiler/internal/build/isAbsoluteLocalProjectInputPath.ts +55 -0
  1624. package/src/compiler/internal/build/mergeProjectInputSnapshots.ts +147 -0
  1625. package/src/compiler/internal/build/normalizeBuildOutput.ts +89 -0
  1626. package/src/compiler/internal/build/parseProjectInputSnapshot.ts +91 -0
  1627. package/src/compiler/internal/build/planResidentCheckEntries.ts +55 -0
  1628. package/src/compiler/internal/build/privateRuntimeRootDir.ts +33 -0
  1629. package/src/compiler/internal/build/residentCheckRequest.ts +41 -0
  1630. package/src/compiler/internal/build/runBuild.ts +61 -0
  1631. package/src/compiler/internal/build/runExternalEmitProvenance.ts +566 -0
  1632. package/src/compiler/internal/build/takeResidentCheckEntryRequest.ts +31 -0
  1633. package/src/compiler/internal/buildNativeCompiler.ts +19 -2
  1634. package/src/compiler/internal/captureProcessOutput.ts +37 -39
  1635. package/src/compiler/internal/compileProjectInMemory.ts +139 -92
  1636. package/src/compiler/internal/ensureExecutable.ts +32 -0
  1637. package/src/compiler/internal/findNearestGoMod.ts +43 -0
  1638. package/src/compiler/internal/isOutsideRelativePath.ts +26 -0
  1639. package/src/compiler/internal/outputText.ts +21 -0
  1640. package/src/compiler/internal/packageRootDir.ts +43 -0
  1641. package/src/compiler/internal/parseNativeTransformOutput.ts +722 -0
  1642. package/src/compiler/internal/project/CompilerProjectSelection.ts +204 -0
  1643. package/src/compiler/internal/project/ConfigJsonText.ts +55 -0
  1644. package/src/compiler/internal/project/compilerUsesCaseSensitiveFileNames.ts +124 -0
  1645. package/src/compiler/internal/project/createNativeProjectContextArgs.ts +14 -19
  1646. package/src/compiler/internal/project/createNativeProjectContextJson.ts +28 -0
  1647. package/src/compiler/internal/project/parseJsonc.ts +318 -0
  1648. package/src/compiler/internal/project/readJsonFile.ts +34 -0
  1649. package/src/compiler/internal/project/readJsoncFile.ts +46 -0
  1650. package/src/compiler/internal/project/readProjectConfig.ts +137 -200
  1651. package/src/compiler/internal/project/resolveOwningProjectConfig.ts +278 -0
  1652. package/src/compiler/internal/project/resolveProjectConfig.ts +18 -127
  1653. package/src/compiler/internal/project/resolveProjectIdentity.ts +153 -0
  1654. package/src/compiler/internal/project/resolveTsconfigExtends.ts +175 -0
  1655. package/src/compiler/internal/project/selectReferencedProject.ts +54 -0
  1656. package/src/compiler/internal/project/tsconfigExtendsFileCandidates.ts +54 -0
  1657. package/src/compiler/internal/readEffectiveCompilerOptions.ts +126 -0
  1658. package/src/compiler/internal/resolveBinary.ts +25 -9
  1659. package/src/compiler/internal/resolveTsgo.ts +31 -11
  1660. package/src/compiler/internal/runNativeCheckWithObservations.ts +211 -0
  1661. package/src/compiler/internal/runSingleFileEmit.ts +92 -27
  1662. package/src/compiler/internal/sharedHost/SEMANTIC_CONFIG_PATH_ENV.ts +2 -0
  1663. package/src/compiler/internal/sharedHost/SidecarEnvironment.ts +151 -0
  1664. package/src/compiler/internal/sharedHost/TSGO_ARGS_CWD_ENV.ts +7 -0
  1665. package/src/compiler/internal/sharedHost/TSGO_ARGS_ENV.ts +7 -0
  1666. package/src/compiler/internal/sharedHost/assertSharedHostCompatibility.ts +48 -0
  1667. package/src/compiler/internal/sharedHost/clearInheritedSemanticConfigPath.ts +27 -0
  1668. package/src/compiler/internal/sharedHost/clearInheritedTsgoArgs.ts +41 -0
  1669. package/src/compiler/internal/sharedHost/inheritedSidecarEnv.ts +45 -0
  1670. package/src/compiler/internal/sharedHost/isLinkedTransform.ts +19 -0
  1671. package/src/compiler/internal/sharedHost/linkedTransformPlugins.ts +25 -0
  1672. package/src/compiler/internal/sharedHost/publishLinkedTransformPlugins.ts +42 -0
  1673. package/src/compiler/internal/sharedHost/resolvePluginConfigDir.ts +33 -0
  1674. package/src/compiler/internal/sharedHost/selectSharedHostPlugin.ts +35 -0
  1675. package/src/compiler/internal/spawnNative.ts +16 -39
  1676. package/src/compiler/internal/startResidentTransform.ts +66 -53
  1677. package/src/compiler/internal/transformProjectInMemory.ts +347 -635
  1678. package/src/compiler/internal/transformProjectInWorker.ts +170 -0
  1679. package/src/compiler/internal/transformProjectWorker.ts +43 -0
  1680. package/src/flags/AnySubcommand.ts +19 -0
  1681. package/src/flags/COMPILER_ENUM_WHITESPACE.ts +35 -0
  1682. package/src/flags/COMPILER_OPTIONS.ts +512 -0
  1683. package/src/flags/COMPILER_OPTION_ASCII_FOLDS.ts +13 -0
  1684. package/src/flags/COMPILER_OPTION_KINDS.ts +14 -0
  1685. package/src/flags/CompilerOptionSpec.ts +30 -0
  1686. package/src/flags/FLAG_BY_TOKEN.ts +40 -0
  1687. package/src/flags/{schema.ts → FLAG_SCHEMA.ts} +43 -318
  1688. package/src/flags/FlagKind.ts +22 -0
  1689. package/src/flags/FlagLayer.ts +24 -0
  1690. package/src/flags/FlagSpec.ts +118 -0
  1691. package/src/flags/ParseOptions.ts +103 -0
  1692. package/src/flags/ParseResult.ts +44 -0
  1693. package/src/flags/TtscSubcommand.ts +22 -0
  1694. package/src/flags/TtsxSubcommand.ts +13 -0
  1695. package/src/flags/ValueValidator.ts +14 -0
  1696. package/src/flags/buildGoAllowList.ts +43 -0
  1697. package/src/flags/flagsForSubcommand.ts +22 -0
  1698. package/src/flags/getBoolean.ts +27 -0
  1699. package/src/flags/getNumber.ts +24 -0
  1700. package/src/flags/getString.ts +24 -0
  1701. package/src/flags/getStringList.ts +24 -0
  1702. package/src/flags/normalizeCompilerEnumValue.ts +41 -0
  1703. package/src/flags/normalizeFlagToken.ts +38 -0
  1704. package/src/flags/parseFlags.ts +371 -0
  1705. package/src/flags/readCompilerOptionOccurrence.ts +107 -0
  1706. package/src/flags/readCompilerOptionValues.ts +68 -0
  1707. package/src/flags/resolveFlagSpec.ts +29 -0
  1708. package/src/index.ts +9 -3
  1709. package/src/internal/CanonicalTempDirectoryOperations.ts +73 -0
  1710. package/src/internal/CompilerContextSnapshot.ts +139 -0
  1711. package/src/internal/CompilerResultAdapter.ts +320 -0
  1712. package/src/internal/E2ETrace.ts +674 -0
  1713. package/src/internal/IJavaScriptRuntimeCapabilities.ts +50 -0
  1714. package/src/internal/OwnedNativeProcess.ts +417 -0
  1715. package/src/internal/OwnedSynchronousProcess.ts +220 -0
  1716. package/src/internal/RetireLockDirectoryOperations.ts +81 -0
  1717. package/src/internal/SafeCacheCleanupTarget.ts +41 -0
  1718. package/src/internal/SourceNativeRetirement.ts +1109 -0
  1719. package/src/internal/SpawnSyncOutputFiles.ts +29 -0
  1720. package/src/internal/cacheEntryExists.ts +24 -0
  1721. package/src/internal/createCanonicalTempDirectory.ts +35 -18
  1722. package/src/internal/isContendedCandidateRename.ts +35 -0
  1723. package/src/internal/isSpawnSyncFdExhaustion.ts +19 -0
  1724. package/src/internal/javascriptRuntimeCapabilities.ts +166 -0
  1725. package/src/internal/nativeBinary.ts +11 -0
  1726. package/src/internal/parseWindowsDirectoryCaseSensitivity.ts +50 -0
  1727. package/src/internal/pathIdentity/FilesystemPathIdentity.ts +44 -0
  1728. package/src/internal/pathIdentity/FilesystemPathIdentityContext.ts +182 -0
  1729. package/src/internal/pathIdentity/FilesystemPathIdentityOperations.ts +106 -0
  1730. package/src/internal/pathIdentity/ProjectInputPathIdentity.ts +21 -0
  1731. package/src/internal/pathIdentity/ProjectInputPathIdentityContext.ts +21 -0
  1732. package/src/internal/pathIdentity/ProjectInputPathIdentityOperations.ts +22 -0
  1733. package/src/internal/pathIdentity/createFilesystemPathIdentityContext.ts +437 -0
  1734. package/src/internal/pathIdentity/createProjectInputPathIdentityContext.ts +34 -0
  1735. package/src/internal/pathIdentity/isFilesystemPathIdentityWithin.ts +32 -0
  1736. package/src/internal/pathIdentity/isProjectInputPathIdentityWithin.ts +22 -0
  1737. package/src/internal/pathIdentity/resolveFilesystemPath.ts +43 -0
  1738. package/src/internal/pathIdentity/resolvePhysicalPath.ts +31 -0
  1739. package/src/internal/pathIdentity/resolveProjectInputPath.ts +18 -0
  1740. package/src/internal/pluginSource.ts +26 -0
  1741. package/src/internal/projectInputPathIdentity.ts +26 -387
  1742. package/src/internal/resolveNodeBinary.ts +13 -165
  1743. package/src/internal/resolveSafeCacheCleanupTargets.ts +51 -19
  1744. package/src/internal/restoreCompilerError.ts +175 -0
  1745. package/src/internal/retireLockDirectory.ts +166 -0
  1746. package/src/internal/runHoldingLock.ts +55 -0
  1747. package/src/internal/runtimeExecutableIdentity.ts +212 -0
  1748. package/src/internal/serializeCompilerError.ts +145 -0
  1749. package/src/internal/spawnSyncResilient.ts +36 -182
  1750. package/src/internal/spawnSyncWithLowDescriptors.ts +227 -0
  1751. package/src/internal/tsconfig.ts +16 -0
  1752. package/src/launcher/internal/PendingResidentCheckWatchChanges.ts +94 -0
  1753. package/src/launcher/internal/TtscBuildMode.ts +14 -0
  1754. package/src/launcher/internal/TtsxEntryOptions.ts +92 -0
  1755. package/src/launcher/internal/assertNoSolutionBuild.ts +17 -10
  1756. package/src/launcher/internal/assertTtsxNoWatch.ts +49 -0
  1757. package/src/launcher/internal/buildSingleRootProject.ts +303 -0
  1758. package/src/launcher/internal/getCompilerVersionText.ts +20 -5
  1759. package/src/launcher/internal/inlineServedSourceMap.ts +294 -0
  1760. package/src/launcher/internal/linkVirtualEntry.ts +88 -0
  1761. package/src/launcher/internal/{commonJsExportMetadata.ts → parseCommonJsExports.ts} +12 -2
  1762. package/src/launcher/internal/parseTtscBuildArgs.ts +103 -0
  1763. package/src/launcher/internal/parseTtsxCLI.ts +183 -0
  1764. package/src/launcher/internal/prepareExecution.ts +474 -362
  1765. package/src/launcher/internal/prepareTtscBuildMode.ts +64 -0
  1766. package/src/launcher/internal/resolveCacheDir.ts +12 -3
  1767. package/src/launcher/internal/resolveSingleFileOutput.ts +145 -0
  1768. package/src/launcher/internal/resolveTtscserverBinary.ts +20 -5
  1769. package/src/launcher/internal/runTtsc.ts +394 -326
  1770. package/src/launcher/internal/runTtsx.ts +349 -151
  1771. package/src/launcher/internal/runtime/CommonJsRuntimeSource.ts +365 -0
  1772. package/src/launcher/internal/runtime/DependencyBuildAdmission.ts +159 -0
  1773. package/src/launcher/internal/runtime/DependencyBuildGeneration.ts +236 -0
  1774. package/src/launcher/internal/runtime/DependencyBuildLockFence.ts +22 -0
  1775. package/src/launcher/internal/runtime/DependencyBuildLockLease.ts +22 -0
  1776. package/src/launcher/internal/runtime/DependencyBuildLockObservation.ts +49 -0
  1777. package/src/launcher/internal/runtime/DependencyBuildLockProtocol.ts +137 -0
  1778. package/src/launcher/internal/runtime/OwnedProjectSource.ts +140 -0
  1779. package/src/launcher/internal/runtime/OwningModuleOptions.ts +22 -0
  1780. package/src/launcher/internal/runtime/PluginDescriptorInputObservation.ts +112 -0
  1781. package/src/launcher/internal/runtime/ProcessOwnedDirectory.ts +325 -0
  1782. package/src/launcher/internal/runtime/ResolveResult.ts +26 -0
  1783. package/src/launcher/internal/runtime/RuntimeEmitProvenance.ts +58 -0
  1784. package/src/launcher/internal/runtime/RuntimeEntryPreparer.ts +23 -0
  1785. package/src/launcher/internal/runtime/RuntimeFilesystem.ts +64 -0
  1786. package/src/launcher/internal/runtime/RuntimeHookOptions.ts +23 -0
  1787. package/src/launcher/internal/runtime/RuntimeIsolatedEmit.ts +88 -0
  1788. package/src/launcher/internal/runtime/RuntimeLoaderCapabilities.ts +256 -0
  1789. package/src/launcher/internal/runtime/RuntimeManifest.ts +77 -0
  1790. package/src/launcher/internal/runtime/RuntimeManifestRegistry.ts +309 -0
  1791. package/src/launcher/internal/runtime/RuntimeModuleFormat.ts +275 -0
  1792. package/src/launcher/internal/runtime/RuntimeProjectOwnership.ts +139 -0
  1793. package/src/launcher/internal/runtime/TTSX_MINIMUM_NODE_VERSION.ts +11 -0
  1794. package/src/launcher/internal/runtime/acquireDependencyBuildLock.ts +97 -0
  1795. package/src/launcher/internal/runtime/checkNodeRuntimeSupport.ts +94 -0
  1796. package/src/launcher/internal/runtime/claimRuntimeProjectDirectory.ts +54 -0
  1797. package/src/launcher/internal/runtime/commonJsExportNames.ts +57 -0
  1798. package/src/launcher/internal/runtime/commonJsImportFacade.ts +62 -0
  1799. package/src/launcher/internal/runtime/dependencyCacheKey.ts +82 -0
  1800. package/src/launcher/internal/runtime/dependencyCacheRoot.ts +112 -0
  1801. package/src/launcher/internal/runtime/inspectDependencyBuildLock.ts +162 -0
  1802. package/src/launcher/internal/runtime/installRuntimeHooks.ts +2442 -0
  1803. package/src/launcher/internal/runtime/interopProbe.ts +8 -0
  1804. package/src/launcher/internal/runtime/isLocalProcessGone.ts +67 -0
  1805. package/src/launcher/internal/runtime/observeMappedDescriptorResolution.ts +74 -0
  1806. package/src/launcher/internal/runtime/projectModuleOptions.ts +28 -0
  1807. package/src/launcher/internal/runtime/readDependencyCache.ts +89 -0
  1808. package/src/launcher/internal/runtime/realPath.ts +30 -0
  1809. package/src/launcher/internal/runtime/reclaimDependencyBuildLock.ts +27 -0
  1810. package/src/launcher/internal/runtime/releaseDependencyBuildLock.ts +27 -0
  1811. package/src/launcher/internal/runtime/resolveRuntimeCleanTargets.ts +93 -0
  1812. package/src/launcher/internal/runtime/restoreStrippedNodeBuiltinScheme.ts +32 -0
  1813. package/src/launcher/internal/runtime/runtimeRunKey.ts +31 -0
  1814. package/src/launcher/internal/runtime/selectRuntimePluginPolicy.ts +28 -0
  1815. package/src/launcher/internal/runtime/withRuntimeDirectoryLock.ts +92 -0
  1816. package/src/launcher/internal/runtimeCompilerArgs.ts +91 -62
  1817. package/src/launcher/internal/runtimeEmitProfile.ts +70 -0
  1818. package/src/launcher/internal/runtimeHookPreload.ts +3 -3
  1819. package/src/launcher/internal/runtimeOwnerPreload.ts +43 -0
  1820. package/src/launcher/internal/singleRootProjectConfig.ts +38 -0
  1821. package/src/launcher/internal/ttscserver/ILSPPluginSelectionInputs.ts +65 -0
  1822. package/src/launcher/internal/ttscserver/LSPProjectInputDigest.ts +331 -0
  1823. package/src/launcher/internal/ttscserver/captureLSPPluginSelectionInputs.ts +107 -0
  1824. package/src/launcher/internal/ttscserver/fingerprintInitialLSPProjectInputSnapshot.ts +41 -0
  1825. package/src/launcher/internal/ttscserver/initialLSPProjectInputSnapshotIsCurrent.ts +36 -0
  1826. package/src/launcher/internal/ttscserver/materializeLSPPluginManifest.ts +60 -0
  1827. package/src/launcher/internal/ttscserver/needsStdio.ts +32 -0
  1828. package/src/launcher/internal/ttscserver/runTtscserver.ts +592 -0
  1829. package/src/launcher/internal/watch/CompilerDirectoryWatchEventPlan.ts +31 -0
  1830. package/src/launcher/internal/watch/DirectoryWatcher.ts +45 -0
  1831. package/src/launcher/internal/watch/FseventsStreams.ts +303 -0
  1832. package/src/launcher/internal/watch/ProjectInputWatchRules.ts +179 -0
  1833. package/src/launcher/internal/watch/WatchInputChange.ts +31 -0
  1834. package/src/launcher/internal/watch/WatchPaths.ts +156 -0
  1835. package/src/launcher/internal/{watchTopology.ts → watch/WatchTopology.ts} +867 -962
  1836. package/src/launcher/internal/watch/literalGlobRoot.ts +40 -0
  1837. package/src/launcher/internal/watch/planCompilerDirectoryWatchEvent.ts +83 -0
  1838. package/src/launcher/internal/watch/projectInputActiveWatchDirectories.ts +47 -0
  1839. package/src/launcher/internal/watch/projectInputAvailableWatchDirectory.ts +56 -0
  1840. package/src/launcher/internal/watch/projectInputEventShouldNotify.ts +23 -0
  1841. package/src/launcher/internal/watch/projectInputMembershipInvalidatesProgram.ts +63 -0
  1842. package/src/launcher/internal/watch/projectInputReloadEventShouldNotify.ts +127 -0
  1843. package/src/launcher/internal/watch/projectInputReplacementStrandsWatchers.ts +57 -0
  1844. package/src/launcher/internal/watch/projectInputTopologyMayAffect.ts +73 -0
  1845. package/src/launcher/internal/watch/projectInputWatchDirectories.ts +33 -0
  1846. package/src/launcher/internal/watch/reloadInputsForFailedTopologyRefresh.ts +49 -0
  1847. package/src/launcher/internal/watch/syncWatchers.ts +64 -0
  1848. package/src/launcher/internal/watch/watchDirectory.ts +53 -0
  1849. package/src/launcher/internal/watch/watchDirectoryThroughFsWatch.ts +47 -0
  1850. package/src/launcher/ttscserver.ts +1 -1
  1851. package/src/launcher/ttsx.ts +2 -3
  1852. package/src/plugin/CapabilityPluginResolver.ts +549 -0
  1853. package/src/plugin/ITtscCapabilityPlugin.ts +93 -0
  1854. package/src/plugin/internal/CapabilityPluginResult.ts +99 -0
  1855. package/src/plugin/internal/CapabilityResolutionFormat.ts +248 -0
  1856. package/src/plugin/internal/ITtscCapabilityPluginSource.ts +37 -0
  1857. package/src/plugin/internal/ITtscCapabilityResolutionEntry.ts +57 -0
  1858. package/src/plugin/internal/ITtscCapabilityResolutionPlugin.ts +22 -0
  1859. package/src/plugin/internal/capabilityPluginWorker.ts +216 -0
  1860. package/src/plugin/internal/decodeCapabilityCommandReply.ts +27 -0
  1861. package/src/plugin/internal/load/COMMONJS_PLUGIN_DESCRIPTOR_SHIM_SOURCE.ts +182 -0
  1862. package/src/plugin/internal/load/PLUGIN_DESCRIPTOR_SHIM_SOURCE.ts +59 -0
  1863. package/src/plugin/internal/load/PluginDescriptorAdmission.ts +75 -0
  1864. package/src/plugin/internal/load/PluginDescriptorEvaluationCache.ts +432 -0
  1865. package/src/plugin/internal/load/PluginPackageResolution.ts +711 -0
  1866. package/src/plugin/internal/load/ProjectPluginEntries.ts +232 -0
  1867. package/src/plugin/internal/load/RESOLUTION_INPUT_RECORDER_PATH.ts +34 -0
  1868. package/src/plugin/internal/load/collectProjectHostInputs.ts +88 -0
  1869. package/src/plugin/internal/load/composePluginSources.ts +121 -0
  1870. package/src/plugin/internal/load/declaresHostInputReads.ts +52 -0
  1871. package/src/plugin/internal/load/hasProjectPluginEntries.ts +33 -0
  1872. package/src/plugin/internal/load/hashHostInputPaths.ts +44 -0
  1873. package/src/plugin/internal/load/isRelativePluginSpecifier.ts +31 -0
  1874. package/src/plugin/internal/load/loadProjectPlugins.ts +2242 -0
  1875. package/src/plugin/internal/load/moduleResolutionBaseSelects.ts +59 -0
  1876. package/src/plugin/internal/load/observeImportSearchRoots.ts +42 -0
  1877. package/src/plugin/internal/load/pluginLabel.ts +28 -0
  1878. package/src/plugin/internal/load/realpathHostInput.ts +22 -0
  1879. package/src/plugin/internal/load/realpathHostInputPaths.ts +27 -0
  1880. package/src/plugin/internal/load/rejectJsTransformFunctions.ts +23 -0
  1881. package/src/plugin/internal/load/requirePluginSource.ts +34 -0
  1882. package/src/plugin/internal/load/resolveNativeSource.ts +42 -0
  1883. package/src/plugin/internal/load/validatePluginContributors.ts +102 -0
  1884. package/src/plugin/internal/load/validatePluginSource.ts +19 -0
  1885. package/src/plugin/internal/load/visitImportMappedCandidates.ts +63 -0
  1886. package/src/plugin/internal/pluginDescriptorFailureReason.ts +35 -0
  1887. package/src/plugin/internal/pluginDescriptorProcessFailure.ts +48 -0
  1888. package/src/plugin/internal/readCapabilityResolution.ts +193 -0
  1889. package/src/plugin/internal/receiveCapabilityFailure.ts +27 -0
  1890. package/src/plugin/internal/source/CachePrunePolicy.ts +47 -0
  1891. package/src/plugin/internal/source/GoBuildCacheCoordination.ts +588 -0
  1892. package/src/plugin/internal/source/GoSourceInputs.ts +182 -0
  1893. package/src/plugin/internal/source/GoToolResolution.ts +312 -0
  1894. package/src/plugin/internal/source/IGoBuildCachePruneOptions.ts +34 -0
  1895. package/src/plugin/internal/source/IPluginCachePruneOptions.ts +38 -0
  1896. package/src/plugin/internal/source/IPluginModuleReplaceDirectory.ts +30 -0
  1897. package/src/plugin/internal/source/ITtscBuildContributor.ts +19 -0
  1898. package/src/plugin/internal/source/ITtscSourceBuildCachePaths.ts +28 -0
  1899. package/src/plugin/internal/source/NativeSourcePackages.ts +368 -0
  1900. package/src/plugin/internal/source/PluginBinaryUse.ts +159 -0
  1901. package/src/plugin/internal/source/PluginBinaryWaitResult.ts +34 -0
  1902. package/src/plugin/internal/source/PluginBuildEnvironmentReadings.ts +231 -0
  1903. package/src/plugin/internal/source/PluginBuildEnvironmentWitness.ts +233 -0
  1904. package/src/plugin/internal/source/PluginBuildLockFence.ts +26 -0
  1905. package/src/plugin/internal/source/PluginBuildLockLease.ts +31 -0
  1906. package/src/plugin/internal/source/PluginBuildLockObservation.ts +48 -0
  1907. package/src/plugin/internal/source/PluginBuildLockOwner.ts +225 -0
  1908. package/src/plugin/internal/source/PluginBuildLockProtocol.ts +342 -0
  1909. package/src/plugin/internal/source/SourceBuildCacheLayout.ts +303 -0
  1910. package/src/plugin/internal/source/SourceBuildFilesystemOperations.ts +32 -0
  1911. package/src/plugin/internal/source/SourcePluginAdmission.ts +127 -0
  1912. package/src/plugin/internal/source/SourcePluginWorkspace.ts +446 -0
  1913. package/src/plugin/internal/source/acquirePluginBuildLock.ts +222 -0
  1914. package/src/plugin/internal/source/autoQuoteGoModToken.ts +113 -0
  1915. package/src/plugin/internal/source/buildSourcePlugin.ts +1197 -0
  1916. package/src/plugin/internal/source/collectPluginSourceDirectories.ts +70 -0
  1917. package/src/plugin/internal/source/collectPluginSourceFiles.ts +90 -0
  1918. package/src/plugin/internal/source/computeCacheKey.ts +190 -0
  1919. package/src/plugin/internal/source/copiesPluginSourceEntry.ts +52 -0
  1920. package/src/plugin/internal/source/createExternalSourceSnapshotLayout.ts +66 -0
  1921. package/src/plugin/internal/source/ensureExecutableGoToolchain.ts +87 -0
  1922. package/src/plugin/internal/source/formatDuration.ts +32 -0
  1923. package/src/plugin/internal/source/formatGoWorkPath.ts +42 -0
  1924. package/src/plugin/internal/source/hashPluginBuildEnvironment.ts +803 -0
  1925. package/src/plugin/internal/source/inspectPluginBuildLock.ts +330 -0
  1926. package/src/plugin/internal/source/isPathWithin.ts +24 -0
  1927. package/src/plugin/internal/source/legacyGlobalCacheTargets.ts +71 -0
  1928. package/src/plugin/internal/source/pluginBuildEnvironment.ts +59 -0
  1929. package/src/plugin/internal/source/pluginBuildEnvironmentWorker.ts +30 -0
  1930. package/src/plugin/internal/source/pluginBuildVersions.ts +75 -0
  1931. package/src/plugin/internal/source/pluginModuleReplaceDirectories.ts +96 -0
  1932. package/src/plugin/internal/source/pluginSourceCovers.ts +54 -0
  1933. package/src/plugin/internal/source/pluginSourceDigest.ts +55 -0
  1934. package/src/plugin/internal/source/pluginSourceFilesSignature.ts +54 -0
  1935. package/src/plugin/internal/source/pluginSourceState.ts +69 -0
  1936. package/src/plugin/internal/source/pluginSourceStateHolds.ts +45 -0
  1937. package/src/plugin/internal/source/processPluginBuildEnvironment.ts +40 -0
  1938. package/src/plugin/internal/source/pruneCacheFileRoot.ts +134 -0
  1939. package/src/plugin/internal/source/pruneGoBuildCacheRoot.ts +228 -0
  1940. package/src/plugin/internal/source/prunePluginCacheRoot.ts +507 -0
  1941. package/src/plugin/internal/source/prunesPluginSourceDirectory.ts +25 -0
  1942. package/src/plugin/internal/source/reclaimPluginBuildLock.ts +63 -0
  1943. package/src/plugin/internal/source/recordCacheFileUse.ts +35 -0
  1944. package/src/plugin/internal/source/releasePluginBuildLock.ts +125 -0
  1945. package/src/plugin/internal/source/resolveCleanTargets.ts +84 -0
  1946. package/src/plugin/internal/source/resolveGoCompiler.ts +92 -0
  1947. package/src/plugin/internal/source/resolvePluginCacheRoot.ts +32 -0
  1948. package/src/plugin/internal/source/resolvePluginGoModule.ts +69 -0
  1949. package/src/plugin/internal/source/resolveSourceBuildCachePaths.ts +276 -0
  1950. package/src/plugin/internal/source/selectPluginModuleReplaceDirectories.ts +80 -0
  1951. package/src/plugin/internal/source/spawnGoTool.ts +204 -0
  1952. package/src/plugin/internal/source/touchPluginCacheEntryInUse.ts +44 -0
  1953. package/src/plugin/internal/source/waitForPluginBinary.ts +123 -0
  1954. package/src/plugin/internal/source/windowsGoCommandArgs.ts +19 -0
  1955. package/src/plugin/internal/source/withGoBuildCacheLease.ts +101 -0
  1956. package/src/plugin/internal/writeCapabilityResolution.ts +266 -0
  1957. package/src/plugin/resolveCapabilityPlugins.ts +242 -77
  1958. package/src/register.ts +20 -7
  1959. package/src/structures/ITtscCompilerContext.ts +29 -11
  1960. package/src/structures/ITtscCompilerDiagnostic.ts +24 -7
  1961. package/src/structures/ITtscCompilerResult.ts +75 -25
  1962. package/src/structures/ITtscCompilerTransformation.ts +304 -64
  1963. package/src/structures/ITtscPlugin.ts +24 -8
  1964. package/src/structures/ITtscPluginCapabilities.ts +58 -5
  1965. package/src/structures/ITtscPluginContributor.ts +19 -8
  1966. package/src/structures/ITtscPluginFactoryContext.ts +12 -3
  1967. package/src/structures/ITtscProjectPluginConfig.ts +35 -10
  1968. package/src/structures/TtscPluginStage.ts +9 -0
  1969. package/src/structures/internal/ITtscLoadedNativePlugin.ts +27 -5
  1970. package/src/structures/internal/ITtscParsedProjectConfig.ts +37 -3
  1971. package/src/structures/internal/ITtscProjectIdentity.ts +27 -6
  1972. package/src/structures/internal/ITtscProjectInputSnapshot.ts +31 -8
  1973. package/src/structures/internal/ITtscProjectLocatorOptions.ts +21 -4
  1974. package/src/structures/internal/TtscBuildOptions.ts +38 -14
  1975. package/src/structures/internal/TtscBuildResult.ts +74 -4
  1976. package/src/structures/internal/TtscCommonOptions.ts +59 -14
  1977. package/src/structures/internal/TtscSingleFileEmitOptions.ts +55 -5
  1978. package/tools/gen_shims/main.go +124 -11
  1979. package/tools/gen_shims/package_load_admission_rejects_incomplete_results_test.go +61 -0
  1980. package/tools/gen_shims/private_field_support_preserves_upstream_layout_test.go +104 -0
  1981. package/tools/shim_audit/enum_generation_preserves_existing_family_members_test.go +182 -0
  1982. package/tools/shim_audit/enum_generation_refuses_removed_public_members_test.go +93 -0
  1983. package/tools/shim_audit/main.go +166 -31
  1984. package/tools/shim_audit/main_test.go +35 -0
  1985. package/tools/shim_audit/producer_exemptions_require_rationale_test.go +5 -0
  1986. package/tools/shim_audit/producer_surface_includes_exposed_methods_test.go +5 -0
  1987. package/tools/shim_audit/producer_surface_rejects_unproducible_reference_test.go +5 -0
  1988. package/tools/shim_audit/shim_dir_coverage_rejects_unregistered_shims_test.go +71 -0
  1989. package/utility/command.go +48 -0
  1990. package/utility/flags_gen.go +2 -2
  1991. package/utility/host.go +282 -66
  1992. package/utility/preamble_output.go +245 -0
  1993. package/utility/preamble_output_test.go +90 -0
  1994. package/utility/serve.go +61 -18
  1995. package/cmd/ttscgraph/serve_graph_snapshot_version_matches_typescript_client_test.go +0 -32
  1996. package/cmd/ttscgraph/serve_protocol_version_matches_the_typescript_client_test.go +0 -48
  1997. package/cmd/ttscgraph/serve_session_retries_failed_dump_test.go +0 -103
  1998. package/internal/graph/dump_schema_version_matches_the_typescript_client_test.go +0 -48
  1999. package/internal/graph/edge_kinds_names_every_declared_kind_test.go +0 -49
  2000. package/internal/graph/graph_kind_contracts_match_their_producers_test.go +0 -121
  2001. package/internal/lspserver/lsp_launcher_reload_directory_fingerprint_parity_windows_test.go +0 -94
  2002. package/internal/lspserver/lsp_project_diagnostics_resident_unsupported_falls_back_test.go +0 -123
  2003. package/lib/compiler/internal/paths.d.ts +0 -27
  2004. package/lib/compiler/internal/paths.js +0 -70
  2005. package/lib/compiler/internal/paths.js.map +0 -1
  2006. package/lib/compiler/internal/project/readConfigJson.d.ts +0 -30
  2007. package/lib/compiler/internal/project/readConfigJson.js +0 -208
  2008. package/lib/compiler/internal/project/readConfigJson.js.map +0 -1
  2009. package/lib/compiler/internal/residentCheckProcess.d.ts +0 -44
  2010. package/lib/compiler/internal/residentCheckProcess.js +0 -213
  2011. package/lib/compiler/internal/residentCheckProcess.js.map +0 -1
  2012. package/lib/compiler/internal/residentTransformProcess.d.ts +0 -65
  2013. package/lib/compiler/internal/residentTransformProcess.js +0 -330
  2014. package/lib/compiler/internal/residentTransformProcess.js.map +0 -1
  2015. package/lib/compiler/internal/resolveEmittedJavaScript.d.ts +0 -25
  2016. package/lib/compiler/internal/resolveEmittedJavaScript.js +0 -165
  2017. package/lib/compiler/internal/resolveEmittedJavaScript.js.map +0 -1
  2018. package/lib/compiler/internal/runBuild.d.ts +0 -152
  2019. package/lib/compiler/internal/runBuild.js +0 -1694
  2020. package/lib/compiler/internal/runBuild.js.map +0 -1
  2021. package/lib/compiler/internal/sharedHostHelpers.d.ts +0 -79
  2022. package/lib/compiler/internal/sharedHostHelpers.js +0 -134
  2023. package/lib/compiler/internal/sharedHostHelpers.js.map +0 -1
  2024. package/lib/flags/parser.d.ts +0 -97
  2025. package/lib/flags/parser.js +0 -293
  2026. package/lib/flags/parser.js.map +0 -1
  2027. package/lib/flags/schema.d.ts +0 -191
  2028. package/lib/flags/schema.js.map +0 -1
  2029. package/lib/internal/windowsDirectoryCaseSensitivity.d.ts +0 -10
  2030. package/lib/internal/windowsDirectoryCaseSensitivity.js +0 -34
  2031. package/lib/internal/windowsDirectoryCaseSensitivity.js.map +0 -1
  2032. package/lib/launcher/internal/commonJsExportMetadata.d.ts +0 -7
  2033. package/lib/launcher/internal/commonJsExportMetadata.js.map +0 -1
  2034. package/lib/launcher/internal/registerRuntimeHooks.js +0 -59
  2035. package/lib/launcher/internal/registerRuntimeHooks.js.map +0 -1
  2036. package/lib/launcher/internal/runTtscserver.d.ts +0 -35
  2037. package/lib/launcher/internal/runTtscserver.js +0 -661
  2038. package/lib/launcher/internal/runTtscserver.js.map +0 -1
  2039. package/lib/launcher/internal/runtimeHooks.d.ts +0 -198
  2040. package/lib/launcher/internal/runtimeHooks.js +0 -2579
  2041. package/lib/launcher/internal/runtimeHooks.js.map +0 -1
  2042. package/lib/launcher/internal/servedSourceMap.d.ts +0 -25
  2043. package/lib/launcher/internal/servedSourceMap.js +0 -164
  2044. package/lib/launcher/internal/servedSourceMap.js.map +0 -1
  2045. package/lib/launcher/internal/singleFileOutput.d.ts +0 -16
  2046. package/lib/launcher/internal/singleFileOutput.js +0 -103
  2047. package/lib/launcher/internal/singleFileOutput.js.map +0 -1
  2048. package/lib/launcher/internal/watchTopology.d.ts +0 -329
  2049. package/lib/launcher/internal/watchTopology.js.map +0 -1
  2050. package/lib/plugin/internal/buildSourcePlugin.d.ts +0 -298
  2051. package/lib/plugin/internal/buildSourcePlugin.js +0 -3087
  2052. package/lib/plugin/internal/buildSourcePlugin.js.map +0 -1
  2053. package/lib/plugin/internal/capabilityResolutionCache.d.ts +0 -76
  2054. package/lib/plugin/internal/capabilityResolutionCache.js +0 -224
  2055. package/lib/plugin/internal/capabilityResolutionCache.js.map +0 -1
  2056. package/lib/plugin/internal/descriptorProcessFailure.d.ts +0 -36
  2057. package/lib/plugin/internal/descriptorProcessFailure.js +0 -62
  2058. package/lib/plugin/internal/descriptorProcessFailure.js.map +0 -1
  2059. package/lib/plugin/internal/loadProjectPlugins.d.ts +0 -75
  2060. package/lib/plugin/internal/loadProjectPlugins.js +0 -2405
  2061. package/lib/plugin/internal/loadProjectPlugins.js.map +0 -1
  2062. package/src/compiler/internal/paths.ts +0 -68
  2063. package/src/compiler/internal/project/readConfigJson.ts +0 -209
  2064. package/src/compiler/internal/residentCheckProcess.ts +0 -259
  2065. package/src/compiler/internal/residentTransformProcess.ts +0 -406
  2066. package/src/compiler/internal/resolveEmittedJavaScript.ts +0 -197
  2067. package/src/compiler/internal/runBuild.ts +0 -2345
  2068. package/src/compiler/internal/sharedHostHelpers.ts +0 -154
  2069. package/src/flags/parser.ts +0 -459
  2070. package/src/internal/windowsDirectoryCaseSensitivity.ts +0 -33
  2071. package/src/launcher/internal/registerRuntimeHooks.ts +0 -68
  2072. package/src/launcher/internal/runTtscserver.ts +0 -842
  2073. package/src/launcher/internal/runtimeHooks.ts +0 -3197
  2074. package/src/launcher/internal/servedSourceMap.ts +0 -183
  2075. package/src/launcher/internal/singleFileOutput.ts +0 -133
  2076. package/src/plugin/internal/buildSourcePlugin.ts +0 -3993
  2077. package/src/plugin/internal/capabilityResolutionCache.ts +0 -305
  2078. package/src/plugin/internal/descriptorProcessFailure.ts +0 -69
  2079. package/src/plugin/internal/loadProjectPlugins.ts +0 -3073
  2080. package/tools/shim_audit/shim_dir_coverage_test.go +0 -25
  2081. /package/lib/{launcher/internal/registerRuntimeHooks.d.ts → compiler/internal/transformProjectWorker.d.ts} +0 -0
@@ -1,3197 +0,0 @@
1
- import crypto from "node:crypto";
2
- import fs from "node:fs";
3
- import {
4
- Module,
5
- createRequire,
6
- isBuiltin,
7
- registerHooks,
8
- stripTypeScriptTypes,
9
- } from "node:module";
10
- import os from "node:os";
11
- import path from "node:path";
12
- import { fileURLToPath, pathToFileURL } from "node:url";
13
-
14
- import { readProjectConfig } from "../../compiler/internal/project/readProjectConfig";
15
- import { resolveEmittedJavaScript } from "../../compiler/internal/resolveEmittedJavaScript";
16
- import { resolveTsgo } from "../../compiler/internal/resolveTsgo";
17
- import { runBuild } from "../../compiler/internal/runBuild";
18
- import { outputText, spawnNative } from "../../compiler/internal/spawnNative";
19
- import { createCanonicalTempDirectory } from "../../internal/createCanonicalTempDirectory";
20
- import {
21
- type FilesystemPathIdentityContext,
22
- createFilesystemPathIdentityContext,
23
- } from "../../internal/projectInputPathIdentity";
24
- import { parseCommonJsExports } from "./commonJsExportMetadata";
25
- import { runtimeCompilerArgs } from "./runtimeCompilerArgs";
26
- import { inlineServedSourceMap } from "./servedSourceMap";
27
-
28
- /**
29
- * One emit policy for orphan execution and CommonJS export discovery. The
30
- * compiler ignores the consumer's config, lowers proposal syntax, and checks no
31
- * types because the entry build owns diagnostics. Isolation prevents imported
32
- * const-enum inlining and secondary emits, and keeps const enums as runtime
33
- * exports that the name scanner must also observe.
34
- */
35
- const ISOLATED_EMIT_ARGS = [
36
- "--ignoreConfig",
37
- "--target",
38
- "es2022",
39
- "--noCheck",
40
- "--skipLibCheck",
41
- "--noResolve",
42
- "--isolatedModules",
43
- ] as const;
44
-
45
- /**
46
- * Synchronous Node module hooks installed (via `module.registerHooks`) in the
47
- * child process `ttsx` spawns to run a TypeScript entry _from source_.
48
- *
49
- * They give the runner ts-node-style whole-graph reach without weakening the
50
- * compile gate. The owning entry project is type-checked and built up front (by
51
- * `prepareExecution`, with its transform plugins such as typia); these hooks
52
- * serve that build under the source URLs so `__dirname`/`import.meta.url` keep
53
- * pointing at the source tree. Three load paths:
54
- *
55
- * 1. A `.ts` belonging to the entry project → serve the pre-built emitted JS
56
- * (transform plugins already applied), mapped by the project's `rootDir`.
57
- * 2. Any other raw `.ts` dependency (a published or workspace package that ships
58
- * source) → build its own owning `tsconfig.json` once via `runBuild` and
59
- * serve the emit. A real build (not a type-strip) is required because Node's
60
- * type-stripping cannot do cross-file type-only elision — e.g. a
61
- * value-shaped import of a type+namespace merge survives stripping and
62
- * dangles at runtime.
63
- * 3. No owning tsconfig: use an isolated tsgo emit in the runtime module format,
64
- * lowering standard decorators and CommonJS imports/exports. Type stripping
65
- * remains recovery when no compiler emit is available.
66
- *
67
- * The hooks are synchronous and run on the main thread (not a loader worker):
68
- * that is what lets a CommonJS `require("./x")` chain reach them and what makes
69
- * `require.resolve(..., { paths })` inside `runBuild`'s plugin loader behave.
70
- */
71
-
72
- /** Source/JS extensions probed when an extensionless relative import fails. */
73
- const RESOLVABLE_EXTENSIONS = [
74
- ".ts",
75
- ".tsx",
76
- ".mts",
77
- ".cts",
78
- ".js",
79
- ".mjs",
80
- ".cjs",
81
- ] as const;
82
-
83
- /** Union of the ttsx rescue probes and Node's built-in CommonJS probes. */
84
- const DESCRIPTOR_PROBE_EXTENSIONS = [
85
- ...RESOLVABLE_EXTENSIONS,
86
- ".json",
87
- ".node",
88
- ] as const;
89
-
90
- /** TypeScript source extensions these hooks compile. */
91
- const TYPESCRIPT_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts"] as const;
92
-
93
- interface ResolveContext {
94
- readonly parentURL?: string;
95
- readonly conditions?: string[];
96
- readonly importAttributes?: Record<string, string | undefined>;
97
- }
98
-
99
- interface ResolveResult {
100
- url: string;
101
- format?: string | null;
102
- shortCircuit?: boolean;
103
- }
104
-
105
- interface LoadContext {
106
- readonly format?: string | null;
107
- readonly conditions?: string[];
108
- readonly importAttributes?: Record<string, string | undefined>;
109
- }
110
-
111
- interface LoadResult {
112
- format: string | null | undefined;
113
- source?: string | ArrayBuffer | NodeJS.TypedArray;
114
- shortCircuit?: boolean;
115
- }
116
-
117
- /**
118
- * The compiler options that decide the emit format of a file, as declared by
119
- * the project that emitted it. Both fields matter: tsgo derives the module kind
120
- * from `target` whenever `module` is absent, so carrying only `module` cannot
121
- * reproduce its decision.
122
- */
123
- export interface OwningModuleOptions {
124
- module?: string;
125
- target?: string;
126
- }
127
-
128
- interface ServedSource {
129
- source: string;
130
- /** Options of the project that emitted this source; `null` when none did. */
131
- moduleOptions: OwningModuleOptions | null;
132
- emittedFile?: string;
133
- sourceFile?: string;
134
- }
135
-
136
- type NextResolve = (
137
- specifier: string,
138
- context: ResolveContext,
139
- ) => ResolveResult;
140
- type NextLoad = (url: string, context: LoadContext) => LoadResult;
141
-
142
- /**
143
- * Runtime manifest written by `runTtsx` (the parent) and read once here. It
144
- * describes the already-built entry project so the hooks can serve its emit.
145
- */
146
- export interface RuntimeManifest {
147
- /** Project root of the entry's owning tsconfig. */
148
- projectRoot: string;
149
- /** Source-tree root the emit mirrors (tsgo strips this prefix). */
150
- rootDir: string;
151
- /** Directory holding the entry project's emitted JavaScript. */
152
- emitDir: string;
153
- /** Emitted file list from the entry build, for source→output matching. */
154
- emittedFiles?: readonly string[];
155
- /** Physical TypeScript root whose checked preparation created this manifest. */
156
- entrySource?: string;
157
- /** Exact JavaScript emitted for `entrySource`. */
158
- entryFile?: string;
159
- /**
160
- * The entry tsconfig's `module` and `target`, deciding emit CJS/ESM per file.
161
- * `target` is not decoration: an absent `module` makes tsgo derive the module
162
- * kind from it.
163
- */
164
- moduleOptions?: OwningModuleOptions;
165
- /** Root directory for per-dependency build output. */
166
- depCacheDir: string;
167
- }
168
-
169
- let environmentManifestCache: RuntimeManifest | null | undefined;
170
- const registeredManifests: RuntimeManifest[] = [];
171
-
172
- function environmentManifest(): RuntimeManifest | null {
173
- if (environmentManifestCache !== undefined) {
174
- return environmentManifestCache;
175
- }
176
- const file = process.env.TTSX_RUNTIME_MANIFEST;
177
- if (file === undefined || file.length === 0) {
178
- environmentManifestCache = null;
179
- return environmentManifestCache;
180
- }
181
- try {
182
- environmentManifestCache = JSON.parse(
183
- fs.readFileSync(file, "utf8"),
184
- ) as RuntimeManifest;
185
- } catch {
186
- environmentManifestCache = null;
187
- }
188
- return environmentManifestCache;
189
- }
190
-
191
- /** Every checked entry emit available to this runtime, in ownership order. */
192
- function runtimeManifests(): readonly RuntimeManifest[] {
193
- const inherited = environmentManifest();
194
- return inherited === null
195
- ? registeredManifests
196
- : [inherited, ...registeredManifests];
197
- }
198
-
199
- /**
200
- * Lowest Node.js the ttsx source runtime supports. The synchronous
201
- * `module.registerHooks` (Node 22.15.0) is the highest floor among the runtime
202
- * APIs these hooks depend on — `stripTypeScriptTypes` (22.13.0) and the child's
203
- * `--disable-warning` flag (20.11.0) are both lower — so it sets the effective
204
- * minimum. Kept in sync with `packages/ttsc/package.json#engines.node` and the
205
- * documented requirement in `website/src/content/docs/development/index.mdx`.
206
- */
207
- export const TTSX_MINIMUM_NODE_VERSION = "22.15.0";
208
-
209
- const TTSX_MINIMUM_NODE_PARTS: readonly [number, number, number] = [22, 15, 0];
210
-
211
- /**
212
- * Report why the running (or a candidate) Node.js version cannot execute the
213
- * ttsx source runtime, or `null` when it can. Returning an actionable message —
214
- * rather than letting the child die with an internal `TypeError` on the missing
215
- * `registerHooks`, or Node 18 rejecting `--disable-warning` with exit 9 — is
216
- * what turns an opaque internal failure into a clear version diagnostic.
217
- *
218
- * Exported for direct exercise by the ttsx e2e suite: the built launcher can
219
- * only be spawned under the Node version running the tests, so the boundary
220
- * around the floor cannot otherwise be pinned on CI.
221
- */
222
- export function checkNodeRuntimeSupport(version: string): string | null {
223
- const parts = parseNodeVersion(version);
224
- if (parts === null) {
225
- // An unrecognizable version string is not proof of an unsupported runtime;
226
- // let execution proceed rather than block on a parsing quirk.
227
- return null;
228
- }
229
- if (compareVersionParts(parts, TTSX_MINIMUM_NODE_PARTS) >= 0) {
230
- return null;
231
- }
232
- return (
233
- `ttsx requires Node.js ${TTSX_MINIMUM_NODE_VERSION} or later, but this ` +
234
- `process is Node.js ${version}. The source runtime installs synchronous ` +
235
- `module hooks (module.registerHooks, Node 22.15.0) and strips types with ` +
236
- `module.stripTypeScriptTypes (Node 22.13.0), neither of which exists on ` +
237
- `earlier releases. Upgrade Node.js to 22.15.0+ (or the current LTS), or ` +
238
- `compile the project with \`ttsc\` and run the emitted JavaScript directly.`
239
- );
240
- }
241
-
242
- function parseNodeVersion(version: string): [number, number, number] | null {
243
- const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version.trim());
244
- if (match === null) {
245
- return null;
246
- }
247
- return [Number(match[1]), Number(match[2]), Number(match[3])];
248
- }
249
-
250
- function compareVersionParts(
251
- a: readonly [number, number, number],
252
- b: readonly [number, number, number],
253
- ): number {
254
- for (let index = 0; index < 3; index += 1) {
255
- if (a[index]! !== b[index]!) {
256
- return a[index]! < b[index]! ? -1 : 1;
257
- }
258
- }
259
- return 0;
260
- }
261
-
262
- /**
263
- * Throw an actionable version error when the current Node.js cannot run the
264
- * ttsx source runtime. Guards the hook-installation boundary directly (a child
265
- * or grandchild that inherits the runtime preload under an unsupported Node) so
266
- * the failure is diagnosed here instead of surfacing as a bare `TypeError:
267
- * registerHooks is not a function`.
268
- */
269
- function assertNodeRuntimeSupport(): void {
270
- const message = checkNodeRuntimeSupport(process.versions.node);
271
- if (message !== null) {
272
- throw new Error(message);
273
- }
274
- }
275
-
276
- let installed = false;
277
- let prepareRuntimeEntry: ((filename: string) => RuntimeManifest) | undefined;
278
-
279
- export interface RuntimeHookOptions {
280
- /** Prepare and type-check a TypeScript root discovered after registration. */
281
- prepareEntry?: (filename: string) => RuntimeManifest;
282
- }
283
-
284
- /**
285
- * Install the source-loading hooks on the current (main) thread. Idempotent:
286
- * the bootstrap installs them for the entry process, and `NODE_OPTIONS`
287
- * re-imports the installer in every child process the program spawns — both may
288
- * run in the same process.
289
- *
290
- * Two hooks are needed, because `module.registerHooks` does not intercept a
291
- * `require()` made from inside a CommonJS module that was itself reached
292
- * through an ESM `import` (the interop translator loads it on the raw CJS
293
- * path). The ESM graph goes through `registerHooks`; the CommonJS `require`
294
- * graph goes through `Module._extensions` and `Module._resolveFilename` — the
295
- * canonical loader extension points `ts-node`/`tsx` use for the same reason.
296
- *
297
- * Both halves of that second graph are required, and they answer different
298
- * questions. `_extensions` decides how a file that was _found_ is compiled, and
299
- * Node reuses its keys when it probes an extensionless request, so
300
- * `require("./x")` reaches `x.ts` for free. Nothing there resolves a request
301
- * that already carries an extension: `require("./x.js")` backed only by `x.ts`
302
- * is a resolution failure before any compiler is consulted, which is why the
303
- * rescue is installed on `_resolveFilename` as well (samchon/ttsc#1280).
304
- */
305
- export function installRuntimeHooks(options: RuntimeHookOptions = {}): void {
306
- if (options.prepareEntry !== undefined) {
307
- prepareRuntimeEntry = options.prepareEntry;
308
- }
309
- if (installed) {
310
- return;
311
- }
312
- assertNodeRuntimeSupport();
313
- installed = true;
314
- // Map error stacks through the source maps the serve path now inlines, so a
315
- // thrown frame reports the true `.ts` line:col out of the box (no
316
- // `--enable-source-maps` needed). Applied before the entry loads; user code
317
- // that later toggles it wins, since this is a plain runtime switch.
318
- if (typeof process.setSourceMapsEnabled === "function") {
319
- process.setSourceMapsEnabled(true);
320
- }
321
- registerHooks({ load, resolve });
322
- installCommonJsHook();
323
- installCommonJsResolveHook();
324
- }
325
-
326
- /**
327
- * Register a CommonJS `require` handler for each TypeScript source extension so
328
- * a `require("./x")` chain compiles `.ts` the same way the ESM `load` hook
329
- * does.
330
- */
331
- function installCommonJsHook(): void {
332
- const extensions = (
333
- Module as unknown as {
334
- _extensions: Record<
335
- string,
336
- (
337
- module: {
338
- _compile(source: string, filename: string): void;
339
- parent?: { filename?: string | null } | null;
340
- },
341
- filename: string,
342
- ) => void
343
- >;
344
- }
345
- )._extensions;
346
- const compile = (
347
- module: {
348
- _compile(source: string, filename: string): void;
349
- parent?: { filename?: string | null } | null;
350
- },
351
- filename: string,
352
- ): void => {
353
- const parent = module.parent?.filename;
354
- module._compile(
355
- resolveServedSource(
356
- filename,
357
- pathToFileURL(filename).href,
358
- typeof parent !== "string" || !isTypeScriptSource(parent),
359
- ).source,
360
- filename,
361
- );
362
- };
363
- for (const extension of [".ts", ".tsx", ".cts"]) {
364
- extensions[extension] = compile;
365
- }
366
- }
367
-
368
- /**
369
- * Map a JavaScript spelling back to its TypeScript source on the CommonJS
370
- * resolution path, so `require("./x.js")` finds `x.ts` when nothing emitted
371
- * `x.js`.
372
- *
373
- * TypeScript asks authors to write the emitted `.js` extension in a relative
374
- * specifier, so this spelling is the documented one rather than a mistake, and
375
- * the ESM `resolve` hook has always rescued it. The CommonJS graph could not,
376
- * and on Node 22 that graph is reached by every `require()` inside a CommonJS
377
- * module the ESM loader evaluated — `module.registerHooks` sees the `import()`
378
- * of that module and nothing within it. Node 24 routes the same `require`
379
- * through the hooks, which is why the gap was only ever visible on the oldest
380
- * runtime ttsx supports (`engines.node` is `>=22.15.0`).
381
- *
382
- * The wrapper only ever answers a request Node's own resolver already refused,
383
- * so a resolution that succeeds is never perturbed, and a request no candidate
384
- * satisfies rethrows Node's original error with its `MODULE_NOT_FOUND` code and
385
- * `requireStack` intact. `require.resolve` shares this entry point and is
386
- * rescued with it, except in its `{ paths }` form, which resolves against the
387
- * caller's list rather than the parent this reads.
388
- */
389
- function installCommonJsResolveHook(): void {
390
- const internals = Module as unknown as {
391
- _resolveFilename(
392
- request: string,
393
- parent: { filename?: string | null } | null | undefined,
394
- isMain: boolean,
395
- options?: unknown,
396
- ): string;
397
- };
398
- const original = internals._resolveFilename;
399
- internals._resolveFilename = function resolveFilename(
400
- this: unknown,
401
- request: string,
402
- parent: { filename?: string | null } | null | undefined,
403
- isMain: boolean,
404
- options?: unknown,
405
- ): string {
406
- try {
407
- return original.call(this, request, parent, isMain, options);
408
- } catch (error) {
409
- const rescued = rescueCommonJsRequest(request, parent, options);
410
- if (rescued === null) {
411
- throw error;
412
- }
413
- return rescued;
414
- }
415
- };
416
- }
417
-
418
- /**
419
- * The TypeScript source a refused CommonJS request names, or `null`.
420
- *
421
- * Only a relative or absolute request can be rescued: a bare specifier is a
422
- * package lookup, whose own resolver already probed every extension the
423
- * installed `_extensions` keys declare.
424
- *
425
- * Two shapes decline before that. `_resolveFilename` is an internal entry point
426
- * anything may call, so a non-string request reaches here as readily as a
427
- * specifier does, and reading it would replace Node's own argument error with a
428
- * `TypeError` from this file. And `require.resolve(request, { paths })`
429
- * resolves against the caller's list, which this rescue does not consult, so
430
- * answering it from the parent's directory would be a different question's
431
- * answer.
432
- */
433
- function rescueCommonJsRequest(
434
- request: string,
435
- parent: { filename?: string | null } | null | undefined,
436
- options?: unknown,
437
- ): string | null {
438
- if (typeof request !== "string") {
439
- return null;
440
- }
441
- if (
442
- typeof options === "object" &&
443
- options !== null &&
444
- Array.isArray((options as { paths?: unknown }).paths)
445
- ) {
446
- return null;
447
- }
448
- let base: string;
449
- if (path.isAbsolute(request)) {
450
- base = request;
451
- } else if (isRelativeSpecifier(request)) {
452
- const from = parent?.filename;
453
- if (typeof from !== "string") {
454
- return null;
455
- }
456
- base = path.resolve(path.dirname(from), request);
457
- } else {
458
- return null;
459
- }
460
- for (const candidate of typescriptSourcesForJavaScriptSpecifier(base)) {
461
- if (isFile(candidate)) {
462
- return candidate;
463
- }
464
- }
465
- return null;
466
- }
467
-
468
- /**
469
- * The module format of the entry source file, derived from the entry project's
470
- * compiler options (via the runtime manifest) the same way the served files are
471
- * classified. The bootstrap uses it to load the entry through a CommonJS
472
- * `require` or an ESM `import`.
473
- */
474
- export function entryModuleFormat(entryFile: string): "module" | "commonjs" {
475
- const real = realPath(entryFile);
476
- const owner = findEntryEmit(real)?.manifest;
477
- return moduleFormat(
478
- entryFile,
479
- owner === undefined ? null : (owner.moduleOptions ?? {}),
480
- ) === "module"
481
- ? "module"
482
- : "commonjs";
483
- }
484
-
485
- /** TypeScript URLs resolved at a JavaScript-to-TypeScript entry boundary. */
486
- const runtimeEntryUrls = new Set<string>();
487
-
488
- /**
489
- * Rescue an extensionless or directory relative specifier that Node's resolver
490
- * rejected. Only runs after `nextResolve` throws, so a successful resolution is
491
- * never perturbed; a genuinely missing module finds no candidate and the
492
- * original error is rethrown, preserving `ERR_MODULE_NOT_FOUND`.
493
- */
494
- function resolve(
495
- specifier: string,
496
- context: ResolveContext,
497
- nextResolve: NextResolve,
498
- ): ResolveResult {
499
- recordPluginDescriptorResolutionCandidates(specifier, context.parentURL);
500
- try {
501
- const result = rememberRuntimeEntry(
502
- rememberCommonJsNamedInterop(
503
- restoreStrippedNodeBuiltinScheme(
504
- specifier,
505
- nextResolve(specifier, context),
506
- ),
507
- context,
508
- ),
509
- context,
510
- );
511
- recordPluginDescriptorResolution(specifier, context.parentURL, result.url);
512
- return result;
513
- } catch (error) {
514
- const rescued = probeRescuableSpecifier(specifier, context.parentURL);
515
- if (rescued === null) {
516
- throw error;
517
- }
518
- const result = rememberRuntimeEntry(
519
- rememberCommonJsNamedInterop(
520
- { shortCircuit: true, url: rescued },
521
- context,
522
- ),
523
- context,
524
- );
525
- recordPluginDescriptorResolution(specifier, context.parentURL, result.url);
526
- return result;
527
- }
528
- }
529
-
530
- /**
531
- * Fingerprint every path whose state can redirect one descriptor import.
532
- *
533
- * This runs before the real resolver. Reporting candidates only after the
534
- * descriptor finished would pair an earlier descriptor result with later file
535
- * state when a higher-priority candidate appeared during evaluation.
536
- */
537
- function recordPluginDescriptorResolutionCandidates(
538
- specifier: string,
539
- parentURL: string | undefined,
540
- ): void {
541
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return;
542
- if (isBuiltin(specifier) || specifier.startsWith("node:")) return;
543
- const parent = runtimeFilePath(parentURL);
544
- if (parent === undefined) return;
545
- const recorded = new Set<string>();
546
- const record = (candidate: string): void => {
547
- const resolved = path.resolve(candidate);
548
- if (recorded.has(resolved)) return;
549
- recorded.add(resolved);
550
- recordPluginDescriptorInput({
551
- parent,
552
- resolved,
553
- });
554
- };
555
- const recordManifestTargets = (
556
- value: unknown,
557
- directory: string,
558
- allowBare: boolean = false,
559
- ): void => {
560
- if (typeof value === "string") {
561
- if (
562
- value !== "" &&
563
- (allowBare || value.startsWith("./") || value.startsWith("../"))
564
- ) {
565
- recordBase(path.resolve(directory, value));
566
- }
567
- return;
568
- }
569
- if (Array.isArray(value)) {
570
- for (const item of value) {
571
- recordManifestTargets(item, directory, allowBare);
572
- }
573
- return;
574
- }
575
- if (value !== null && typeof value === "object") {
576
- for (const item of Object.values(value)) {
577
- recordManifestTargets(item, directory, allowBare);
578
- }
579
- }
580
- };
581
- const recordPackageManifests = (file: string): void => {
582
- for (
583
- let directory = path.dirname(file);
584
- ;
585
- directory = path.dirname(directory)
586
- ) {
587
- const manifest = path.join(directory, "package.json");
588
- record(manifest);
589
- if (isFile(manifest)) return;
590
- const parentDirectory = path.dirname(directory);
591
- if (parentDirectory === directory) return;
592
- }
593
- };
594
- const localBases = (value: string): string[] => {
595
- if (value.startsWith("file:")) return [fileURLToPath(value)];
596
- const raw = path.resolve(path.dirname(parent), value);
597
- const suffixStart = value.search(/[?#]/);
598
- if (suffixStart === -1) return [raw];
599
- const pathname = value.slice(0, suffixStart);
600
- return pathname === ""
601
- ? [raw]
602
- : [...new Set([raw, path.resolve(path.dirname(parent), pathname)])];
603
- };
604
- const bases = new Set<string>();
605
- const recordBase = (base: string): void => {
606
- const resolvedBase = path.resolve(base);
607
- if (bases.has(resolvedBase)) return;
608
- bases.add(resolvedBase);
609
- record(resolvedBase);
610
- for (const candidate of typescriptSourcesForJavaScriptSpecifier(
611
- resolvedBase,
612
- )) {
613
- record(candidate);
614
- }
615
- for (const extension of DESCRIPTOR_PROBE_EXTENSIONS) {
616
- record(resolvedBase + extension);
617
- }
618
- const manifestFile = path.join(resolvedBase, "package.json");
619
- record(manifestFile);
620
- for (const extension of DESCRIPTOR_PROBE_EXTENSIONS) {
621
- record(path.join(resolvedBase, `index${extension}`));
622
- }
623
- try {
624
- const manifest = JSON.parse(
625
- fs.readFileSync(manifestFile, "utf8").replace(/^\uFEFF/, ""),
626
- ) as Record<string, unknown>;
627
- recordManifestTargets(manifest.exports, resolvedBase);
628
- recordManifestTargets(manifest.module, resolvedBase, true);
629
- recordManifestTargets(manifest.main, resolvedBase, true);
630
- } catch {
631
- // The real resolver owns malformed package diagnostics.
632
- }
633
- };
634
-
635
- if (
636
- specifier.startsWith(".") ||
637
- path.isAbsolute(specifier) ||
638
- specifier.startsWith("file:")
639
- ) {
640
- try {
641
- for (const base of localBases(specifier)) {
642
- recordPackageManifests(base);
643
- if (isFile(base)) record(base);
644
- else recordBase(base);
645
- }
646
- } catch {
647
- // The real resolver owns invalid URL spellings.
648
- }
649
- return;
650
- }
651
-
652
- const parts = specifier.split("/");
653
- const packageParts = parts[0]?.startsWith("@")
654
- ? parts.slice(0, 2)
655
- : parts.slice(0, 1);
656
- if (packageParts.some((part) => part === undefined || part === "")) return;
657
- const packageName = packageParts.join("/");
658
- const subpath = parts.slice(packageParts.length);
659
- for (const searchPath of createRequire(parent).resolve.paths(specifier) ??
660
- []) {
661
- const packageDirectory = path.join(searchPath, packageName);
662
- recordBase(packageDirectory);
663
- if (subpath.length !== 0) {
664
- recordBase(path.join(packageDirectory, ...subpath));
665
- }
666
- // CommonJS resolution continues past an existing but unusable package
667
- // directory. Record every search root before the resolver runs so a
668
- // farther selected package retains evaluation-time hashes for its
669
- // superseding candidates.
670
- }
671
- }
672
-
673
- /**
674
- * Report one resolved descriptor edge to the parent loader. The channel is
675
- * armed by the generated descriptor shim only after ttsx's own bootstrap and
676
- * imports have loaded, keeping compiler implementation files out of the
677
- * project's persistent-cache inputs.
678
- */
679
- function recordPluginDescriptorResolution(
680
- specifier: string,
681
- parentURL: string | undefined,
682
- resolvedURL: string,
683
- ): void {
684
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return;
685
- const out = process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_OUT;
686
- if (out === undefined || out.length === 0) return;
687
- const resolved = runtimeFilePath(resolvedURL);
688
- if (resolved === undefined) return;
689
- const parent = runtimeFilePath(parentURL);
690
- recordPluginDescriptorInput({
691
- ...(parent === undefined ? {} : { parent }),
692
- resolved,
693
- specifier,
694
- });
695
- for (
696
- let directory = path.dirname(resolved);
697
- ;
698
- directory = path.dirname(directory)
699
- ) {
700
- const manifest = path.join(directory, "package.json");
701
- recordPluginDescriptorInput({
702
- ...(parent === undefined ? {} : { parent }),
703
- resolved: manifest,
704
- });
705
- if (isFile(manifest)) break;
706
- const parentDirectory = path.dirname(directory);
707
- if (parentDirectory === directory) break;
708
- }
709
- }
710
-
711
- function recordPluginDescriptorInput(record: {
712
- hash?: string | null;
713
- parent?: string;
714
- realpath?: string | null;
715
- resolved: string;
716
- signature?: string;
717
- specifier?: string;
718
- unstable?: boolean;
719
- }): void {
720
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return;
721
- const out = process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_OUT;
722
- if (out === undefined || out.length === 0) return;
723
- recordPluginDescriptorInputOnce(record);
724
- const resolved = path.resolve(record.resolved);
725
- const parsed = path.parse(resolved);
726
- let current = parsed.root;
727
- const relative = path.relative(parsed.root, resolved);
728
- for (const segment of relative.split(path.sep).slice(0, -1)) {
729
- if (segment === "") continue;
730
- current = path.join(current, segment);
731
- try {
732
- if (fs.lstatSync(current).isSymbolicLink()) {
733
- recordPluginDescriptorInputOnce({ resolved: current });
734
- }
735
- } catch {
736
- break;
737
- }
738
- }
739
- }
740
-
741
- /** Record one path without recursively revisiting its lexical ancestors. */
742
- function recordPluginDescriptorInputOnce(record: {
743
- hash?: string | null;
744
- parent?: string;
745
- realpath?: string | null;
746
- resolved: string;
747
- signature?: string;
748
- specifier?: string;
749
- unstable?: boolean;
750
- }): void {
751
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return;
752
- const out = process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_OUT;
753
- if (out === undefined || out.length === 0) return;
754
- try {
755
- const beforeSignature = pluginDescriptorInputMetadataSignature(
756
- record.resolved,
757
- );
758
- const observedHash = pluginDescriptorInputHash(record.resolved);
759
- const observedRealpath = pluginDescriptorInputRealpath(record.resolved);
760
- const afterSignature = pluginDescriptorInputMetadataSignature(
761
- record.resolved,
762
- );
763
- const unstable =
764
- record.unstable === true ||
765
- beforeSignature === undefined ||
766
- afterSignature === undefined ||
767
- beforeSignature !== afterSignature ||
768
- (record.hash !== undefined && record.hash !== observedHash) ||
769
- (record.realpath !== undefined && record.realpath !== observedRealpath) ||
770
- (record.signature !== undefined && record.signature !== afterSignature);
771
- fs.appendFileSync(
772
- out,
773
- `${JSON.stringify({
774
- ...record,
775
- hash: observedHash,
776
- realpath: observedRealpath,
777
- ...(unstable ? { unstable: true } : { signature: afterSignature }),
778
- })}\n`,
779
- "utf8",
780
- );
781
- } catch {
782
- // Dependency reporting is advisory to cache reuse; the selected entry is
783
- // still retained by the parent if this best-effort side channel fails.
784
- }
785
- }
786
-
787
- function pluginDescriptorInputRealpath(file: string): string | null {
788
- try {
789
- return fs.realpathSync.native(file);
790
- } catch {
791
- return null;
792
- }
793
- }
794
-
795
- /** Metadata identity that exposes content-preserving A-B-A replacement. */
796
- function pluginDescriptorInputMetadataSignature(
797
- file: string,
798
- ): string | undefined {
799
- const requested = path.resolve(file);
800
- let current = requested;
801
- for (;;) {
802
- try {
803
- const link = fs.lstatSync(current, { bigint: true });
804
- let target = link;
805
- if (link.isSymbolicLink()) {
806
- try {
807
- target = fs.statSync(current, { bigint: true });
808
- } catch {
809
- // A broken link's own metadata cannot expose its target appearing
810
- // and disappearing during evaluation. Decline cache proof instead.
811
- return undefined;
812
- }
813
- }
814
- return [
815
- path.relative(current, requested),
816
- link.dev,
817
- link.ino,
818
- link.mode,
819
- link.size,
820
- link.mtimeNs,
821
- link.ctimeNs,
822
- target.dev,
823
- target.ino,
824
- target.mode,
825
- target.size,
826
- target.mtimeNs,
827
- target.ctimeNs,
828
- ].join(":");
829
- } catch (error) {
830
- if (!isMissingPathError(error)) return undefined;
831
- const parent = path.dirname(current);
832
- if (parent === current) return undefined;
833
- current = parent;
834
- }
835
- }
836
- }
837
-
838
- function pluginDescriptorInputHash(file: string): string | null {
839
- try {
840
- if (fs.statSync(file).isDirectory()) {
841
- return pluginDescriptorDirectoryHash();
842
- }
843
- return crypto
844
- .createHash("sha256")
845
- .update(fs.readFileSync(file))
846
- .digest("hex");
847
- } catch {
848
- return null;
849
- }
850
- }
851
-
852
- /** Stable public fingerprint for an existing directory candidate's kind. */
853
- function pluginDescriptorDirectoryHash(): string {
854
- return crypto
855
- .createHash("sha256")
856
- .update("ttsc:host-input:directory\0")
857
- .digest("hex");
858
- }
859
-
860
- function runtimeFilePath(value: string | undefined): string | undefined {
861
- if (value === undefined) return undefined;
862
- if (value.startsWith("file:")) {
863
- try {
864
- return path.resolve(fileURLToPath(value));
865
- } catch {
866
- return undefined;
867
- }
868
- }
869
- return path.isAbsolute(value) ? path.resolve(value) : undefined;
870
- }
871
-
872
- /** Remember an ESM root until its synchronous load hook prepares the project. */
873
- function rememberRuntimeEntry(
874
- result: ResolveResult,
875
- context: ResolveContext,
876
- ): ResolveResult {
877
- if (
878
- result.url.startsWith("file:") &&
879
- isTypeScriptSource(fileURLToPath(result.url)) &&
880
- (context.parentURL === undefined ||
881
- !context.parentURL.startsWith("file:") ||
882
- !isTypeScriptSource(fileURLToPath(context.parentURL)))
883
- ) {
884
- runtimeEntryUrls.add(result.url);
885
- }
886
- return result;
887
- }
888
-
889
- /**
890
- * Restore a `node:` builtin URL when affected Node releases return the exact
891
- * prefix-stripped spelling from their synchronous CommonJS resolver.
892
- *
893
- * Every other result passes through unchanged. In particular, a user hook that
894
- * intentionally remaps a `node:` specifier to another URL retains ownership of
895
- * that mapping, while ordinary and ESM builtin results already carrying the
896
- * scheme avoid an unnecessary copy.
897
- */
898
- export function restoreStrippedNodeBuiltinScheme(
899
- specifier: string,
900
- result: ResolveResult,
901
- ): ResolveResult {
902
- return isBuiltin(specifier) &&
903
- specifier.startsWith("node:") &&
904
- result.url === specifier.slice("node:".length)
905
- ? { ...result, url: specifier }
906
- : result;
907
- }
908
-
909
- /** Cache of built projects keyed by owning tsconfig path. */
910
- interface BuiltProject {
911
- emitDir: string;
912
- rootDir: string;
913
- emittedFiles?: readonly string[];
914
- moduleOptions: OwningModuleOptions;
915
- }
916
- const builtProjects = new Map<string, BuiltProject>();
917
- // A descriptor evaluator's dependency emit must never be reused by another
918
- // process. PIDs are eventually recycled while the disk cache persists, so PID
919
- // alone cannot provide that isolation. One cryptographically random process
920
- // nonce keeps every evaluator generation distinct while `builtProjects` still
921
- // shares repeated imports inside this process.
922
- const descriptorProcessCacheNonce = crypto.randomBytes(16).toString("hex");
923
-
924
- /** File URLs whose CommonJS source was reached from an ESM parent import. */
925
- const commonJsNamedInteropUrls = new Set<string>();
926
- const commonJsNameScanSources = new Map<string, string | null>();
927
-
928
- function load(
929
- url: string,
930
- context: LoadContext,
931
- nextLoad: NextLoad,
932
- ): LoadResult {
933
- if (!url.startsWith("file:")) {
934
- return nextLoad(url, context);
935
- }
936
- const filename = fileURLToPath(url);
937
- if (!isTypeScriptSource(filename)) {
938
- return nextLoad(url, context);
939
- }
940
- const { format, source } = resolveRuntimeSource(
941
- filename,
942
- url,
943
- runtimeEntryUrls.delete(url) || isProcessEntry(filename),
944
- );
945
- return {
946
- format,
947
- shortCircuit: true,
948
- source,
949
- };
950
- }
951
-
952
- function resolveRuntimeSource(
953
- filename: string,
954
- url: string = pathToFileURL(filename).href,
955
- prepareAsEntry: boolean = false,
956
- ): { format: string; source: string } {
957
- const served = resolveServedSource(filename, url, prepareAsEntry);
958
- const format = moduleFormat(filename, served.moduleOptions);
959
- return {
960
- format,
961
- source:
962
- format === "commonjs" && commonJsNamedInteropUrls.has(url)
963
- ? exposeCommonJsStarExports(
964
- served.source,
965
- served.emittedFile,
966
- served.sourceFile,
967
- )
968
- : served.source,
969
- };
970
- }
971
-
972
- /** Whether `filename` is the TypeScript main module named on Node's argv. */
973
- function isProcessEntry(filename: string): boolean {
974
- const entry = process.argv[1];
975
- return (
976
- entry !== undefined &&
977
- isTypeScriptSource(entry) &&
978
- realPath(path.resolve(entry)) === realPath(filename)
979
- );
980
- }
981
-
982
- function rememberCommonJsNamedInterop(
983
- result: ResolveResult,
984
- context: ResolveContext,
985
- ): ResolveResult {
986
- if (shouldExposeCommonJsNamedExports(result.url, context.parentURL)) {
987
- commonJsNamedInteropUrls.add(result.url);
988
- }
989
- return result;
990
- }
991
-
992
- /**
993
- * Whether a CommonJS-classified TypeScript source reached from an ESM parent
994
- * needs its nested `export *` names exposed.
995
- *
996
- * Only the parent side is decided here. The child's own format is re-checked
997
- * authoritatively in `resolveRuntimeSource` against the format its served
998
- * source actually carries, so this predicate deliberately does not repeat that
999
- * check: doing so would need the child's owning project, which is not known
1000
- * until the source is served, and an answer guessed from the nearest tsconfig
1001
- * silently under-exposes a file that tsconfig does not compile.
1002
- */
1003
- function shouldExposeCommonJsNamedExports(
1004
- url: string,
1005
- parentURL: string | undefined,
1006
- ): boolean {
1007
- if (
1008
- parentURL === undefined ||
1009
- !url.startsWith("file:") ||
1010
- !parentURL.startsWith("file:")
1011
- ) {
1012
- return false;
1013
- }
1014
- const parentFile = fileURLToPath(parentURL);
1015
- if (moduleFormat(parentFile, owningModuleOptions(parentFile)) !== "module") {
1016
- return false;
1017
- }
1018
- return isTypeScriptSource(fileURLToPath(url));
1019
- }
1020
-
1021
- /**
1022
- * The emit-deciding compiler options of the project that owns `filename`, or
1023
- * `null` when none does.
1024
- *
1025
- * The entry project owns a file only when it actually emitted it. Testing
1026
- * `isWithin(rootDir)` alone would claim every file under a wide `rootDir` —
1027
- * including the volume-root `rootDir` a config-loader project uses — and hand
1028
- * them the entry project's options even though the dependency or orphan lane is
1029
- * what serves them.
1030
- */
1031
- function owningModuleOptions(filename: string): OwningModuleOptions | null {
1032
- if (!isTypeScriptSource(filename)) {
1033
- return null;
1034
- }
1035
- const real = realPath(filename);
1036
- const owner = findEntryEmit(real)?.manifest;
1037
- if (owner !== undefined) {
1038
- return owner.moduleOptions ?? {};
1039
- }
1040
- const tsconfig = nearestTsconfig(real);
1041
- if (tsconfig === null) {
1042
- return null;
1043
- }
1044
- const cached = moduleOptionsCache.get(tsconfig);
1045
- if (cached !== undefined) {
1046
- return cached;
1047
- }
1048
- let options: OwningModuleOptions = {};
1049
- try {
1050
- const project = readPluginDescriptorProjectConfig(tsconfig);
1051
- options = projectModuleOptions(project.compilerOptions);
1052
- } catch {
1053
- // The owning project cannot be read, so nothing is known about the format
1054
- // it would have emitted. That is the same state as having no project at
1055
- // all, and it is what the dependency lane will conclude too when its build
1056
- // fails and the file falls through to the isolated orphan emit.
1057
- moduleOptionsCache.set(tsconfig, null);
1058
- return null;
1059
- }
1060
- moduleOptionsCache.set(tsconfig, options);
1061
- return options;
1062
- }
1063
-
1064
- /**
1065
- * Read one owning config while its discovered chain stays unchanged.
1066
- *
1067
- * A preliminary read discovers `extends`; an accepted read is bracketed by
1068
- * equal fingerprints over that exact chain. If churn never settles, ttsx can
1069
- * still execute the last project but reports every observed config as unstable,
1070
- * preventing a later snapshot from certifying the torn result.
1071
- */
1072
- function readPluginDescriptorProjectConfig(
1073
- tsconfig: string,
1074
- ): ReturnType<typeof readProjectConfig> {
1075
- const read = () =>
1076
- readProjectConfig({ cwd: path.dirname(tsconfig), tsconfig });
1077
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return read();
1078
-
1079
- const observed = new Set<string>([path.resolve(tsconfig)]);
1080
- let project: ReturnType<typeof readProjectConfig>;
1081
- try {
1082
- project = read();
1083
- } catch (error) {
1084
- recordPluginDescriptorProjectInputs(observed, true);
1085
- throw error;
1086
- }
1087
- let inputs = normalizedProjectConfigPaths(project, tsconfig);
1088
- for (let attempt = 0; attempt < 3; attempt += 1) {
1089
- for (const input of inputs) observed.add(input);
1090
- const before = pluginDescriptorInputHashes(inputs);
1091
- const beforeRealpaths = pluginDescriptorInputRealpaths(inputs);
1092
- const beforeSignatures = pluginDescriptorInputMetadataSignatures(inputs);
1093
- let candidate: ReturnType<typeof readProjectConfig>;
1094
- try {
1095
- candidate = read();
1096
- } catch (error) {
1097
- recordPluginDescriptorProjectInputs(observed, true);
1098
- throw error;
1099
- }
1100
- const candidateInputs = normalizedProjectConfigPaths(candidate, tsconfig);
1101
- for (const input of candidateInputs) observed.add(input);
1102
- const after = pluginDescriptorInputHashes(candidateInputs);
1103
- const afterRealpaths = pluginDescriptorInputRealpaths(candidateInputs);
1104
- const afterSignatures =
1105
- pluginDescriptorInputMetadataSignatures(candidateInputs);
1106
- if (
1107
- equalPluginDescriptorInputLists(inputs, candidateInputs) &&
1108
- equalPluginDescriptorInputHashes(before, after) &&
1109
- equalPluginDescriptorInputHashes(beforeRealpaths, afterRealpaths) &&
1110
- beforeSignatures !== undefined &&
1111
- afterSignatures !== undefined &&
1112
- equalPluginDescriptorInputHashes(beforeSignatures, afterSignatures)
1113
- ) {
1114
- for (const input of candidateInputs) {
1115
- recordPluginDescriptorInput({
1116
- hash: after[input]!,
1117
- realpath: afterRealpaths[input]!,
1118
- resolved: input,
1119
- signature: afterSignatures[input]!,
1120
- });
1121
- }
1122
- return candidate;
1123
- }
1124
- project = candidate;
1125
- inputs = candidateInputs;
1126
- }
1127
- recordPluginDescriptorProjectInputs(observed, true);
1128
- return project;
1129
- }
1130
-
1131
- function normalizedProjectConfigPaths(
1132
- project: ReturnType<typeof readProjectConfig>,
1133
- requestedConfig: string,
1134
- ): string[] {
1135
- return [
1136
- ...new Set(
1137
- [requestedConfig, ...project.configPaths].map((file) =>
1138
- path.resolve(file),
1139
- ),
1140
- ),
1141
- ].sort();
1142
- }
1143
-
1144
- function pluginDescriptorInputHashes(
1145
- inputs: readonly string[],
1146
- ): Record<string, string | null> {
1147
- return Object.fromEntries(
1148
- inputs.map((input) => [input, pluginDescriptorInputHash(input)]),
1149
- );
1150
- }
1151
-
1152
- function pluginDescriptorInputRealpaths(
1153
- inputs: readonly string[],
1154
- ): Record<string, string | null> {
1155
- return Object.fromEntries(
1156
- inputs.map((input) => [input, pluginDescriptorInputRealpath(input)]),
1157
- );
1158
- }
1159
-
1160
- function pluginDescriptorInputMetadataSignatures(
1161
- inputs: readonly string[],
1162
- ): Record<string, string> | undefined {
1163
- const output: Record<string, string> = {};
1164
- for (const input of inputs) {
1165
- const signature = pluginDescriptorInputMetadataSignature(input);
1166
- if (signature === undefined) return undefined;
1167
- output[path.resolve(input)] = signature;
1168
- }
1169
- return output;
1170
- }
1171
-
1172
- function equalPluginDescriptorInputLists(
1173
- first: readonly string[],
1174
- second: readonly string[],
1175
- ): boolean {
1176
- return (
1177
- first.length === second.length &&
1178
- first.every((input, index) => input === second[index])
1179
- );
1180
- }
1181
-
1182
- function equalPluginDescriptorInputHashes(
1183
- first: Readonly<Record<string, string | null>>,
1184
- second: Readonly<Record<string, string | null>>,
1185
- ): boolean {
1186
- return (
1187
- Object.keys(first).length === Object.keys(second).length &&
1188
- Object.entries(first).every(([input, hash]) => second[input] === hash)
1189
- );
1190
- }
1191
-
1192
- function recordPluginDescriptorProjectInputs(
1193
- inputs: Iterable<string>,
1194
- unstable: boolean,
1195
- ): void {
1196
- for (const input of inputs) {
1197
- const resolved = path.resolve(input);
1198
- recordPluginDescriptorInput({
1199
- resolved,
1200
- ...(unstable ? { unstable: true } : {}),
1201
- });
1202
- }
1203
- }
1204
-
1205
- /** Narrow a resolved project's compiler options to the emit-format pair. */
1206
- export function projectModuleOptions(
1207
- compilerOptions: Record<string, unknown>,
1208
- ): OwningModuleOptions {
1209
- return {
1210
- ...(typeof compilerOptions.module === "string"
1211
- ? { module: compilerOptions.module }
1212
- : {}),
1213
- ...(typeof compilerOptions.target === "string"
1214
- ? { target: compilerOptions.target }
1215
- : {}),
1216
- };
1217
- }
1218
-
1219
- /**
1220
- * Resolve the JavaScript to run for a TypeScript source file, in priority
1221
- * order: the entry project's pre-built emit (transform plugins applied), a
1222
- * built raw `.ts` dependency, or an isolated emit when no tsconfig owns it.
1223
- * Shared by the ESM `load` hook and the CommonJS `require` handler.
1224
- */
1225
- function resolveServedSource(
1226
- filename: string,
1227
- url: string = pathToFileURL(filename).href,
1228
- prepareAsEntry: boolean = false,
1229
- ): ServedSource {
1230
- const real = realPath(filename);
1231
- // Only the public preload can prepare a newly discovered root. Direct ttsx
1232
- // has one pre-built manifest and historically relies on trailing-stem
1233
- // recovery when Windows presents the same source through its short and long
1234
- // temp-path spellings (the lint TypeScript-config loader is one such case).
1235
- // Treating that boundary as prepare-only would discard the existing emit and
1236
- // feed ESM source into CommonJS interop, producing ERR_REQUIRE_CYCLE_MODULE.
1237
- const prepareEntry = prepareAsEntry ? prepareRuntimeEntry : undefined;
1238
- // A JavaScript-to-TypeScript boundary is a new checked root unless an
1239
- // existing manifest proves exact ownership. Trailing-stem recovery is not
1240
- // ownership evidence: two out-of-include `index.ts` roots can otherwise map
1241
- // to the first manifest's `index.js`, skipping the second root's diagnostics.
1242
- let served = serveEntryEmit(real, prepareEntry === undefined);
1243
- if (served !== null) {
1244
- return withInlineSourceMap(served);
1245
- }
1246
- if (prepareEntry !== undefined) {
1247
- registeredManifests.push(prepareEntry(real));
1248
- served = serveEntryEmit(real);
1249
- if (served === null) {
1250
- throw new Error(`ttsx: prepared entry emit not found for ${filename}`);
1251
- }
1252
- return withInlineSourceMap(served);
1253
- }
1254
- const built = serveDependencyEmit(real);
1255
- if (built !== null) {
1256
- return withInlineSourceMap(built);
1257
- }
1258
- return {
1259
- moduleOptions: null,
1260
- sourceFile: filename,
1261
- source: transformOrphanSource(filename, url),
1262
- };
1263
- }
1264
-
1265
- /**
1266
- * Inline a served emit's external source map into its text and absolutize the
1267
- * map's `sources`, so the JavaScript executed under the `.ts` source URL stays
1268
- * self-describing after the per-run emit directory is deleted. Applied to both
1269
- * the entry lane (`serveEntryEmit`) and the dependency lane
1270
- * (`serveBuiltDependency`); the orphan lane inlines its own map before
1271
- * caching.
1272
- */
1273
- function withInlineSourceMap(served: ServedSource): ServedSource {
1274
- const source = inlineServedSourceMap(
1275
- served.source,
1276
- served.emittedFile,
1277
- served.sourceFile,
1278
- );
1279
- return source === served.source ? served : { ...served, source };
1280
- }
1281
-
1282
- /**
1283
- * Transform a TypeScript source file that no tsconfig owns (a published or
1284
- * vendored package that ships raw `.ts`/`.cts`/`.mts` straight under
1285
- * `node_modules`), choosing the lowering by the format the file resolves to.
1286
- *
1287
- * Both module formats need the compiler: Node's type stripping neither lowers
1288
- * standard decorators nor rewrites ESM exports for CommonJS. Use the existing
1289
- * single-file emit with the file's own module format and a standard target.
1290
- * Retain stripping as recovery when no compiler emit is available.
1291
- */
1292
- function transformOrphanSource(filename: string, url: string): string {
1293
- const format =
1294
- moduleFormat(filename, null) === "commonjs" ? "commonjs" : "module";
1295
- const lowered = emitOrphanSource(filename, format);
1296
- if (lowered !== null) {
1297
- return lowered;
1298
- }
1299
- return stripTypeScriptTypes(fs.readFileSync(filename, "utf8"), {
1300
- mode: "transform",
1301
- sourceUrl: url,
1302
- });
1303
- }
1304
-
1305
- /**
1306
- * Lower a single source file to its runtime module format. Emit-only, no
1307
- * diagnostic gate (the entry project's up-front check is the type gate),
1308
- * matching `buildDependency`. Returns `null` when tsgo is unavailable or
1309
- * produced no output, so the caller can fall back to the in-process strip.
1310
- */
1311
- function emitOrphanSource(
1312
- filename: string,
1313
- format: "commonjs" | "module",
1314
- ): string | null {
1315
- let tsgo: string;
1316
- try {
1317
- tsgo = resolveTsgo({ cwd: path.dirname(filename) }).binary;
1318
- } catch {
1319
- return null;
1320
- }
1321
- // Content-hash cache: an orphan's tsgo single-file emit is lowered
1322
- // once and reused by every other process in the run, and across runs. Without
1323
- // it a program that fans out into many processes (the automated test corpus
1324
- // imports the same vendored `.ts` deps from thousands of generated files) would
1325
- // re-spawn tsgo per file per process and crawl.
1326
- const cacheFile = orphanCacheFile(filename, tsgo, format);
1327
- if (cacheFile !== null) {
1328
- const hit = readFileOrNull(cacheFile);
1329
- if (hit !== null) {
1330
- return hit;
1331
- }
1332
- }
1333
- const outDir = createCanonicalTempDirectory("ttsx-orphan-");
1334
- try {
1335
- const res = spawnNative(
1336
- tsgo,
1337
- [
1338
- filename,
1339
- "--module",
1340
- format === "commonjs" ? "commonjs" : "esnext",
1341
- ...ISOLATED_EMIT_ARGS,
1342
- "--sourceMap",
1343
- "--inlineSources",
1344
- "--outDir",
1345
- outDir,
1346
- "--listEmittedFiles",
1347
- ],
1348
- { cwd: path.dirname(filename), encoding: "utf8" },
1349
- );
1350
- const emitted = pickEmittedJavaScript(
1351
- filename,
1352
- parseEmittedFiles(outputText(res.stdout)),
1353
- );
1354
- const source = emitted === null ? null : readFileOrNull(emitted);
1355
- const lowered =
1356
- source === null
1357
- ? null
1358
- : inlineServedSourceMap(source, emitted!, filename);
1359
- if (lowered !== null && cacheFile !== null) {
1360
- writeOrphanCache(cacheFile, lowered);
1361
- }
1362
- return lowered;
1363
- } catch {
1364
- return null;
1365
- } finally {
1366
- fs.rmSync(outDir, { force: true, recursive: true });
1367
- }
1368
- }
1369
-
1370
- /**
1371
- * Read actual owned output for CommonJS export-name discovery, falling back to
1372
- * isolated emission only when no project emitted this source. Project
1373
- * transforms and const-enum settings decide which names exist at runtime. An
1374
- * ESM emit is lowered as JavaScript solely to scan its CommonJS names.
1375
- *
1376
- * This intentionally does not read or write the runtime orphan cache. Name
1377
- * discovery may inspect a source dependency without executing it, so sharing
1378
- * that output with the runtime fallback would let a speculative scan affect a
1379
- * later load path.
1380
- */
1381
- function emitCommonJsForNameScan(filename: string): string | null {
1382
- const real = realPath(filename);
1383
- const cached = commonJsNameScanSources.get(real);
1384
- if (cached !== undefined) {
1385
- return cached;
1386
- }
1387
- const served = serveEntryEmit(real) ?? serveDependencyEmit(real);
1388
- if (
1389
- served !== null &&
1390
- moduleFormat(real, served.moduleOptions) === "commonjs"
1391
- ) {
1392
- commonJsNameScanSources.set(real, served.source);
1393
- return served.source;
1394
- }
1395
- let tsgo: string;
1396
- try {
1397
- tsgo = resolveTsgo({ cwd: path.dirname(real) }).binary;
1398
- } catch {
1399
- commonJsNameScanSources.set(real, null);
1400
- return null;
1401
- }
1402
- const outDir = createCanonicalTempDirectory("ttsx-export-scan-");
1403
- try {
1404
- // Compile the owned JavaScript, not the original TypeScript whose project
1405
- // may already have erased or transformed declarations. No source executes.
1406
- const input = served === null ? real : path.join(outDir, "source.cts");
1407
- if (served !== null) fs.writeFileSync(input, served.source);
1408
- const res = spawnNative(
1409
- tsgo,
1410
- [
1411
- input,
1412
- "--module",
1413
- "commonjs",
1414
- ...ISOLATED_EMIT_ARGS,
1415
- "--outDir",
1416
- outDir,
1417
- "--listEmittedFiles",
1418
- ],
1419
- { cwd: path.dirname(real), encoding: "utf8" },
1420
- );
1421
- const emitted = pickEmittedJavaScript(
1422
- input,
1423
- parseEmittedFiles(outputText(res.stdout)),
1424
- );
1425
- const lowered = emitted === null ? null : readFileOrNull(emitted);
1426
- commonJsNameScanSources.set(real, lowered);
1427
- return lowered;
1428
- } catch {
1429
- commonJsNameScanSources.set(real, null);
1430
- return null;
1431
- } finally {
1432
- fs.rmSync(outDir, { force: true, recursive: true });
1433
- }
1434
- }
1435
-
1436
- /**
1437
- * Cache root for lowered orphan sources, shared per run (and across runs when
1438
- * `TTSC_CACHE_DIR` points at a persisted directory).
1439
- */
1440
- function orphanCacheRoot(): string {
1441
- const base =
1442
- process.env.TTSC_CACHE_DIR && process.env.TTSC_CACHE_DIR.length !== 0
1443
- ? process.env.TTSC_CACHE_DIR
1444
- : path.join(os.tmpdir(), "ttsc-orphan");
1445
- return path.join(base, "ttsx-orphan");
1446
- }
1447
-
1448
- /**
1449
- * Content-addressed cache path for isolated orphan lowering, including the
1450
- * source path because the inlined map identifies that path. `null` when the
1451
- * source cannot be read.
1452
- */
1453
- function orphanCacheFile(
1454
- filename: string,
1455
- tsgo: string,
1456
- format: "commonjs" | "module",
1457
- ): string | null {
1458
- let source: Buffer;
1459
- try {
1460
- source = fs.readFileSync(filename);
1461
- } catch {
1462
- return null;
1463
- }
1464
- const key = crypto
1465
- .createHash("sha256")
1466
- .update(tsgo)
1467
- .update("\0isolated-source-map-v1\0")
1468
- .update(filename)
1469
- .update("\0" + format)
1470
- .update("\0")
1471
- .update(source)
1472
- .digest("hex")
1473
- .slice(0, 32);
1474
- return path.join(orphanCacheRoot(), `${key}.js`);
1475
- }
1476
-
1477
- /**
1478
- * Write the lowered source to its cache path atomically (temp + rename), so a
1479
- * concurrent reader never sees a half-written file. Best-effort: a failure just
1480
- * means the next process re-lowers.
1481
- */
1482
- function writeOrphanCache(cacheFile: string, lowered: string): void {
1483
- try {
1484
- fs.mkdirSync(path.dirname(cacheFile), { recursive: true });
1485
- const tmp = `${cacheFile}.${process.pid}.${Date.now()}.tmp`;
1486
- fs.writeFileSync(tmp, lowered);
1487
- fs.renameSync(tmp, cacheFile);
1488
- } catch {
1489
- // ignore — caching is an optimization, correctness does not depend on it
1490
- }
1491
- }
1492
-
1493
- /** `TSFILE:` paths tsgo printed under `--listEmittedFiles`. */
1494
- function parseEmittedFiles(stdout: string): string[] {
1495
- const files: string[] = [];
1496
- for (const line of stdout.split(/\r?\n/)) {
1497
- const match = line.match(/^TSFILE:\s*(.+)$/);
1498
- if (match?.[1]) {
1499
- files.push(match[1].trim());
1500
- }
1501
- }
1502
- return files;
1503
- }
1504
-
1505
- /** Pick the emitted JavaScript corresponding to the source file requested. */
1506
- function pickEmittedJavaScript(
1507
- filename: string,
1508
- emittedFiles: readonly string[],
1509
- ): string | null {
1510
- const stem = path
1511
- .basename(filename)
1512
- .replace(/\.[cm]?tsx?$/i, "")
1513
- .toLowerCase();
1514
- const candidates = emittedFiles.filter((file) => {
1515
- const parsed = path.parse(file);
1516
- return (
1517
- parsed.name.toLowerCase() === stem && /\.(?:[cm]?js)$/i.test(parsed.base)
1518
- );
1519
- });
1520
- if (candidates.length === 1) {
1521
- return candidates[0]!;
1522
- }
1523
- return emittedFiles.find((file) => /\.(?:[cm]?js)$/i.test(file)) ?? null;
1524
- }
1525
-
1526
- /**
1527
- * Make TypeScript-Go's CommonJS `export *` output visible to Node's
1528
- * ESM-from-CJS named export scanner.
1529
- *
1530
- * Tsgo lowers star re-exports to `__exportStar(require("./x"), exports)`.
1531
- * Runtime CommonJS consumers see the getters that helper installs, but Node's
1532
- * ESM linker only exposes named imports it can statically identify from
1533
- * `exports.name = ...` assignments. For relative star re-exports whose emitted
1534
- * target is available, advertise its names through inert assignments that
1535
- * Node's static lexer recognizes. The original helper still owns every runtime
1536
- * binding, including values static discovery cannot enumerate.
1537
- */
1538
- function exposeCommonJsStarExports(
1539
- source: string,
1540
- emittedFile: string | undefined,
1541
- sourceFile: string | undefined,
1542
- ): string {
1543
- const parsed = parseCommonJsExports(source);
1544
- const reserved = new Set(parsed.exports);
1545
- const names = new Set<string>();
1546
- for (const specifier of parsed.reexports) {
1547
- for (const name of collectStarExportNames(
1548
- emittedFile,
1549
- sourceFile,
1550
- specifier,
1551
- )) {
1552
- if (name !== "default" && name !== "__esModule" && !reserved.has(name)) {
1553
- names.add(name);
1554
- }
1555
- }
1556
- }
1557
- if (names.size === 0) return source;
1558
- // Node's lexer reads these assignments statically. Nothing executes, and no
1559
- // existing statement, source position, control-flow body or runtime export
1560
- // is changed. Keep all specifier/literal parsing in the same lexer Node uses.
1561
- const hints = [...names]
1562
- .map((name) => `exports[${JSON.stringify(name)}] = void 0;`)
1563
- .join(" ");
1564
- return source + `\nif (false) { ${hints} }\n`;
1565
- }
1566
-
1567
- function collectStarExportNames(
1568
- emittedFile: string | undefined,
1569
- sourceFile: string | undefined,
1570
- specifier: string,
1571
- ): Set<string> {
1572
- if (emittedFile !== undefined) {
1573
- const emittedTarget = resolveEmittedRequire(emittedFile, specifier);
1574
- if (emittedTarget !== null) {
1575
- return collectCommonJsExportNames(emittedTarget, new Set());
1576
- }
1577
- }
1578
- if (sourceFile !== undefined) {
1579
- const sourceTarget = resolveSourceSpecifier(sourceFile, specifier);
1580
- if (sourceTarget !== null) {
1581
- return collectSourceCommonJsExportNames(sourceTarget, new Set());
1582
- }
1583
- }
1584
- return new Set();
1585
- }
1586
-
1587
- function collectCommonJsExportNames(
1588
- emittedFile: string,
1589
- seen: Set<string>,
1590
- ): Set<string> {
1591
- const real = realPath(emittedFile);
1592
- if (seen.has(real)) {
1593
- return new Set();
1594
- }
1595
- seen.add(real);
1596
- const source = readFileOrNull(real);
1597
- if (source === null) {
1598
- return new Set();
1599
- }
1600
- const parsed = parseCommonJsExports(source);
1601
- const names = new Set(parsed.exports);
1602
- for (const specifier of parsed.reexports) {
1603
- const target = resolveEmittedRequire(real, specifier);
1604
- if (target === null) {
1605
- continue;
1606
- }
1607
- for (const name of collectCommonJsExportNames(target, seen)) {
1608
- if (name !== "default" && name !== "__esModule" && !names.has(name)) {
1609
- names.add(name);
1610
- }
1611
- }
1612
- }
1613
- return names;
1614
- }
1615
-
1616
- function collectSourceCommonJsExportNames(
1617
- sourceFile: string,
1618
- seen: Set<string>,
1619
- ): Set<string> {
1620
- const real = realPath(sourceFile);
1621
- if (seen.has(real)) {
1622
- return new Set();
1623
- }
1624
- seen.add(real);
1625
- const source = emitCommonJsForNameScan(real);
1626
- if (source === null) {
1627
- return new Set();
1628
- }
1629
- const parsed = parseCommonJsExports(source);
1630
- const names = new Set(parsed.exports);
1631
- for (const specifier of parsed.reexports) {
1632
- const target = resolveSourceSpecifier(real, specifier);
1633
- if (target === null) {
1634
- continue;
1635
- }
1636
- for (const name of collectSourceCommonJsExportNames(target, seen)) {
1637
- if (name !== "default" && name !== "__esModule" && !names.has(name)) {
1638
- names.add(name);
1639
- }
1640
- }
1641
- }
1642
- return names;
1643
- }
1644
-
1645
- function resolveEmittedRequire(
1646
- emittedFile: string,
1647
- specifier: string,
1648
- ): string | null {
1649
- if (!isRelativeSpecifier(specifier)) {
1650
- return null;
1651
- }
1652
- const base = path.resolve(path.dirname(emittedFile), specifier);
1653
- if (path.extname(base).length !== 0) {
1654
- return isFile(base) ? base : null;
1655
- }
1656
- for (const extension of [".js", ".cjs", ".mjs"] as const) {
1657
- const candidate = base + extension;
1658
- if (isFile(candidate)) {
1659
- return candidate;
1660
- }
1661
- }
1662
- for (const extension of [".js", ".cjs", ".mjs"] as const) {
1663
- const candidate = path.join(base, `index${extension}`);
1664
- if (isFile(candidate)) {
1665
- return candidate;
1666
- }
1667
- }
1668
- return null;
1669
- }
1670
-
1671
- function resolveSourceSpecifier(
1672
- sourceFile: string,
1673
- specifier: string,
1674
- ): string | null {
1675
- if (!isRelativeSpecifier(specifier)) {
1676
- return null;
1677
- }
1678
- const base = path.resolve(path.dirname(sourceFile), specifier);
1679
- if (path.extname(base).length !== 0) {
1680
- if (isFile(base)) return base;
1681
- return typescriptSourcesForJavaScriptSpecifier(base).find(isFile) ?? null;
1682
- }
1683
- for (const extension of TYPESCRIPT_EXTENSIONS) {
1684
- const candidate = base + extension;
1685
- if (isFile(candidate)) {
1686
- return candidate;
1687
- }
1688
- }
1689
- for (const extension of TYPESCRIPT_EXTENSIONS) {
1690
- const candidate = path.join(base, `index${extension}`);
1691
- if (isFile(candidate)) {
1692
- return candidate;
1693
- }
1694
- }
1695
- return null;
1696
- }
1697
-
1698
- /**
1699
- * Serve the entry project's pre-built JavaScript for a source file the build
1700
- * emitted, or `null` when the file is outside the build or its emit is
1701
- * missing.
1702
- *
1703
- * The bound is the project's `rootDir` (the source root the emit mirrors), not
1704
- * its tsconfig directory: a project can pull in a file from elsewhere via
1705
- * `files` with a wider `rootDir` (e.g. the lint config loader compiles a
1706
- * `*.config.ts` from any directory under `rootDir: "/"`). Anything outside
1707
- * `rootDir` cannot have a mirrored emit, so it falls through to the dependency
1708
- * paths.
1709
- */
1710
- function serveEntryEmit(
1711
- real: string,
1712
- allowStemFallback: boolean = true,
1713
- ): ServedSource | null {
1714
- const owner = findEntryEmit(real, allowStemFallback);
1715
- if (owner === null) {
1716
- return null;
1717
- }
1718
- const source = readFileOrNull(owner.emittedFile);
1719
- return source === null
1720
- ? null
1721
- : {
1722
- emittedFile: owner.emittedFile,
1723
- moduleOptions: owner.manifest.moduleOptions ?? {},
1724
- source,
1725
- sourceFile: real,
1726
- };
1727
- }
1728
-
1729
- /**
1730
- * Find the manifest that owns `real`. Explicit prepared roots win, followed by
1731
- * exact mirrored paths across every manifest. Only then may legacy stem
1732
- * recovery run, so one manifest's approximate match cannot shadow another's
1733
- * exact emit.
1734
- */
1735
- function findEntryEmit(
1736
- real: string,
1737
- allowStemFallback: boolean = true,
1738
- ): { emittedFile: string; manifest: RuntimeManifest } | null {
1739
- const manifests = runtimeManifests();
1740
- for (const candidate of manifests) {
1741
- if (
1742
- candidate.entrySource !== undefined &&
1743
- candidate.entryFile !== undefined &&
1744
- realPath(candidate.entrySource) === real &&
1745
- fs.existsSync(candidate.entryFile)
1746
- ) {
1747
- return { emittedFile: candidate.entryFile, manifest: candidate };
1748
- }
1749
- }
1750
- for (const candidate of manifests) {
1751
- const emitted = entryEmitPath(candidate, real, false);
1752
- if (emitted !== null) {
1753
- return { emittedFile: emitted, manifest: candidate };
1754
- }
1755
- }
1756
- if (!allowStemFallback) {
1757
- return null;
1758
- }
1759
- for (const candidate of manifests) {
1760
- const emitted = entryEmitPath(candidate, real, true);
1761
- if (emitted !== null) {
1762
- return { emittedFile: emitted, manifest: candidate };
1763
- }
1764
- }
1765
- return null;
1766
- }
1767
-
1768
- /**
1769
- * The entry project's emitted JavaScript for `real`, or `null` when that
1770
- * project did not emit it. Shared with `owningModuleOptions` so "the entry
1771
- * project owns this file" means exactly one thing in both places.
1772
- */
1773
- function entryEmitPath(
1774
- m: RuntimeManifest,
1775
- real: string,
1776
- allowStemFallback: boolean = true,
1777
- ): string | null {
1778
- const cache = allowStemFallback
1779
- ? entryEmitPathCache
1780
- : exactEntryEmitPathCache;
1781
- let manifestCache = cache.get(m);
1782
- if (manifestCache === undefined) {
1783
- manifestCache = new Map<string, string | null>();
1784
- cache.set(m, manifestCache);
1785
- }
1786
- if (manifestCache.has(real)) {
1787
- return manifestCache.get(real) ?? null;
1788
- }
1789
- const resolved = isWithin(real, m.rootDir)
1790
- ? resolveEmittedJavaScript({
1791
- allowStemFallback,
1792
- emittedFiles: m.emittedFiles,
1793
- outDir: m.emitDir,
1794
- projectRoot: m.rootDir,
1795
- sourceFile: real,
1796
- })
1797
- : null;
1798
- manifestCache.set(real, resolved);
1799
- return resolved;
1800
- }
1801
-
1802
- /**
1803
- * Memo for `entryEmitPath`, because it is now on the `resolve` hook's path
1804
- * through `owningModuleOptions` — once per import specifier — and a miss inside
1805
- * `resolveEmittedJavaScript` walks the whole emit tree. The entry emit is
1806
- * written once before the run starts and never changes under it. Registration
1807
- * can add several independent entry emits, so the manifest is part of the cache
1808
- * identity as well as the source path.
1809
- */
1810
- const entryEmitPathCache = new WeakMap<
1811
- RuntimeManifest,
1812
- Map<string, string | null>
1813
- >();
1814
- const exactEntryEmitPathCache = new WeakMap<
1815
- RuntimeManifest,
1816
- Map<string, string | null>
1817
- >();
1818
-
1819
- /**
1820
- * True when `real` is `directory` itself or sits beneath it. Handles a root
1821
- * `directory` (`/`, `C:\`): naively appending a separator would yield `//`,
1822
- * which no path starts with, so a root `rootDir` project would serve nothing.
1823
- * Both sides are normalized to native separators first: a manifest `rootDir`
1824
- * arrives slash-normalized from the synthesized tsconfig (`C:/` on Windows)
1825
- * while `real` paths are native, and a raw prefix comparison across the two
1826
- * forms silently never matches. Filesystem identity preserves ordinary Windows
1827
- * aliases while keeping case-distinct paths under an opted-in directory
1828
- * separate. Exported for direct exercise by the ttsx e2e suite — spawned runs
1829
- * cannot pin both Windows case-semantics branches on CI.
1830
- */
1831
- export function isWithin(
1832
- real: string,
1833
- directory: string,
1834
- identities: FilesystemPathIdentityContext = createFilesystemPathIdentityContext(
1835
- { throwOnRealpathError: false },
1836
- ),
1837
- ): boolean {
1838
- return identities.isWithin(directory, real);
1839
- }
1840
-
1841
- /**
1842
- * Build the project that owns `real` (nearest `tsconfig.json` above its real
1843
- * path) and return its emitted JavaScript, or `null` when no tsconfig owns it
1844
- * or the project does not emit it. The build honours the dependency's own
1845
- * tsconfig (transform plugins included), so a source-shipping package that
1846
- * needs a transform behaves correctly at runtime.
1847
- */
1848
- function serveDependencyEmit(real: string): ServedSource | null {
1849
- const tsconfig = nearestTsconfig(real);
1850
- if (tsconfig === null) {
1851
- return null;
1852
- }
1853
- let built: BuiltProject;
1854
- try {
1855
- built = ensureProjectBuilt(tsconfig);
1856
- } catch {
1857
- // The owning project produced no emit at all; fall back to isolated emit of
1858
- // this single file rather than failing the whole run.
1859
- return null;
1860
- }
1861
- const served = serveBuiltDependency(built, real);
1862
- if (served !== null) {
1863
- return served;
1864
- }
1865
- return null;
1866
- }
1867
-
1868
- function serveBuiltDependency(
1869
- built: BuiltProject,
1870
- real: string,
1871
- ): ServedSource | null {
1872
- const emitted = resolveEmittedJavaScript({
1873
- emittedFiles: built.emittedFiles,
1874
- outDir: built.emitDir,
1875
- projectRoot: built.rootDir,
1876
- sourceFile: real,
1877
- });
1878
- if (emitted === null) {
1879
- return null;
1880
- }
1881
- const source = readFileOrNull(emitted);
1882
- return source === null
1883
- ? null
1884
- : {
1885
- emittedFile: emitted,
1886
- moduleOptions: built.moduleOptions,
1887
- source,
1888
- sourceFile: real,
1889
- };
1890
- }
1891
-
1892
- /**
1893
- * On-disk completion marker for a built dependency, shared across processes.
1894
- *
1895
- * `generation` names the exact immutable emit directory this marker describes
1896
- * (`<cacheDir>/gen-<generation>`). Binding metadata to one generation is what
1897
- * makes publication atomic: a reader that parses this marker reads the emit of
1898
- * the SAME generation, never old metadata combined with a different, still
1899
- * partially-written directory. The marker is the last thing a build writes, and
1900
- * it is written by an atomic temp-and-rename, so a reader observes either one
1901
- * complete old generation or one complete new generation.
1902
- */
1903
- interface DependencyCacheMeta {
1904
- generation: string;
1905
- rootDir: string;
1906
- moduleOptions?: OwningModuleOptions;
1907
- }
1908
-
1909
- /**
1910
- * Build the project that owns a dependency once per run and share the result
1911
- * across every process the program spawns.
1912
- *
1913
- * A program (a benchmark, a worker pool) can fan out into many child processes,
1914
- * each of which inherits the runtime manifest and would otherwise rebuild every
1915
- * dependency from scratch — and worse, several at once into the same directory,
1916
- * corrupting each other. So the build output is content-keyed under the shared
1917
- * per-run cache: a finished build leaves a meta marker that any later process
1918
- * (or a second import in this one) reuses, and concurrent first-builders are
1919
- * serialised by an atomic lock directory.
1920
- */
1921
- function ensureProjectBuilt(tsconfig: string): BuiltProject {
1922
- const cached = builtProjects.get(tsconfig);
1923
- if (cached !== undefined) {
1924
- return cached;
1925
- }
1926
- const { cacheDir, lockDir, metaPath, root } = dependencyCachePaths(tsconfig);
1927
-
1928
- const reuse = readDependencyCache(cacheDir, metaPath);
1929
- if (reuse !== null) {
1930
- builtProjects.set(tsconfig, reuse);
1931
- return reuse;
1932
- }
1933
-
1934
- fs.mkdirSync(root, { recursive: true });
1935
- const built = withBuildLock(cacheDir, metaPath, lockDir, () =>
1936
- buildDependency(tsconfig, cacheDir, metaPath),
1937
- );
1938
- builtProjects.set(tsconfig, built);
1939
- return built;
1940
- }
1941
-
1942
- interface DependencyCachePaths {
1943
- /** Container of this dependency's generation-stamped emit directories. */
1944
- cacheDir: string;
1945
- /** Fenced cross-process coordination directory (`<key>.lock`). */
1946
- lockDir: string;
1947
- /** Atomic completion pointer (`<key>.json`) naming the live generation. */
1948
- metaPath: string;
1949
- root: string;
1950
- }
1951
-
1952
- function dependencyCachePaths(tsconfig: string): DependencyCachePaths {
1953
- const key = dependencyCacheKey(tsconfig);
1954
- const root = dependencyCacheRoot();
1955
- return {
1956
- cacheDir: path.join(root, key),
1957
- lockDir: path.join(root, `${key}.lock`),
1958
- metaPath: path.join(root, `${key}.json`),
1959
- root,
1960
- };
1961
- }
1962
-
1963
- /** Derive one dependency cache key; exported for isolation regressions. */
1964
- export function dependencyCacheKey(
1965
- tsconfig: string,
1966
- options: {
1967
- descriptorLoad?: boolean;
1968
- descriptorNonce?: string;
1969
- } = {},
1970
- ): string {
1971
- const descriptorLoad =
1972
- options.descriptorLoad ?? process.env.TTSC_PLUGIN_DESCRIPTOR_LOAD === "1";
1973
- return (
1974
- crypto
1975
- .createHash("sha256")
1976
- .update(tsconfig)
1977
- .update("\0runtime-es2025")
1978
- // Descriptor evaluation promises a result bound to this process's exact
1979
- // input observations. Reusing an emit another evaluator built can pair
1980
- // that process's old source/config bytes with this process's later hashes.
1981
- // Keep ordinary ttsx worker sharing, but isolate descriptor builds with a
1982
- // non-reusable process nonce; the in-process `builtProjects` map still
1983
- // compiles each owning project once.
1984
- .update(
1985
- descriptorLoad
1986
- ? `\0descriptor-process:${
1987
- options.descriptorNonce ?? descriptorProcessCacheNonce
1988
- }`
1989
- : "",
1990
- )
1991
- .digest("hex")
1992
- .slice(0, 16)
1993
- );
1994
- }
1995
-
1996
- /** The immutable emit directory of one build generation under `cacheDir`. */
1997
- function dependencyGenerationDir(cacheDir: string, generation: string): string {
1998
- return path.join(cacheDir, `gen-${generation}`);
1999
- }
2000
-
2001
- /** A fresh 128-bit build-generation identifier. */
2002
- function newDependencyGeneration(): string {
2003
- return crypto.randomBytes(16).toString("hex");
2004
- }
2005
-
2006
- /** True for a well-formed 128-bit hex build generation. */
2007
- function isDependencyGeneration(value: unknown): value is string {
2008
- return typeof value === "string" && /^[0-9a-f]{32}$/.test(value);
2009
- }
2010
-
2011
- /**
2012
- * Reuse a dependency another process (or an earlier import) already built.
2013
- *
2014
- * The completion marker names the exact emit generation, so this reads metadata
2015
- * and emit as one unit: it returns a hit only when the marker parses to a valid
2016
- * generation AND that generation's directory holds emitted JavaScript. A reader
2017
- * that runs while a replacement build is populating a DIFFERENT generation
2018
- * directory keeps returning the previous complete generation until the atomic
2019
- * marker swap points at the new one — never a mix of old metadata and a partial
2020
- * new emit.
2021
- *
2022
- * Exported for the ttsx dependency-cache regressions.
2023
- */
2024
- export function readDependencyCache(
2025
- cacheDir: string,
2026
- metaPath: string,
2027
- ): BuiltProject | null {
2028
- let meta: DependencyCacheMeta;
2029
- try {
2030
- meta = JSON.parse(fs.readFileSync(metaPath, "utf8")) as DependencyCacheMeta;
2031
- } catch {
2032
- return null;
2033
- }
2034
- if (
2035
- !isDependencyGeneration(meta.generation) ||
2036
- typeof meta.rootDir !== "string" ||
2037
- // A marker with no `moduleOptions` object predates this field and cannot
2038
- // say which format its emit carries. Treating the absence as "no options"
2039
- // would classify a CommonJS emit as an ES module, so the generation is
2040
- // rejected and rebuilt instead. Every marker this version writes carries
2041
- // the object, empty or not.
2042
- typeof meta.moduleOptions !== "object" ||
2043
- meta.moduleOptions === null ||
2044
- Array.isArray(meta.moduleOptions)
2045
- ) {
2046
- return null;
2047
- }
2048
- const emitDir = dependencyGenerationDir(cacheDir, meta.generation);
2049
- if (!emittedAnything(emitDir)) {
2050
- return null;
2051
- }
2052
- return {
2053
- emitDir,
2054
- emittedFiles: undefined,
2055
- moduleOptions: projectModuleOptions(
2056
- meta.moduleOptions as Record<string, unknown>,
2057
- ),
2058
- // Resolved on the way out, not trusted as written. `rootDir` never gated
2059
- // reuse — the marker's generation, module options, and a non-empty emit do
2060
- // — so a marker carrying an unresolved spelling was already being reused,
2061
- // and then served every file of that dependency through the whole-tree stem
2062
- // rescan. The pass is idempotent and runs only on a hit, which
2063
- // `ensureProjectBuilt` memoizes per tsconfig. A marker from an earlier ttsc
2064
- // survives only under the shared `os.tmpdir()/ttsx-dep` fallback root; the
2065
- // manifest's own `depCacheDir` is per-process and removed with the run.
2066
- rootDir: resolvePhysicalPath(meta.rootDir),
2067
- };
2068
- }
2069
-
2070
- /**
2071
- * Run `build` while holding the fenced lock for this dependency, re-checking
2072
- * the cache once the lock is held (a concurrent builder may have just
2073
- * finished). A loser polls for the winner's completion marker and, only when
2074
- * the holding generation is provably abandoned (dead owner or the steal budget
2075
- * elapsed), retires precisely that generation before retrying — never a
2076
- * successor's.
2077
- */
2078
- function withBuildLock(
2079
- cacheDir: string,
2080
- metaPath: string,
2081
- lockDir: string,
2082
- build: () => BuiltProject,
2083
- ): BuiltProject {
2084
- for (;;) {
2085
- const reuse = readDependencyCache(cacheDir, metaPath);
2086
- if (reuse !== null) {
2087
- return reuse;
2088
- }
2089
- let lease: DependencyBuildLockLease | null;
2090
- try {
2091
- lease = acquireDependencyBuildLock(lockDir);
2092
- } catch {
2093
- // An unusable coordination directory must not silently skip the build.
2094
- // Generation-stamped emit and the atomic marker swap still keep every
2095
- // reader's view of publication consistent without the lock.
2096
- return build();
2097
- }
2098
- if (lease === null) {
2099
- const waited = waitForDependencyBuild(
2100
- cacheDir,
2101
- metaPath,
2102
- lockDir,
2103
- DEP_BUILD_LOCK_STEAL_MS,
2104
- );
2105
- if (waited.outcome === "built") {
2106
- return waited.built;
2107
- }
2108
- if (waited.outcome === "abandoned") {
2109
- // Retire only the generation this observation named. Losing the rename
2110
- // race means the holder's own release (or another waiter) already made
2111
- // progress, so a stale result never removes a live successor.
2112
- reclaimDependencyBuildLock(lockDir, waited.fence);
2113
- }
2114
- // "released" needs no repair: the holder freed the lock normally, so
2115
- // retry the ordinary acquisition.
2116
- continue;
2117
- }
2118
- try {
2119
- const reuseUnderLock = readDependencyCache(cacheDir, metaPath);
2120
- return reuseUnderLock ?? build();
2121
- } finally {
2122
- releaseDependencyBuildLock(lockDir, lease);
2123
- }
2124
- }
2125
- }
2126
-
2127
- /** Block the current (synchronous) thread for `ms` without busy-spinning. */
2128
- function sleepSync(ms: number): void {
2129
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
2130
- }
2131
-
2132
- /**
2133
- * Compile a dependency project into a fresh generation directory and publish
2134
- * its completion marker atomically.
2135
- *
2136
- * The emit lands in `<cacheDir>/gen-<generation>`, a directory no other
2137
- * generation or process shares, so it is never mutated in place while a reader
2138
- * looks at it. Only after the emit is proven non-empty is the marker written by
2139
- * temp-and-rename, binding metadata to that exact generation. A build that
2140
- * produced no output drops its partial directory so a failed generation can
2141
- * never be reused.
2142
- */
2143
- function buildDependency(
2144
- tsconfig: string,
2145
- cacheDir: string,
2146
- metaPath: string,
2147
- ): BuiltProject {
2148
- const project = readPluginDescriptorProjectConfig(tsconfig);
2149
- const generation = newDependencyGeneration();
2150
- const emitDir = dependencyGenerationDir(cacheDir, generation);
2151
- fs.rmSync(emitDir, { force: true, recursive: true });
2152
- fs.mkdirSync(emitDir, { recursive: true });
2153
- const result = runBuild({
2154
- cwd: project.root,
2155
- passthrough: runtimeCompilerArgs(project),
2156
- emit: true,
2157
- forceListEmittedFiles: true,
2158
- outDir: emitDir,
2159
- // The generation directory is an `outDir` this lane injected, not one the
2160
- // dependency declared, and tsgo demands an explicit `rootDir` (TS5011) as
2161
- // soon as any `outDir` is in play. Pinning the root tsgo would infer keeps
2162
- // a source-shipping dependency that declares no output buildable, and it is
2163
- // the same root `resolveDependencySourceRoot` publishes for it below —
2164
- // without it that dependency falls back to type-stripping (issue #1172).
2165
- pinInferredRootDir: true,
2166
- // Emit a source map on the transient dependency emit (it never reaches the
2167
- // dependency's published `lib/`) so the serve path can inline it under the
2168
- // source URL, but only when the dependency configures none itself. Routed
2169
- // as a dedicated build option, not a forwarded tsgo flag, so it never
2170
- // reaches a native plugin host's argument parser (issue #353).
2171
- forceRuntimeSourceMap:
2172
- project.compilerOptions.sourceMap !== true &&
2173
- project.compilerOptions.inlineSourceMap !== true,
2174
- // Honour the dependency's own transform plugins: a source-shipping package
2175
- // can itself depend on a transform (e.g. a fixture whose values are built
2176
- // with `typia.createRandom`), and its runtime behaviour is wrong without it.
2177
- // `runBuild` runs on this main thread, so its plugin resolution works the
2178
- // same as the entry build's. The exception is loading a plugin descriptor
2179
- // (`TTSC_PLUGIN_DESCRIPTOR_LOAD`): there the descriptor's own — possibly
2180
- // self-hosting — transform must NOT run, or it re-enters plugin loading and
2181
- // deadlocks, so every dependency in that graph builds with plugins off.
2182
- plugins:
2183
- process.env.TTSC_PLUGIN_DESCRIPTOR_LOAD === "1" ? false : undefined,
2184
- quiet: true,
2185
- resolvedProject: project,
2186
- // Emit only: the entry project's up-front check is the type gate. A
2187
- // dependency build pulls its own transitive sources into the program and
2188
- // would otherwise fail on type diagnostics that belong to those packages
2189
- // under their own (laxer) config — e.g. unused-type-parameter warnings in a
2190
- // transitively imported library. We still want the type-aware emit (for
2191
- // type-only elision), just not the error gate.
2192
- skipDiagnosticsCheck: true,
2193
- tsconfig,
2194
- });
2195
- // Success is "the project wrote JavaScript", not "the build reported a file
2196
- // list": a native transform host (typia, @ttsc/banner, …) emits without
2197
- // printing the `--listEmittedFiles` lines, so `result.emittedFiles` is empty
2198
- // even on a clean build. A genuinely empty output directory is the real
2199
- // failure; the caller then falls back to isolated emit of the one file.
2200
- if (!emittedAnything(emitDir)) {
2201
- // Drop the failed generation so its partial directory can never be mistaken
2202
- // for a reusable build.
2203
- fs.rmSync(emitDir, { force: true, recursive: true });
2204
- throw new Error(
2205
- [
2206
- `ttsx: dependency build produced no output for ${tsconfig}`,
2207
- result.stderr || result.stdout,
2208
- ]
2209
- .filter((line) => line.trim().length !== 0)
2210
- .join("\n"),
2211
- );
2212
- }
2213
- const rootDir = resolveDependencySourceRoot(project);
2214
- const moduleOptions = projectModuleOptions(project.compilerOptions);
2215
- publishDependencyMeta(metaPath, { generation, moduleOptions, rootDir });
2216
- return { emitDir, emittedFiles: undefined, moduleOptions, rootDir };
2217
- }
2218
-
2219
- /**
2220
- * Publish the completion marker atomically: write it to a private temp name in
2221
- * the same directory, then rename onto `metaPath`. Node's rename replaces an
2222
- * existing file atomically on POSIX and Windows alike, so a concurrent reader
2223
- * sees either the whole previous marker or the whole new one, never a
2224
- * half-written file. The marker is the LAST artifact a build writes, after its
2225
- * generation's emit is complete, so observing the new marker guarantees the new
2226
- * generation is complete.
2227
- */
2228
- function publishDependencyMeta(
2229
- metaPath: string,
2230
- meta: DependencyCacheMeta,
2231
- ): void {
2232
- const tmp = `${metaPath}.${process.pid}.${Date.now()}.${crypto
2233
- .randomBytes(6)
2234
- .toString("hex")}.tmp`;
2235
- fs.writeFileSync(tmp, JSON.stringify(meta), "utf8");
2236
- try {
2237
- fs.renameSync(tmp, metaPath);
2238
- } catch (error) {
2239
- fs.rmSync(tmp, { force: true });
2240
- throw error;
2241
- }
2242
- }
2243
-
2244
- export function dependencyCacheRoot(
2245
- env: NodeJS.ProcessEnv = process.env,
2246
- ): string {
2247
- // Descriptor evaluators are disposable and must not leave one isolated emit
2248
- // generation in the shared temp cache per load. Their result file already
2249
- // lives in the evaluator-owned directory that the parent removes in
2250
- // `finally`; put dependency emits beside it so that cleanup owns both.
2251
- if (
2252
- env.TTSC_PLUGIN_DESCRIPTOR_LOAD === "1" &&
2253
- typeof env.TTSC_PLUGIN_DESCRIPTOR_OUT === "string" &&
2254
- path.isAbsolute(env.TTSC_PLUGIN_DESCRIPTOR_OUT)
2255
- ) {
2256
- return path.join(
2257
- path.dirname(env.TTSC_PLUGIN_DESCRIPTOR_OUT),
2258
- "dependency-cache",
2259
- );
2260
- }
2261
- const owner = runtimeManifests().find(
2262
- (candidate) => candidate.depCacheDir.length !== 0,
2263
- );
2264
- return owner !== undefined
2265
- ? owner.depCacheDir
2266
- : path.join(os.tmpdir(), "ttsx-dep");
2267
- }
2268
-
2269
- // -----------------------------------------------------------------------------
2270
- // Fenced dependency-build lock.
2271
- //
2272
- // The lock serialises concurrent first-builders of one dependency so the
2273
- // expensive `runBuild` runs once per key while the rest wait and reuse the
2274
- // published generation. It is generation-fenced so a stale observer or a former
2275
- // owner can never release a successor's lock:
2276
- //
2277
- // * `<lockDir>/current` is the held generation — a directory carrying a
2278
- // `generation` id and an `owner.json` (pid + hostname). A contender writes a
2279
- // private candidate and atomically renames it onto `current`; a directory
2280
- // rename cannot replace a non-empty `current`, so exactly one contender wins
2281
- // with no empty-owner publication window.
2282
- // * Release and reclaim both retire a generation by renaming `current` to its
2283
- // deterministic tombstone `<lockDir>/retired/<generation>`. The only way to
2284
- // free `current` is to create that tombstone, so a successor can acquire only
2285
- // after its predecessor's tombstone exists. A late or duplicate retire of an
2286
- // already-retired generation therefore finds the tombstone occupied and
2287
- // fails atomically, and a reclaim that named an old generation can never move
2288
- // a different successor into that old tombstone.
2289
- //
2290
- // This mirrors the source-plugin v2 protocol (`buildSourcePlugin.ts`) proven by
2291
- // issue #452 / PR #460, minus the legacy-compatibility layer: the ttsx
2292
- // dependency cache lives under a per-run directory with no shipped on-disk
2293
- // format to stay compatible with.
2294
- // -----------------------------------------------------------------------------
2295
-
2296
- const DEP_BUILD_LOCK_STEAL_MS = 600_000;
2297
- const DEP_BUILD_LOCK_POLL_MS = 50;
2298
- const DEP_BUILD_LOCK_STALE_MS = 30_000;
2299
- const DEP_BUILD_LOCK_CURRENT_DIR = "current";
2300
- const DEP_BUILD_LOCK_RETIRED_DIR = "retired";
2301
- const DEP_BUILD_LOCK_GENERATION_FILE = "generation";
2302
- const DEP_BUILD_LOCK_OWNER_FILE = "owner.json";
2303
-
2304
- /** Ownership token returned only to the process that acquired `current`. */
2305
- export type DependencyBuildLockLease = { generation: string };
2306
-
2307
- /** Opaque identity of one observed lock generation. */
2308
- export type DependencyBuildLockFence = { generation: string };
2309
-
2310
- /**
2311
- * Atomically acquire the current generation of a dependency build lock, or
2312
- * `null` when another process already holds it. Exported for the deterministic
2313
- * multi-process cache regressions.
2314
- */
2315
- export function acquireDependencyBuildLock(
2316
- lockDir: string,
2317
- ): DependencyBuildLockLease | null {
2318
- ensureDependencyLockRoot(lockDir);
2319
- const generation = newDependencyGeneration();
2320
- const candidateDir = path.join(lockDir, `candidate-${generation}`);
2321
- fs.mkdirSync(candidateDir);
2322
- try {
2323
- fs.writeFileSync(
2324
- path.join(candidateDir, DEP_BUILD_LOCK_GENERATION_FILE),
2325
- `${generation}\n`,
2326
- { encoding: "utf8", flag: "wx" },
2327
- );
2328
- writeDependencyLockOwner(candidateDir, generation);
2329
- const currentDir = path.join(lockDir, DEP_BUILD_LOCK_CURRENT_DIR);
2330
- try {
2331
- fs.renameSync(candidateDir, currentDir);
2332
- } catch (error) {
2333
- if (
2334
- isMissingPathError(error) ||
2335
- isRenameDestinationOccupied(error, currentDir)
2336
- ) {
2337
- return null;
2338
- }
2339
- throw error;
2340
- }
2341
- return { generation };
2342
- } finally {
2343
- // The candidate name carries this process's random generation and can never
2344
- // alias `current` or another contender's candidate.
2345
- fs.rmSync(candidateDir, { force: true, recursive: true });
2346
- }
2347
- }
2348
-
2349
- /** Retire a held generation during the holder's `finally`. */
2350
- export function releaseDependencyBuildLock(
2351
- lockDir: string,
2352
- lease: DependencyBuildLockLease,
2353
- ): boolean {
2354
- return retireDependencyBuildLock(lockDir, lease.generation);
2355
- }
2356
-
2357
- /**
2358
- * Retire exactly the generation carried by an abandoned observation. Exported
2359
- * for the deterministic multi-process cache regressions.
2360
- */
2361
- export function reclaimDependencyBuildLock(
2362
- lockDir: string,
2363
- fence: DependencyBuildLockFence,
2364
- ): boolean {
2365
- return retireDependencyBuildLock(lockDir, fence.generation);
2366
- }
2367
-
2368
- function retireDependencyBuildLock(
2369
- lockDir: string,
2370
- generation: string,
2371
- ): boolean {
2372
- if (!isDependencyGeneration(generation)) {
2373
- return false;
2374
- }
2375
- const retiredDir = path.join(lockDir, DEP_BUILD_LOCK_RETIRED_DIR);
2376
- try {
2377
- fs.mkdirSync(retiredDir);
2378
- } catch (error) {
2379
- if ((error as NodeJS.ErrnoException).code !== "EEXIST") {
2380
- if (isMissingPathError(error)) {
2381
- return false;
2382
- }
2383
- throw error;
2384
- }
2385
- }
2386
- const destination = path.join(retiredDir, generation);
2387
- try {
2388
- fs.renameSync(path.join(lockDir, DEP_BUILD_LOCK_CURRENT_DIR), destination);
2389
- return true;
2390
- } catch (error) {
2391
- if (
2392
- isMissingPathError(error) ||
2393
- isRenameDestinationOccupied(error, destination)
2394
- ) {
2395
- return false;
2396
- }
2397
- throw error;
2398
- }
2399
- }
2400
-
2401
- /** One observation of a dependency build lock's state. */
2402
- export type DependencyBuildLockObservation =
2403
- | { state: "active"; owner: string; fence: DependencyBuildLockFence }
2404
- | { state: "abandoned"; reason: string; fence: DependencyBuildLockFence }
2405
- | { state: "released" };
2406
-
2407
- /**
2408
- * Classify the current state of a dependency build lock directory. Exported for
2409
- * the deterministic multi-process cache regressions.
2410
- */
2411
- export function inspectDependencyBuildLock(
2412
- lockDir: string,
2413
- now: number,
2414
- ): DependencyBuildLockObservation {
2415
- const currentDir = path.join(lockDir, DEP_BUILD_LOCK_CURRENT_DIR);
2416
- const generation = readDependencyLockGeneration(currentDir);
2417
- if (generation === null) {
2418
- if (dependencyLockAgeMs(currentDir, now) === null) {
2419
- return { state: "released" };
2420
- }
2421
- // `current` exists without a readable generation id. Acquisition writes the
2422
- // id into the candidate BEFORE the atomic rename, so this is a transient or
2423
- // corrupt state; keep waiting rather than steal on ambiguous evidence.
2424
- return {
2425
- state: "active",
2426
- owner: "lock generation without a readable id",
2427
- fence: { generation: "" },
2428
- };
2429
- }
2430
- const fence: DependencyBuildLockFence = { generation };
2431
- const owner = readDependencyLockOwner(currentDir);
2432
- if (owner !== null) {
2433
- const label = describeDependencyLockOwner(owner);
2434
- if (isLocalHostName(owner.hostname) && !isProcessAlive(owner.pid)) {
2435
- return {
2436
- state: "abandoned",
2437
- reason: `${label} is no longer running`,
2438
- fence,
2439
- };
2440
- }
2441
- return { state: "active", owner: label, fence };
2442
- }
2443
- const ageMs = dependencyLockAgeMs(currentDir, now);
2444
- if (ageMs === null) {
2445
- return { state: "released" };
2446
- }
2447
- if (ageMs > DEP_BUILD_LOCK_STALE_MS) {
2448
- return {
2449
- state: "abandoned",
2450
- reason: `lock generation has no ${DEP_BUILD_LOCK_OWNER_FILE} and is ${formatDuration(
2451
- ageMs,
2452
- )} old`,
2453
- fence,
2454
- };
2455
- }
2456
- return {
2457
- state: "active",
2458
- owner: `lock generation with no ${DEP_BUILD_LOCK_OWNER_FILE}`,
2459
- fence,
2460
- };
2461
- }
2462
-
2463
- /** Outcome of one waiting session on another process's dependency build lock. */
2464
- type DependencyBuildWaitResult =
2465
- | { outcome: "built"; built: BuiltProject }
2466
- | { outcome: "released" }
2467
- | { outcome: "abandoned"; reason: string; fence: DependencyBuildLockFence };
2468
-
2469
- /** Poll for the locked builder to publish, up to `timeoutMs`. */
2470
- function waitForDependencyBuild(
2471
- cacheDir: string,
2472
- metaPath: string,
2473
- lockDir: string,
2474
- timeoutMs: number,
2475
- ): DependencyBuildWaitResult {
2476
- const startedAt = Date.now();
2477
- for (;;) {
2478
- const reuse = readDependencyCache(cacheDir, metaPath);
2479
- if (reuse !== null) {
2480
- return { outcome: "built", built: reuse };
2481
- }
2482
- const now = Date.now();
2483
- const lock = inspectDependencyBuildLock(lockDir, now);
2484
- if (lock.state === "released") {
2485
- // The holder retired its generation between the cache check above and this
2486
- // observation: prefer the marker if it landed in that window, otherwise
2487
- // hand the free lock back to the caller to re-acquire.
2488
- const built = readDependencyCache(cacheDir, metaPath);
2489
- return built !== null
2490
- ? { outcome: "built", built }
2491
- : { outcome: "released" };
2492
- }
2493
- if (lock.state === "abandoned") {
2494
- return { outcome: "abandoned", reason: lock.reason, fence: lock.fence };
2495
- }
2496
- if (now - startedAt > timeoutMs) {
2497
- return {
2498
- outcome: "abandoned",
2499
- reason: `timed out after ${formatDuration(now - startedAt)}`,
2500
- fence: lock.fence,
2501
- };
2502
- }
2503
- sleepSync(DEP_BUILD_LOCK_POLL_MS);
2504
- }
2505
- }
2506
-
2507
- function ensureDependencyLockRoot(lockDir: string): void {
2508
- fs.mkdirSync(path.join(lockDir, DEP_BUILD_LOCK_RETIRED_DIR), {
2509
- recursive: true,
2510
- });
2511
- }
2512
-
2513
- interface DependencyLockOwner {
2514
- hostname: string;
2515
- pid: number;
2516
- startedAt?: string;
2517
- }
2518
-
2519
- function writeDependencyLockOwner(
2520
- generationDir: string,
2521
- generation: string,
2522
- ): void {
2523
- fs.writeFileSync(
2524
- path.join(generationDir, DEP_BUILD_LOCK_OWNER_FILE),
2525
- `${JSON.stringify({
2526
- generation,
2527
- hostname: os.hostname(),
2528
- pid: process.pid,
2529
- startedAt: new Date().toISOString(),
2530
- })}\n`,
2531
- "utf8",
2532
- );
2533
- }
2534
-
2535
- function readDependencyLockOwner(
2536
- generationDir: string,
2537
- ): DependencyLockOwner | null {
2538
- try {
2539
- const parsed = JSON.parse(
2540
- fs.readFileSync(
2541
- path.join(generationDir, DEP_BUILD_LOCK_OWNER_FILE),
2542
- "utf8",
2543
- ),
2544
- ) as Record<string, unknown>;
2545
- if (
2546
- typeof parsed.hostname !== "string" ||
2547
- typeof parsed.pid !== "number" ||
2548
- !Number.isInteger(parsed.pid) ||
2549
- parsed.pid <= 0
2550
- ) {
2551
- return null;
2552
- }
2553
- return {
2554
- hostname: parsed.hostname,
2555
- pid: parsed.pid,
2556
- startedAt:
2557
- typeof parsed.startedAt === "string" ? parsed.startedAt : undefined,
2558
- };
2559
- } catch {
2560
- return null;
2561
- }
2562
- }
2563
-
2564
- function readDependencyLockGeneration(generationDir: string): string | null {
2565
- try {
2566
- const generation = fs
2567
- .readFileSync(
2568
- path.join(generationDir, DEP_BUILD_LOCK_GENERATION_FILE),
2569
- "utf8",
2570
- )
2571
- .trim();
2572
- return isDependencyGeneration(generation) ? generation : null;
2573
- } catch {
2574
- return null;
2575
- }
2576
- }
2577
-
2578
- /** Age of an observed lock directory, or `null` when it no longer exists. */
2579
- function dependencyLockAgeMs(
2580
- generationDir: string,
2581
- now: number,
2582
- ): number | null {
2583
- try {
2584
- return Math.max(0, now - fs.statSync(generationDir).mtimeMs);
2585
- } catch (error) {
2586
- return isMissingPathError(error) ? null : 0;
2587
- }
2588
- }
2589
-
2590
- function describeDependencyLockOwner(owner: DependencyLockOwner): string {
2591
- const started =
2592
- owner.startedAt === undefined ? "" : ` started at ${owner.startedAt}`;
2593
- return `pid ${owner.pid} on ${owner.hostname}${started}`;
2594
- }
2595
-
2596
- function isLocalHostName(hostname: string): boolean {
2597
- return hostname.toLowerCase() === os.hostname().toLowerCase();
2598
- }
2599
-
2600
- function isProcessAlive(pid: number): boolean {
2601
- try {
2602
- process.kill(pid, 0);
2603
- return true;
2604
- } catch (error) {
2605
- return (error as NodeJS.ErrnoException).code === "EPERM";
2606
- }
2607
- }
2608
-
2609
- function isMissingPathError(error: unknown): boolean {
2610
- const code = (error as NodeJS.ErrnoException).code;
2611
- return code === "ENOENT" || code === "ENOTDIR";
2612
- }
2613
-
2614
- function isRenameDestinationOccupied(
2615
- error: unknown,
2616
- destination: string,
2617
- ): boolean {
2618
- const code = (error as NodeJS.ErrnoException).code;
2619
- if (code === "EEXIST" || code === "ENOTEMPTY") {
2620
- return true;
2621
- }
2622
- return (code === "EACCES" || code === "EPERM") && fs.existsSync(destination);
2623
- }
2624
-
2625
- /** Render a millisecond duration for lock diagnostics (`137ms`, `42s`, `9m 3s`). */
2626
- function formatDuration(ms: number): string {
2627
- if (!Number.isFinite(ms)) {
2628
- return "an unknown time";
2629
- }
2630
- if (ms < 1_000) {
2631
- return `${Math.max(0, Math.round(ms))}ms`;
2632
- }
2633
- const seconds = Math.floor(ms / 1_000);
2634
- const minutes = Math.floor(seconds / 60);
2635
- const remainder = seconds % 60;
2636
- return minutes === 0 ? `${seconds}s` : `${minutes}m ${remainder}s`;
2637
- }
2638
-
2639
- /** Owning-tsconfig cache keyed by directory, mirroring `packageTypeCache`. */
2640
- interface ITsconfigLookup {
2641
- candidates: readonly string[];
2642
- result: string | null;
2643
- }
2644
-
2645
- const tsconfigCache = new Map<string, ITsconfigLookup>();
2646
- const moduleOptionsCache = new Map<string, OwningModuleOptions | null>();
2647
-
2648
- /**
2649
- * The nearest `tsconfig.json` at or above `file`'s directory, or `null`. The
2650
- * walk stops at a `node_modules` boundary: a tsconfig above `node_modules`
2651
- * belongs to the consumer, not to the published dependency inside it, so a
2652
- * dependency that ships no tsconfig of its own has no owning project and is
2653
- * compiled in isolation instead. A pnpm-symlinked workspace package is
2654
- * unaffected because `file` is already its real path (outside `node_modules`).
2655
- *
2656
- * The walk is memoised per directory (the whole walked chain shares one
2657
- * answer), so the thousands of files a fanned-out test corpus imports from the
2658
- * same handful of projects do not each re-stat the same parent directories.
2659
- */
2660
- function nearestTsconfig(file: string): string | null {
2661
- let directory = path.dirname(file);
2662
- const chain: string[] = [];
2663
- for (;;) {
2664
- const cached = tsconfigCache.get(directory);
2665
- if (cached !== undefined) {
2666
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") {
2667
- return rememberTsconfig(chain, cached.result, cached.candidates);
2668
- }
2669
- // Bracket the cached selection with the same candidate observations the
2670
- // parent later reconciles. A nearer config created between a liveness
2671
- // check and reporting must conflict, not be paired with the cached
2672
- // farther result and certified as current.
2673
- recordPluginDescriptorTsconfigCandidates(cached.candidates);
2674
- const current = nearestExistingTsconfig(cached.candidates);
2675
- recordPluginDescriptorTsconfigCandidates(cached.candidates);
2676
- if (current === cached.result) {
2677
- return rememberTsconfig(chain, cached.result, cached.candidates);
2678
- }
2679
- // Descriptor factories can deliberately create a config before a lazy
2680
- // import. A lookup cached while an earlier import ran must not keep
2681
- // serving the orphan lane after the nearest candidate changed.
2682
- tsconfigCache.delete(directory);
2683
- }
2684
- if (path.basename(directory) === "node_modules") {
2685
- return rememberTsconfig(chain, null);
2686
- }
2687
- chain.push(directory);
2688
- const candidate = path.join(directory, "tsconfig.json");
2689
- recordPluginDescriptorTsconfigCandidates([candidate]);
2690
- if (isFile(candidate)) {
2691
- return rememberTsconfig(chain, candidate);
2692
- }
2693
- const parent = path.dirname(directory);
2694
- if (parent === directory) {
2695
- return rememberTsconfig(chain, null);
2696
- }
2697
- directory = parent;
2698
- }
2699
- }
2700
-
2701
- function nearestExistingTsconfig(candidates: readonly string[]): string | null {
2702
- for (const candidate of candidates) {
2703
- if (isFile(candidate)) return path.resolve(candidate);
2704
- }
2705
- return null;
2706
- }
2707
-
2708
- function rememberTsconfig(
2709
- directories: readonly string[],
2710
- result: string | null,
2711
- tailCandidates: readonly string[] = [],
2712
- ): string | null {
2713
- let candidates = [...tailCandidates];
2714
- for (let index = directories.length - 1; index >= 0; index -= 1) {
2715
- const directory = directories[index]!;
2716
- candidates = [path.join(directory, "tsconfig.json"), ...candidates];
2717
- tsconfigCache.set(directory, { candidates, result });
2718
- }
2719
- return result;
2720
- }
2721
-
2722
- /** Report every owning-config candidate observed by the nearest-config walk. */
2723
- function recordPluginDescriptorTsconfigCandidates(
2724
- candidates: readonly string[],
2725
- ): void {
2726
- if (process.env.TTSC_PLUGIN_DESCRIPTOR_INPUTS_ACTIVE !== "1") return;
2727
- for (const candidate of candidates) {
2728
- const resolved = path.resolve(candidate);
2729
- recordPluginDescriptorInput({
2730
- resolved,
2731
- });
2732
- }
2733
- }
2734
-
2735
- function readFileOrNull(file: string | null): string | null {
2736
- if (file === null) {
2737
- return null;
2738
- }
2739
- try {
2740
- return fs.readFileSync(file, "utf8");
2741
- } catch {
2742
- return null;
2743
- }
2744
- }
2745
-
2746
- /**
2747
- * The physical path, in the same spelling the launcher decided on.
2748
- *
2749
- * `realpathSync.native` first, because the plain implementation resolves
2750
- * reparse points but leaves a Windows 8.3 component alone — and `TEMP` is
2751
- * `C:\Users\RUNNER~1\...` on a GitHub Windows runner. The launcher resolves the
2752
- * entry through `fs.realpathSync.native`, so answering here with the short name
2753
- * would put a `..` in `path.relative(rootDir, real)`, drop the exact-mirror
2754
- * lane, and leave the entry to whatever the trailing-stem matcher picks.
2755
- */
2756
- export function realPath(target: string): string {
2757
- try {
2758
- return fs.realpathSync.native?.(target) ?? fs.realpathSync(target);
2759
- } catch {
2760
- return target;
2761
- }
2762
- }
2763
-
2764
- /**
2765
- * The physical spelling of a path, produced the way the served sources it will
2766
- * be compared against are produced.
2767
- *
2768
- * `createFilesystemPathIdentityContext` is the same resolver the entry lane
2769
- * uses (`prepareExecution.ts::resolveRuntimeSourceRoot`). For a path that
2770
- * exists it is one `realpathSync.native`. For one that does not it resolves as
2771
- * far as the filesystem goes and folds the missing tail by the case semantics
2772
- * of the surviving ancestor, which costs a directory read and, on Windows, can
2773
- * cost an `fsutil` query — worth knowing, but off the path a real dependency
2774
- * root takes.
2775
- *
2776
- * Total on purpose. `throwOnRealpathError: false` silences a failed realpath,
2777
- * but the case-sensitivity probe can still fail on its own (an unreadable
2778
- * ancestor, a denied alternate-case `lstat`), and neither caller has anywhere
2779
- * to put that: `readDependencyCache` is contracted to answer `null` rather than
2780
- * throw, and `buildDependency` has already produced its emit. The unresolved
2781
- * spelling is exactly what both had before this pass, so it is the fallback.
2782
- */
2783
- function resolvePhysicalPath(location: string): string {
2784
- try {
2785
- return createFilesystemPathIdentityContext({
2786
- throwOnRealpathError: false,
2787
- }).resolve(location).path;
2788
- } catch {
2789
- return location;
2790
- }
2791
- }
2792
-
2793
- /**
2794
- * The source-tree root a dependency's emit mirrors, in the spelling
2795
- * `resolveEmittedJavaScript` compares a served source against.
2796
- *
2797
- * Both branches need the pass, for different reasons. A declared `rootDir`
2798
- * arrives from `readProjectConfig` joined against the config that declared it
2799
- * but never resolved, so a `rootDir` that is itself a symlinked directory stays
2800
- * unresolved. `project.root` arrives through plain `fs.realpathSync`, which
2801
- * follows reparse points but leaves a Windows 8.3 component alone — and
2802
- * {@link realPath} uses `fs.realpathSync.native`, which expands it. Either way
2803
- * `path.relative` puts a `..` in front of an in-project source,
2804
- * `resolveExactEmittedFiles` returns nothing, and every served file of that
2805
- * dependency falls to the trailing-stem matcher, which rescans the whole emit
2806
- * tree per file because a dependency build publishes no emitted-file list.
2807
- *
2808
- * This is the pass the entry lane settled on for the same mixed pair; the two
2809
- * lanes now read alike, `path.isAbsolute` guard included. `readProjectConfig`
2810
- * absolutizes every path option against the config that declared it, so that
2811
- * guard is a mirror of the entry lane rather than a live branch.
2812
- */
2813
- function resolveDependencySourceRoot(
2814
- project: ReturnType<typeof readProjectConfig>,
2815
- ): string {
2816
- const rootDir = project.compilerOptions.rootDir;
2817
- return resolvePhysicalPath(
2818
- typeof rootDir !== "string"
2819
- ? project.root
2820
- : path.isAbsolute(rootDir)
2821
- ? rootDir
2822
- : path.resolve(project.root, rootDir),
2823
- );
2824
- }
2825
-
2826
- /**
2827
- * Map the JavaScript extension a relative `specifier` carries to the TypeScript
2828
- * source extensions tsgo would have emitted it from. Running from source, a
2829
- * `"./x.js"` import (whether authored or rewritten from `"./x.ts"` by
2830
- * `--rewriteRelativeImportExtensions`) has no `.js` on disk — only `./x.ts`.
2831
- */
2832
- const JS_TO_TS_EXTENSIONS: ReadonlyMap<string, readonly string[]> = new Map([
2833
- [".js", [".ts", ".tsx"]],
2834
- [".jsx", [".tsx"]],
2835
- [".mjs", [".mts"]],
2836
- [".cjs", [".cts"]],
2837
- ]);
2838
-
2839
- /** Candidate sources that can satisfy one missing JavaScript spelling. */
2840
- function typescriptSourcesForJavaScriptSpecifier(file: string): string[] {
2841
- const extension = path.extname(file).toLowerCase();
2842
- const substitutions = JS_TO_TS_EXTENSIONS.get(extension);
2843
- if (substitutions === undefined) return [];
2844
- const stem = file.slice(0, file.length - extension.length);
2845
- return substitutions.map((candidate) => stem + candidate);
2846
- }
2847
-
2848
- /**
2849
- * Rescue a `specifier` that Node's resolver rejected: map a JavaScript
2850
- * extension back to its TypeScript source, or probe candidate extensions /
2851
- * directory indexes for an extensionless form. Returns a `file:` URL for the
2852
- * first match, or `null` when nothing matches.
2853
- *
2854
- * Handles two shapes:
2855
- *
2856
- * - A relative specifier (`./x`) resolved against a `file:` parent — a normal
2857
- * `import`/`require` inside a served module;
2858
- * - An already-absolute specifier with no parent — the main entry of a
2859
- * `child_process.fork(__dirname + "/servant.js")`. fork's main module reaches
2860
- * the resolve hook as an absolute `.js` path with `parentURL` undefined, and
2861
- * run-from-source ships only the `.ts`, so without this the child dies with
2862
- * `Cannot find module servant.js` and a tgrid master waits on it forever.
2863
- */
2864
- function probeRescuableSpecifier(
2865
- specifier: string,
2866
- parentURL: string | undefined,
2867
- ): string | null {
2868
- // A `?query` / `#hash` suffix is part of module identity, not the path; strip
2869
- // it before resolving and re-attach it to the resolved URL so a loader keying
2870
- // on the suffix (and `import.meta.url`) sees it preserved.
2871
- const suffixStart = specifier.search(/[?#]/);
2872
- const suffix = suffixStart === -1 ? "" : specifier.slice(suffixStart);
2873
- const pathname =
2874
- suffixStart === -1 ? specifier : specifier.slice(0, suffixStart);
2875
- let base: string;
2876
- if (isRelativeSpecifier(specifier)) {
2877
- if (parentURL === undefined || !parentURL.startsWith("file:")) {
2878
- return null;
2879
- }
2880
- const parentDir = path.dirname(fileURLToPath(parentURL));
2881
- base = path.resolve(parentDir, pathname);
2882
- } else if (path.isAbsolute(pathname)) {
2883
- base = pathname;
2884
- } else {
2885
- return null;
2886
- }
2887
- const withSuffix = (candidate: string): string =>
2888
- pathToFileURL(candidate).href + suffix;
2889
-
2890
- const jsExtension = path.extname(base).toLowerCase();
2891
- const tsExtensions = JS_TO_TS_EXTENSIONS.get(jsExtension);
2892
- if (tsExtensions !== undefined) {
2893
- const stem = base.slice(0, base.length - jsExtension.length);
2894
- for (const extension of tsExtensions) {
2895
- const candidate = stem + extension;
2896
- if (isFile(candidate)) {
2897
- return withSuffix(candidate);
2898
- }
2899
- }
2900
- return null;
2901
- }
2902
- if (hasConcreteExtension(pathname)) {
2903
- return null;
2904
- }
2905
- for (const extension of RESOLVABLE_EXTENSIONS) {
2906
- const candidate = base + extension;
2907
- if (isFile(candidate)) {
2908
- return withSuffix(candidate);
2909
- }
2910
- }
2911
- for (const extension of RESOLVABLE_EXTENSIONS) {
2912
- const candidate = path.join(base, `index${extension}`);
2913
- if (isFile(candidate)) {
2914
- return withSuffix(candidate);
2915
- }
2916
- }
2917
- return null;
2918
- }
2919
-
2920
- /**
2921
- * Decide the module format the way Node and tsgo do — from configuration, never
2922
- * by sniffing the emitted text.
2923
- *
2924
- * The file extension is authoritative first (`.mts`/`.mjs` → module,
2925
- * `.cts`/`.cjs` → commonjs), exactly as tsgo's
2926
- * `getImpliedNodeFormatForEmitWorker` checks it ahead of everything else.
2927
- *
2928
- * After that the decision belongs to the project that emitted the file, so
2929
- * `options` is the whole compiler-option pair tsgo consults, not just `module`:
2930
- * an absent `module` is NOT "ask Node", it is "derive the kind from `target`"
2931
- * (tsgo's `getEmitModuleKind`), and TypeScript 7 defaults `target` to the
2932
- * latest standard, which means ES modules. Only the `node*` family defers to
2933
- * the nearest `package.json` `type`, because only that family makes tsgo
2934
- * consult it.
2935
- *
2936
- * `options` is `null` for a file no tsconfig owns at all — a raw `.ts` shipped
2937
- * under `node_modules`. Nothing emitted it, so Node's own rule is the only rule
2938
- * there is, and the package `type` decides.
2939
- */
2940
- function moduleFormat(
2941
- filename: string,
2942
- options: OwningModuleOptions | null,
2943
- ): string {
2944
- if (filename.endsWith(".mts") || filename.endsWith(".mjs")) {
2945
- return "module";
2946
- }
2947
- if (filename.endsWith(".cts") || filename.endsWith(".cjs")) {
2948
- return "commonjs";
2949
- }
2950
- if (options === null) {
2951
- return nearestPackageType(filename);
2952
- }
2953
- // A package that states its `type` outright decides for the files inside it
2954
- // whatever the module kind is. This is where a source-shipping dependency's
2955
- // own declaration overrides the compiling project's `module`; see
2956
- // `declaredNodeModulesPackageType` for why `node_modules` bounds it.
2957
- const declared = declaredNodeModulesPackageType(filename);
2958
- if (declared !== null) {
2959
- return declared;
2960
- }
2961
- const kind = effectiveModuleKind(options);
2962
- if (
2963
- kind === "node16" ||
2964
- kind === "node18" ||
2965
- kind === "node20" ||
2966
- kind === "nodenext"
2967
- ) {
2968
- return nearestPackageType(filename);
2969
- }
2970
- if (kind === "commonjs") {
2971
- return "commonjs";
2972
- }
2973
- // Everything that remains (es2015 … esnext, and `preserve`, which keeps the
2974
- // authored ESM syntax verbatim whatever the package `type` says) is emitted
2975
- // as ECMAScript modules. `amd`, `umd`, and `system` are not among them:
2976
- // TypeScript 7 removed all three, so a project declaring one cannot build,
2977
- // and a file it would have owned reaches the run through the orphan lane
2978
- // instead.
2979
- return "module";
2980
- }
2981
-
2982
- /**
2983
- * The `"type"` a `node_modules` package states for `filename`, or `null`.
2984
- *
2985
- * Tsgo's `GetImpliedNodeFormatForEmitWorker` consults a file's
2986
- * `packageJsonType` for **every** module kind, not just the `node*` family. So
2987
- * a source-shipping dependency that declares `"type": "commonjs"` is emitted as
2988
- * CommonJS even while the compiling project asks for `esnext`, and the mirror
2989
- * has to honour the same override or Node is handed the wrong format.
2990
- *
2991
- * Outside `node_modules` that field is empty for every module kind this
2992
- * override can change. `loadSourceFileMetaData` does fill it elsewhere — for a
2993
- * file whose extension does not itself state the format (anything but `.mts`,
2994
- * `.cts`, `.mjs`, `.cjs`) whose project sets `moduleResolution` to the
2995
- * `node16`…`nodenext` family — but `program.go` rejects that resolution unless
2996
- * `module` is in the same family, and for a `node*` `module` the package `type`
2997
- * is already the whole answer, which the caller's own `node*` branch produces.
2998
- * So answering from a manifest outside `node_modules` could only override the
2999
- * project's own `module` option, the very confusion this classifier exists to
3000
- * end.
3001
- */
3002
- function declaredNodeModulesPackageType(
3003
- filename: string,
3004
- ): "module" | "commonjs" | null {
3005
- if (!pathHasNodeModulesSegment(filename)) {
3006
- return null;
3007
- }
3008
- return declaredPackageType(filename);
3009
- }
3010
-
3011
- /**
3012
- * Whether any path segment of `filename` is literally `node_modules`.
3013
- *
3014
- * Case-sensitive on every platform, because the upstream test this mirrors is a
3015
- * case-sensitive substring search and Node's own resolver recognises only the
3016
- * exact spelling. A directory named `Node_Modules` is a package store to
3017
- * neither of them, and must not become one here.
3018
- */
3019
- function pathHasNodeModulesSegment(filename: string): boolean {
3020
- return filename.split(/[\\/]/).includes("node_modules");
3021
- }
3022
-
3023
- /**
3024
- * The `module` kind tsgo actually emits with, mirroring `getEmitModuleKind`:
3025
- * the declared `module` when there is one, and otherwise the kind implied by
3026
- * `target`. `"none"` is the spelling of an unset `module`, so it derives the
3027
- * same way.
3028
- */
3029
- function effectiveModuleKind(options: OwningModuleOptions): string {
3030
- const declared = (options.module ?? "").toLowerCase();
3031
- if (declared !== "" && declared !== "none") {
3032
- return declared;
3033
- }
3034
- const target = (options.target ?? "").toLowerCase();
3035
- if (target === "esnext") {
3036
- return "esnext";
3037
- }
3038
- const year = scriptTargetYear(target);
3039
- if (year === null) {
3040
- // An unset `target` is `ScriptTargetLatestStandard` upstream, well above the
3041
- // ES2022 boundary. Every other spelling lands here too: TypeScript 7 removed
3042
- // `ES5` and dropped `ES3` entirely, and its only remaining targets are
3043
- // year-numbered ones, so nothing that reaches emit derives CommonJS.
3044
- return "es2022";
3045
- }
3046
- if (year >= 2022) return "es2022";
3047
- if (year >= 2020) return "es2020";
3048
- return "es2015";
3049
- }
3050
-
3051
- /**
3052
- * Year of an `ES<year>` script target, with `es6` normalized to its `es2015`
3053
- * synonym. Returns `null` when the spelling is not a year-numbered target,
3054
- * which the caller resolves to the modern default.
3055
- */
3056
- function scriptTargetYear(target: string): number | null {
3057
- if (target === "es6") {
3058
- return 2015;
3059
- }
3060
- const match = /^es(\d{4})$/.exec(target);
3061
- return match === null ? null : Number(match[1]);
3062
- }
3063
-
3064
- /** Package-type cache keyed by directory, mirroring Node's own lookup walk. */
3065
- const packageTypeCache = new Map<string, "module" | "commonjs">();
3066
-
3067
- function nearestPackageType(filename: string): "module" | "commonjs" {
3068
- let directory = path.dirname(filename);
3069
- const chain: string[] = [];
3070
- while (true) {
3071
- const cached = packageTypeCache.get(directory);
3072
- if (cached !== undefined) {
3073
- return rememberPackageType(chain, cached);
3074
- }
3075
- chain.push(directory);
3076
- const type = readPackageType(directory);
3077
- if (type !== null) {
3078
- return rememberPackageType(chain, type);
3079
- }
3080
- const parent = path.dirname(directory);
3081
- if (parent === directory) {
3082
- return rememberPackageType(chain, "commonjs");
3083
- }
3084
- directory = parent;
3085
- }
3086
- }
3087
-
3088
- function rememberPackageType(
3089
- directories: readonly string[],
3090
- type: "module" | "commonjs",
3091
- ): "module" | "commonjs" {
3092
- for (const directory of directories) {
3093
- packageTypeCache.set(directory, type);
3094
- }
3095
- return type;
3096
- }
3097
-
3098
- /** Read a directory's `package.json` `type`, or `null` when absent/invalid. */
3099
- function readPackageType(directory: string): "module" | "commonjs" | null {
3100
- const manifestPath = path.join(directory, "package.json");
3101
- if (!isFile(manifestPath)) {
3102
- return null;
3103
- }
3104
- try {
3105
- const parsed = JSON.parse(fs.readFileSync(manifestPath, "utf8")) as {
3106
- type?: unknown;
3107
- };
3108
- return parsed.type === "module" ? "module" : "commonjs";
3109
- } catch {
3110
- return "commonjs";
3111
- }
3112
- }
3113
-
3114
- /**
3115
- * The `"type"` the nearest `package.json` states outright, or `null` when the
3116
- * nearest manifest omits it (or there is none).
3117
- *
3118
- * `nearestPackageType` answers "what format would Node use", which defaults a
3119
- * silent manifest to CommonJS. This answers the narrower question "did a
3120
- * package actually say", which is what an override has to be built on: a
3121
- * manifest that says nothing must not out-vote the compiling project's own
3122
- * `module` option.
3123
- */
3124
- function declaredPackageType(filename: string): "module" | "commonjs" | null {
3125
- let directory = path.dirname(filename);
3126
- while (true) {
3127
- const manifestPath = path.join(directory, "package.json");
3128
- if (isFile(manifestPath)) {
3129
- try {
3130
- const parsed = JSON.parse(fs.readFileSync(manifestPath, "utf8")) as {
3131
- type?: unknown;
3132
- };
3133
- // The walk stops at the first manifest either way, exactly as Node's
3134
- // package-scope lookup does; only the answer differs.
3135
- return parsed.type === "module" || parsed.type === "commonjs"
3136
- ? parsed.type
3137
- : null;
3138
- } catch {
3139
- return null;
3140
- }
3141
- }
3142
- const parent = path.dirname(directory);
3143
- if (parent === directory) {
3144
- return null;
3145
- }
3146
- directory = parent;
3147
- }
3148
- }
3149
-
3150
- function isRelativeSpecifier(specifier: string): boolean {
3151
- return (
3152
- specifier === "." ||
3153
- specifier === ".." ||
3154
- specifier.startsWith("./") ||
3155
- specifier.startsWith("../")
3156
- );
3157
- }
3158
-
3159
- /** True when `specifier` already carries an extension Node can load directly. */
3160
- function hasConcreteExtension(specifier: string): boolean {
3161
- return /\.(?:[cm]?jsx?|json|node|[cm]?tsx?)$/i.test(specifier);
3162
- }
3163
-
3164
- function isTypeScriptSource(filename: string): boolean {
3165
- return TYPESCRIPT_EXTENSIONS.some((extension) =>
3166
- filename.endsWith(extension),
3167
- );
3168
- }
3169
-
3170
- function isFile(candidate: string): boolean {
3171
- try {
3172
- return fs.statSync(candidate).isFile();
3173
- } catch {
3174
- return false;
3175
- }
3176
- }
3177
-
3178
- /** True when `directory` holds at least one emitted JavaScript file (any depth). */
3179
- function emittedAnything(directory: string): boolean {
3180
- let entries: fs.Dirent[];
3181
- try {
3182
- entries = fs.readdirSync(directory, { withFileTypes: true });
3183
- } catch {
3184
- return false;
3185
- }
3186
- for (const entry of entries) {
3187
- const full = path.join(directory, entry.name);
3188
- if (entry.isDirectory()) {
3189
- if (emittedAnything(full)) {
3190
- return true;
3191
- }
3192
- } else if (entry.isFile() && /\.(?:[cm]?js)$/i.test(entry.name)) {
3193
- return true;
3194
- }
3195
- }
3196
- return false;
3197
- }