ttsc 0.33.0 → 0.34.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 (398) hide show
  1. package/README.md +2 -0
  2. package/cmd/ttsc/api_compile.go +3 -2
  3. package/cmd/ttsc/api_transform.go +1 -1
  4. package/cmd/ttsc/build.go +5 -4
  5. package/cmd/ttsc-cache/account.go +16 -0
  6. package/cmd/ttsc-cache/account_test.go +91 -0
  7. package/cmd/ttsc-cache/main.go +1 -1
  8. package/cmd/ttsc-cache/protocol_test.go +2 -2
  9. package/cmd/ttsc-cache/publisher_seal_test.go +1 -1
  10. package/cmd/ttsc-cache/stock_go_failure_test.go +1 -1
  11. package/cmd/ttsc-cache/stock_go_test.go +2 -2
  12. package/cmd/ttsc-cache/store.go +5 -0
  13. package/cmd/ttsc-cache/tuple.go +6 -2
  14. package/cmd/ttsc-cache/tuple_test.go +1 -1
  15. package/cmd/ttscgraph/main.go +6 -1
  16. package/cmd/ttscgraph/run_help_version_and_bad_flags_exit_codes_test.go +6 -1
  17. package/cmd/ttscgraph/serve.go +22 -20
  18. package/cmd/ttscgraph/serve_alternative_members_and_reads_refresh_test.go +95 -0
  19. package/cmd/ttscgraph/serve_shards.go +26 -15
  20. package/cmd/ttscgraph/serve_shards_abandoned_generation_converges_on_retry_test.go +2 -2
  21. package/cmd/ttscgraph/serve_shards_delete_removed_source_test.go +3 -3
  22. package/cmd/ttscgraph/serve_shards_prune_unreferenced_external_endpoints_test.go +1 -1
  23. package/cmd/ttscgraph/serve_shards_publish_created_source_test.go +3 -3
  24. package/cmd/ttscgraph/serve_shards_refresh_cross_file_implementation_test.go +2 -2
  25. package/cmd/ttscgraph/serve_shards_refresh_dependent_diagnostics_test.go +3 -3
  26. package/cmd/ttscgraph/serve_shards_rename_moves_source_identity_test.go +5 -5
  27. package/cmd/ttscgraph/serve_shards_reuse_unaffected_sources_test.go +8 -8
  28. package/cmd/ttscgraph/serve_source_encoding_test.go +2 -2
  29. package/driver/build_information_uses_selected_output_identity_test.go +5 -4
  30. package/driver/check_observations.go +1 -1
  31. package/driver/config_discovery.go +5 -1
  32. package/driver/declaration_shape.go +15 -21
  33. package/driver/diagnostics_preamble.go +2 -2
  34. package/driver/emit_containment.go +11 -14
  35. package/driver/emit_plugin.go +51 -43
  36. package/driver/emit_plugin_output.go +6 -5
  37. package/driver/emit_provenance.go +12 -15
  38. package/driver/graph.go +8 -8
  39. package/driver/host.go +15 -5
  40. package/driver/input_observation.go +22 -21
  41. package/driver/input_observation_test.go +11 -10
  42. package/driver/overlay.go +11 -11
  43. package/driver/program.go +102 -51
  44. package/driver/resolution_candidates.go +50 -32
  45. package/driver/resolution_candidates_test.go +18 -5
  46. package/driver/rewrite.go +11 -13
  47. package/driver/session.go +13 -7
  48. package/driver/target_ts70.go +85 -0
  49. package/driver/target_ts71.go +97 -0
  50. package/driver/transform_dependencies.go +1 -1
  51. package/driver/transform_source_map.go +21 -20
  52. package/go.mod +3 -3
  53. package/go.sum +4 -4
  54. package/internal/graph/alternative_member_declarations_resolve_uses_test.go +145 -0
  55. package/internal/graph/assigned_implementations_of_declaration_file_symbols_leave_no_edge_source_test.go +2 -2
  56. package/internal/graph/assigned_implementations_of_node_modules_symbols_leave_no_edge_source_test.go +2 -2
  57. package/internal/graph/build.go +75 -33
  58. package/internal/graph/build_files_reuses_committed_cross_file_endpoints_test.go +4 -4
  59. package/internal/graph/build_records_a_node_per_top_level_declaration_test.go +1 -1
  60. package/internal/graph/declaration_members.go +143 -0
  61. package/internal/graph/decorators_capture_name_and_literal_arguments_test.go +3 -3
  62. package/internal/graph/doc_tags.go +2 -2
  63. package/internal/graph/dump_paths.go +6 -5
  64. package/internal/graph/duplicate_variable_object_members_keep_first_declaration_test.go +1 -1
  65. package/internal/graph/edges.go +151 -68
  66. package/internal/graph/edges_cover_class_level_references_test.go +5 -5
  67. package/internal/graph/enum_initializer_calls_are_edges_test.go +2 -2
  68. package/internal/graph/enum_members_carry_their_names_on_the_enum_node_test.go +6 -6
  69. package/internal/graph/exports.go +6 -6
  70. package/internal/graph/file_diagnostics_match_tsgo_code_and_location_test.go +2 -2
  71. package/internal/graph/file_diagnostics_report_code_column_and_message_test.go +1 -1
  72. package/internal/graph/function_locals_do_not_collide_test.go +3 -3
  73. package/internal/graph/heritage_edges_cover_implements_and_interface_extends_test.go +5 -5
  74. package/internal/graph/heritage_edges_keep_extends_and_implements_to_same_base_test.go +2 -2
  75. package/internal/graph/heritage_edges_record_extends_versus_implements_origin_test.go +3 -3
  76. package/internal/graph/heritage_edges_traverse_barrels_and_stop_at_external_leaves_test.go +3 -3
  77. package/internal/graph/literals.go +3 -3
  78. package/internal/graph/literals_are_absent_when_the_type_admits_more_than_it_can_name_test.go +2 -2
  79. package/internal/graph/literals_cover_enum_members_the_graph_has_no_nodes_for_test.go +4 -4
  80. package/internal/graph/literals_do_not_depend_on_declaration_line_wrapping_test.go +2 -2
  81. package/internal/graph/literals_render_every_value_in_typescript_source_form_test.go +1 -1
  82. package/internal/graph/literals_resolve_through_alias_indirection_test.go +3 -3
  83. package/internal/graph/member_relation_edges_follow_checker_validity_test.go +7 -7
  84. package/internal/graph/member_relation_edges_preserve_checker_boundaries_test.go +19 -19
  85. package/internal/graph/member_relation_edges_reject_checker_invalid_pairs_test.go +11 -11
  86. package/internal/graph/namespace_dotted_form_qualifies_deeply_test.go +2 -2
  87. package/internal/graph/namespace_members_become_qualified_nodes_and_edges_test.go +7 -7
  88. package/internal/graph/namespace_private_declarations_keep_lexical_identity_test.go +85 -0
  89. package/internal/graph/nodes_are_marked_exported_through_the_export_table_test.go +2 -2
  90. package/internal/graph/object_literal_declarations_resolve_calls_test.go +9 -9
  91. package/internal/graph/object_literal_members_ride_on_the_snapshot_test.go +1 -1
  92. package/internal/graph/overload_implementation_replaces_signature_test.go +2 -2
  93. package/internal/graph/property_member_edges_remain_owner_visible_test.go +6 -6
  94. package/internal/graph/resolve.go +37 -12
  95. package/internal/graph/resolve_unwraps_barrel_reexport_to_real_declaration_test.go +6 -6
  96. package/internal/graph/source.go +1 -1
  97. package/internal/graph/type_ref_edges_cover_typeof_as_satisfies_test.go +7 -7
  98. package/internal/graph/type_ref_edges_resolve_named_types_across_files_test.go +2 -2
  99. package/internal/graph/value_access_edges_cover_properties_test.go +5 -5
  100. package/internal/graph/value_call_edges_attribute_function_assignments_to_members_test.go +3 -3
  101. package/internal/graph/value_call_edges_cover_jsx_components_test.go +2 -2
  102. package/internal/graph/value_call_edges_cover_methods_and_constructors_test.go +3 -3
  103. package/internal/graph/value_call_edges_cover_variable_bound_callables_test.go +2 -2
  104. package/internal/graph/value_call_edges_do_not_double_record_invoked_member_access_test.go +4 -4
  105. package/internal/graph/value_call_edges_record_construct_versus_call_origin_test.go +3 -3
  106. package/internal/graph/value_call_edges_resolve_across_files_and_dedupe_test.go +2 -2
  107. package/internal/graph/value_call_edges_skip_self_and_unresolved_test.go +4 -4
  108. package/internal/graph/value_reads_cover_expression_positions_test.go +88 -0
  109. package/lib/compiler/internal/buildNativeCompiler.d.ts +5 -2
  110. package/lib/compiler/internal/buildNativeCompiler.js +12 -4
  111. package/lib/compiler/internal/buildNativeCompiler.js.map +1 -1
  112. package/lib/flags/COMPILER_ENUM_WHITESPACE.js +1 -1
  113. package/lib/flags/COMPILER_ENUM_WHITESPACE.js.map +1 -1
  114. package/lib/flags/COMPILER_OPTIONS.js +1079 -149
  115. package/lib/flags/COMPILER_OPTIONS.js.map +1 -1
  116. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js +1 -1
  117. package/lib/flags/COMPILER_OPTION_ASCII_FOLDS.js.map +1 -1
  118. package/lib/flags/COMPILER_OPTION_KINDS.js +1 -1
  119. package/lib/flags/COMPILER_OPTION_KINDS.js.map +1 -1
  120. package/lib/flags/CompilerOptionSpec.d.ts +9 -2
  121. package/lib/internal/pluginSource.d.ts +1 -0
  122. package/lib/internal/pluginSource.js +1 -0
  123. package/lib/internal/pluginSource.js.map +1 -1
  124. package/lib/launcher/internal/TypeScriptSyncApi.d.ts +140 -0
  125. package/lib/launcher/internal/TypeScriptSyncApi.js +99 -0
  126. package/lib/launcher/internal/TypeScriptSyncApi.js.map +1 -0
  127. package/lib/launcher/internal/buildSingleRootInMemory.d.ts +80 -0
  128. package/lib/launcher/internal/buildSingleRootInMemory.js +253 -0
  129. package/lib/launcher/internal/buildSingleRootInMemory.js.map +1 -0
  130. package/lib/launcher/internal/buildSingleRootProject.d.ts +22 -18
  131. package/lib/launcher/internal/buildSingleRootProject.js +27 -18
  132. package/lib/launcher/internal/buildSingleRootProject.js.map +1 -1
  133. package/lib/launcher/internal/compilerArgsAsConfigOptions.d.ts +39 -0
  134. package/lib/launcher/internal/compilerArgsAsConfigOptions.js +115 -0
  135. package/lib/launcher/internal/compilerArgsAsConfigOptions.js.map +1 -0
  136. package/lib/plugin/CapabilityPluginResolver.js +3 -0
  137. package/lib/plugin/CapabilityPluginResolver.js.map +1 -1
  138. package/lib/plugin/internal/load/loadProjectPlugins.js +6 -2
  139. package/lib/plugin/internal/load/loadProjectPlugins.js.map +1 -1
  140. package/lib/plugin/internal/source/CompilerTarget.d.ts +127 -0
  141. package/lib/plugin/internal/source/CompilerTarget.js +231 -0
  142. package/lib/plugin/internal/source/CompilerTarget.js.map +1 -0
  143. package/lib/plugin/internal/source/NativeSourcePackages.js +6 -5
  144. package/lib/plugin/internal/source/NativeSourcePackages.js.map +1 -1
  145. package/lib/plugin/internal/source/SourcePluginAdmission.d.ts +18 -1
  146. package/lib/plugin/internal/source/SourcePluginAdmission.js +24 -2
  147. package/lib/plugin/internal/source/SourcePluginAdmission.js.map +1 -1
  148. package/lib/plugin/internal/source/SourcePluginWorkspace.d.ts +6 -3
  149. package/lib/plugin/internal/source/SourcePluginWorkspace.js +31 -13
  150. package/lib/plugin/internal/source/SourcePluginWorkspace.js.map +1 -1
  151. package/lib/plugin/internal/source/buildSourcePlugin.js +3 -1
  152. package/lib/plugin/internal/source/buildSourcePlugin.js.map +1 -1
  153. package/lib/plugin/internal/source/hashPluginBuildEnvironment.d.ts +1 -1
  154. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js +9 -1
  155. package/lib/plugin/internal/source/hashPluginBuildEnvironment.js.map +1 -1
  156. package/package.json +14 -9
  157. package/shim/ast/enums_gen.go +1 -0
  158. package/shim/ast/go.mod +2 -2
  159. package/shim/ast/go.sum +4 -4
  160. package/shim/ast/neutral.go +141 -0
  161. package/shim/astnav/go.mod +2 -2
  162. package/shim/astnav/go.sum +4 -4
  163. package/shim/bundled/go.mod +2 -2
  164. package/shim/bundled/go.sum +4 -4
  165. package/shim/checker/go.mod +2 -2
  166. package/shim/checker/go.sum +4 -4
  167. package/shim/compiler/go.mod +2 -2
  168. package/shim/compiler/go.sum +4 -4
  169. package/shim/compiler/neutral.go +213 -0
  170. package/shim/core/go.mod +2 -2
  171. package/shim/core/go.sum +4 -4
  172. package/shim/diagnosticwriter/go.mod +2 -2
  173. package/shim/diagnosticwriter/go.sum +4 -4
  174. package/shim/lsp/go.mod +2 -2
  175. package/shim/lsp/go.sum +4 -4
  176. package/shim/parser/go.mod +2 -2
  177. package/shim/parser/go.sum +4 -4
  178. package/shim/printer/go.mod +2 -2
  179. package/shim/printer/go.sum +4 -4
  180. package/shim/scanner/go.mod +2 -2
  181. package/shim/scanner/go.sum +4 -4
  182. package/shim/stringutil/go.mod +1 -1
  183. package/shim/stringutil/go.sum +2 -2
  184. package/shim/stringutil/shim.go +15 -0
  185. package/shim/transformers/go.mod +2 -2
  186. package/shim/transformers/go.sum +4 -4
  187. package/shim/tsoptions/go.mod +2 -2
  188. package/shim/tsoptions/go.sum +4 -4
  189. package/shim/tsoptions/neutral.go +56 -0
  190. package/shim/tspath/go.mod +1 -1
  191. package/shim/tspath/go.sum +2 -2
  192. package/shim/tspath/neutral.go +150 -0
  193. package/shim/tspath/typed_paths.go +266 -0
  194. package/shim/vfs/cachedvfs/go.mod +2 -2
  195. package/shim/vfs/cachedvfs/go.sum +4 -4
  196. package/shim/vfs/go.mod +2 -2
  197. package/shim/vfs/go.sum +4 -4
  198. package/shim/vfs/neutral.go +20 -0
  199. package/shim/vfs/osvfs/go.mod +2 -2
  200. package/shim/vfs/osvfs/go.sum +4 -4
  201. package/src/compiler/internal/buildNativeCompiler.ts +13 -4
  202. package/src/flags/COMPILER_ENUM_WHITESPACE.ts +1 -1
  203. package/src/flags/COMPILER_OPTIONS.ts +1080 -150
  204. package/src/flags/COMPILER_OPTION_ASCII_FOLDS.ts +1 -1
  205. package/src/flags/COMPILER_OPTION_KINDS.ts +1 -1
  206. package/src/flags/CompilerOptionSpec.ts +11 -2
  207. package/src/internal/pluginSource.ts +1 -0
  208. package/src/launcher/internal/TypeScriptSyncApi.ts +186 -0
  209. package/src/launcher/internal/buildSingleRootInMemory.ts +319 -0
  210. package/src/launcher/internal/buildSingleRootProject.ts +26 -18
  211. package/src/launcher/internal/compilerArgsAsConfigOptions.ts +112 -0
  212. package/src/plugin/CapabilityPluginResolver.ts +4 -1
  213. package/src/plugin/internal/load/loadProjectPlugins.ts +12 -2
  214. package/src/plugin/internal/source/CompilerTarget.ts +249 -0
  215. package/src/plugin/internal/source/NativeSourcePackages.ts +10 -4
  216. package/src/plugin/internal/source/SourcePluginAdmission.ts +28 -2
  217. package/src/plugin/internal/source/SourcePluginWorkspace.ts +45 -19
  218. package/src/plugin/internal/source/buildSourcePlugin.ts +3 -1
  219. package/src/plugin/internal/source/hashPluginBuildEnvironment.ts +9 -1
  220. package/targets/7.1/bridge/ast/enums_gen.go +174 -0
  221. package/targets/7.1/bridge/ast/extra-shim.json +4 -0
  222. package/targets/7.1/bridge/ast/go.mod +14 -0
  223. package/targets/7.1/bridge/ast/go.sum +20 -0
  224. package/targets/7.1/bridge/ast/lint.go +1412 -0
  225. package/targets/7.1/bridge/ast/neutral.go +141 -0
  226. package/targets/7.1/bridge/ast/parent.go +60 -0
  227. package/targets/7.1/bridge/ast/safe_text.go +108 -0
  228. package/targets/7.1/bridge/ast/shim.go +1656 -0
  229. package/targets/7.1/bridge/ast/surface.go +686 -0
  230. package/targets/7.1/bridge/ast/test/next_jsdoc_comment_location_reaches_variable_statement_test.go +51 -0
  231. package/targets/7.1/bridge/ast/test/node_text_joins_multi_hop_qualified_name_test.go +47 -0
  232. package/targets/7.1/bridge/ast/test/node_text_joins_one_hop_qualified_name_test.go +35 -0
  233. package/targets/7.1/bridge/ast/test/node_text_returns_empty_for_nil_test.go +31 -0
  234. package/targets/7.1/bridge/ast/test/node_text_returns_identifier_text_test.go +34 -0
  235. package/targets/7.1/bridge/ast/test/node_text_skips_empty_qualified_left_test.go +60 -0
  236. package/targets/7.1/bridge/astnav/go.mod +14 -0
  237. package/targets/7.1/bridge/astnav/go.sum +22 -0
  238. package/targets/7.1/bridge/astnav/shim.go +24 -0
  239. package/targets/7.1/bridge/bundled/extra-shim.json +1 -0
  240. package/targets/7.1/bridge/bundled/go.mod +10 -0
  241. package/targets/7.1/bridge/bundled/go.sum +10 -0
  242. package/targets/7.1/bridge/bundled/shim.go +24 -0
  243. package/targets/7.1/bridge/checker/enums_gen.go +150 -0
  244. package/targets/7.1/bridge/checker/extra-shim.json +37 -0
  245. package/targets/7.1/bridge/checker/go.mod +15 -0
  246. package/targets/7.1/bridge/checker/go.sum +24 -0
  247. package/targets/7.1/bridge/checker/node_builder_fields_gen.go +19 -0
  248. package/targets/7.1/bridge/checker/shim.go +1390 -0
  249. package/targets/7.1/bridge/compiler/contentmapper_process.go +70 -0
  250. package/targets/7.1/bridge/compiler/emit_sourcemap.go +296 -0
  251. package/targets/7.1/bridge/compiler/emitassemble.go +81 -0
  252. package/targets/7.1/bridge/compiler/emithook.go +44 -0
  253. package/targets/7.1/bridge/compiler/extra-shim.json +4 -0
  254. package/targets/7.1/bridge/compiler/go.mod +15 -0
  255. package/targets/7.1/bridge/compiler/go.sum +24 -0
  256. package/targets/7.1/bridge/compiler/incremental.go +185 -0
  257. package/targets/7.1/bridge/compiler/neutral.go +256 -0
  258. package/targets/7.1/bridge/compiler/resolution.go +571 -0
  259. package/targets/7.1/bridge/compiler/shim.go +70 -0
  260. package/targets/7.1/bridge/core/enums_gen.go +15 -0
  261. package/targets/7.1/bridge/core/extra-shim.json +4 -0
  262. package/targets/7.1/bridge/core/go.mod +7 -0
  263. package/targets/7.1/bridge/core/go.sum +8 -0
  264. package/targets/7.1/bridge/core/modulekind.go +19 -0
  265. package/targets/7.1/bridge/core/shim.go +272 -0
  266. package/targets/7.1/bridge/diagnosticwriter/go.mod +14 -0
  267. package/targets/7.1/bridge/diagnosticwriter/go.sum +20 -0
  268. package/targets/7.1/bridge/diagnosticwriter/lint.go +411 -0
  269. package/targets/7.1/bridge/diagnosticwriter/shim.go +56 -0
  270. package/targets/7.1/bridge/lsp/extra-shim.json +4 -0
  271. package/targets/7.1/bridge/lsp/go.mod +16 -0
  272. package/targets/7.1/bridge/lsp/go.sum +26 -0
  273. package/targets/7.1/bridge/lsp/shim.go +112 -0
  274. package/targets/7.1/bridge/parser/extra-shim.json +4 -0
  275. package/targets/7.1/bridge/parser/go.mod +14 -0
  276. package/targets/7.1/bridge/parser/go.sum +24 -0
  277. package/targets/7.1/bridge/parser/shim.go +61 -0
  278. package/targets/7.1/bridge/printer/emithost.go +69 -0
  279. package/targets/7.1/bridge/printer/go.mod +15 -0
  280. package/targets/7.1/bridge/printer/go.sum +24 -0
  281. package/targets/7.1/bridge/printer/shim.go +168 -0
  282. package/targets/7.1/bridge/printer/sourcemap.go +49 -0
  283. package/targets/7.1/bridge/scanner/extra-shim.json +4 -0
  284. package/targets/7.1/bridge/scanner/go.mod +14 -0
  285. package/targets/7.1/bridge/scanner/go.sum +20 -0
  286. package/targets/7.1/bridge/scanner/regexp.go +42 -0
  287. package/targets/7.1/bridge/scanner/shim.go +137 -0
  288. package/targets/7.1/bridge/stringutil/extra-shim.json +1 -0
  289. package/targets/7.1/bridge/stringutil/go.mod +5 -0
  290. package/targets/7.1/bridge/stringutil/go.sum +2 -0
  291. package/targets/7.1/bridge/stringutil/shim.go +131 -0
  292. package/targets/7.1/bridge/transformers/go.mod +15 -0
  293. package/targets/7.1/bridge/transformers/go.sum +24 -0
  294. package/targets/7.1/bridge/transformers/shim.go +24 -0
  295. package/targets/7.1/bridge/tsoptions/command_line_raw.go +44 -0
  296. package/targets/7.1/bridge/tsoptions/extra-shim.json +4 -0
  297. package/targets/7.1/bridge/tsoptions/go.mod +15 -0
  298. package/targets/7.1/bridge/tsoptions/go.sum +24 -0
  299. package/targets/7.1/bridge/tsoptions/neutral.go +47 -0
  300. package/targets/7.1/bridge/tsoptions/shim.go +193 -0
  301. package/targets/7.1/bridge/tspath/extra-shim.json +4 -0
  302. package/targets/7.1/bridge/tspath/go.mod +5 -0
  303. package/targets/7.1/bridge/tspath/go.sum +6 -0
  304. package/targets/7.1/bridge/tspath/neutral.go +142 -0
  305. package/targets/7.1/bridge/tspath/shim.go +382 -0
  306. package/targets/7.1/bridge/vfs/cachedvfs/extra-shim.json +4 -0
  307. package/targets/7.1/bridge/vfs/cachedvfs/go.mod +5 -0
  308. package/targets/7.1/bridge/vfs/cachedvfs/go.sum +10 -0
  309. package/targets/7.1/bridge/vfs/cachedvfs/shim.go +12 -0
  310. package/targets/7.1/bridge/vfs/decode.go +26 -0
  311. package/targets/7.1/bridge/vfs/decode_test.go +42 -0
  312. package/targets/7.1/bridge/vfs/extra-shim.json +4 -0
  313. package/targets/7.1/bridge/vfs/go.mod +10 -0
  314. package/targets/7.1/bridge/vfs/go.sum +10 -0
  315. package/targets/7.1/bridge/vfs/neutral.go +23 -0
  316. package/targets/7.1/bridge/vfs/osvfs/extra-shim.json +4 -0
  317. package/targets/7.1/bridge/vfs/osvfs/go.mod +10 -0
  318. package/targets/7.1/bridge/vfs/osvfs/go.sum +10 -0
  319. package/targets/7.1/bridge/vfs/osvfs/shim.go +14 -0
  320. package/targets/7.1/bridge/vfs/shim.go +27 -0
  321. package/targets/7.1/facade/ast/facade_gen.go +2691 -0
  322. package/targets/7.1/facade/ast/go.mod +20 -0
  323. package/targets/7.1/facade/ast/go.sum +20 -0
  324. package/targets/7.1/facade/astnav/facade_gen.go +15 -0
  325. package/targets/7.1/facade/astnav/go.mod +22 -0
  326. package/targets/7.1/facade/astnav/go.sum +22 -0
  327. package/targets/7.1/facade/bundled/facade_gen.go +32 -0
  328. package/targets/7.1/facade/bundled/go.mod +21 -0
  329. package/targets/7.1/facade/bundled/go.sum +10 -0
  330. package/targets/7.1/facade/checker/facade_gen.go +563 -0
  331. package/targets/7.1/facade/checker/go.mod +26 -0
  332. package/targets/7.1/facade/checker/go.sum +24 -0
  333. package/targets/7.1/facade/compiler/facade_gen.go +198 -0
  334. package/targets/7.1/facade/compiler/go.mod +41 -0
  335. package/targets/7.1/facade/compiler/go.sum +24 -0
  336. package/targets/7.1/facade/core/facade_gen.go +130 -0
  337. package/targets/7.1/facade/core/go.mod +12 -0
  338. package/targets/7.1/facade/core/go.sum +8 -0
  339. package/targets/7.1/facade/diagnosticwriter/facade_gen.go +36 -0
  340. package/targets/7.1/facade/diagnosticwriter/go.mod +22 -0
  341. package/targets/7.1/facade/diagnosticwriter/go.sum +20 -0
  342. package/targets/7.1/facade/lsp/facade_gen.go +31 -0
  343. package/targets/7.1/facade/lsp/go.mod +19 -0
  344. package/targets/7.1/facade/lsp/go.sum +26 -0
  345. package/targets/7.1/facade/parser/facade_gen.go +102 -0
  346. package/targets/7.1/facade/parser/go.mod +25 -0
  347. package/targets/7.1/facade/parser/go.sum +24 -0
  348. package/targets/7.1/facade/printer/facade_gen.go +74 -0
  349. package/targets/7.1/facade/printer/go.mod +26 -0
  350. package/targets/7.1/facade/printer/go.sum +24 -0
  351. package/targets/7.1/facade/scanner/facade_gen.go +191 -0
  352. package/targets/7.1/facade/scanner/go.mod +25 -0
  353. package/targets/7.1/facade/scanner/go.sum +20 -0
  354. package/targets/7.1/facade/stringutil/facade_gen.go +176 -0
  355. package/targets/7.1/facade/stringutil/go.mod +9 -0
  356. package/targets/7.1/facade/stringutil/go.sum +2 -0
  357. package/targets/7.1/facade/transformers/facade_gen.go +12 -0
  358. package/targets/7.1/facade/transformers/go.mod +18 -0
  359. package/targets/7.1/facade/transformers/go.sum +24 -0
  360. package/targets/7.1/facade/tsoptions/facade_gen.go +274 -0
  361. package/targets/7.1/facade/tsoptions/go.mod +32 -0
  362. package/targets/7.1/facade/tsoptions/go.sum +24 -0
  363. package/targets/7.1/facade/tspath/facade_gen.go +550 -0
  364. package/targets/7.1/facade/tspath/go.mod +9 -0
  365. package/targets/7.1/facade/tspath/go.sum +6 -0
  366. package/targets/7.1/facade/vfs/cachedvfs/facade_gen.go +17 -0
  367. package/targets/7.1/facade/vfs/cachedvfs/go.mod +18 -0
  368. package/targets/7.1/facade/vfs/cachedvfs/go.sum +10 -0
  369. package/targets/7.1/facade/vfs/facade_gen.go +47 -0
  370. package/targets/7.1/facade/vfs/go.mod +18 -0
  371. package/targets/7.1/facade/vfs/go.sum +10 -0
  372. package/targets/7.1/facade/vfs/osvfs/facade_gen.go +20 -0
  373. package/targets/7.1/facade/vfs/osvfs/go.mod +21 -0
  374. package/targets/7.1/facade/vfs/osvfs/go.sum +10 -0
  375. package/tools/gen_facade/committed_facades_match_their_bridges_test.go +57 -0
  376. package/tools/gen_facade/facade_manifest_points_into_the_bridge_root_test.go +75 -0
  377. package/tools/gen_facade/facade_spells_internal_types_through_bridge_aliases_test.go +75 -0
  378. package/tools/gen_facade/facade_types_are_their_bridge_types_test.go +99 -0
  379. package/tools/gen_facade/go.mod +10 -0
  380. package/tools/gen_facade/go.sum +8 -0
  381. package/tools/gen_facade/main.go +734 -0
  382. package/tools/gen_shims/go.mod +4 -4
  383. package/tools/gen_shims/go.sum +6 -6
  384. package/tools/gen_shims/main.go +124 -66
  385. package/tools/gen_shims/mirror_structs_terminate_on_unexported_cycles_test.go +101 -0
  386. package/tools/shim_audit/baseline-7.1.json +720 -0
  387. package/tools/shim_audit/baseline.json +5 -4
  388. package/tools/shim_audit/go.mod +4 -4
  389. package/tools/shim_audit/go.sum +6 -6
  390. package/tools/shim_audit/linkname_signatures.go +178 -0
  391. package/tools/shim_audit/linkname_signatures_match_their_targets_test.go +64 -0
  392. package/tools/shim_audit/linkname_targets_follow_the_audited_compiler_test.go +38 -0
  393. package/tools/shim_audit/main.go +29 -4
  394. package/tools/shim_audit/neutral_api.go +160 -0
  395. package/tools/shim_audit/neutral_api_must_match_across_targets_test.go +74 -0
  396. package/utility/host.go +5 -4
  397. package/utility/preamble_output.go +15 -15
  398. package/utility/serve.go +1 -1
@@ -47,9 +47,9 @@ export class Sub extends Sup implements Iface {}
47
47
  graph := Build(prog)
48
48
  path := sourceFile(t, prog, "main.ts").FileName()
49
49
 
50
- sub := nodeID(path, "Sub", NodeClass)
51
- sup := nodeID(path, "Sup", NodeClass)
52
- iface := nodeID(path, "Iface", NodeInterface)
50
+ sub := nodeID(string(path), "Sub", NodeClass)
51
+ sup := nodeID(string(path), "Sup", NodeClass)
52
+ iface := nodeID(string(path), "Iface", NodeInterface)
53
53
 
54
54
  if got := edgeOrigin(graph, sub, sup, EdgeHeritage); got != "extends" {
55
55
  t.Fatalf("Sub -> Sup: want heritage Origin \"extends\", got %q; edges: %v", got, graph.Edges)
@@ -63,11 +63,11 @@ export class SubExt extends Ext {}
63
63
  implPath := sourceFile(t, prog, "impl.ts").FileName()
64
64
 
65
65
  // Barrel traversal: the base resolved to the sibling source, not the index.
66
- base := nodeID(implPath, "Base", NodeClass)
66
+ base := nodeID(string(implPath), "Base", NodeClass)
67
67
  if node, ok := graph.Nodes[base]; !ok || node.External {
68
68
  t.Fatalf("Base node missing or misclassified external (barrel not traversed): %+v", node)
69
69
  }
70
- sub := nodeID(mainPath, "Sub", NodeClass)
70
+ sub := nodeID(string(mainPath), "Sub", NodeClass)
71
71
  if !hasEdge(graph, sub, base, EdgeHeritage) {
72
72
  t.Fatalf("missing heritage edge Sub -> Base@impl.ts; edges: %v", graph.Edges)
73
73
  }
@@ -81,7 +81,7 @@ export class SubExt extends Ext {}
81
81
  if !ext.External || !strings.Contains(ext.File, "/node_modules/") {
82
82
  t.Fatalf("Ext should be an external node_modules leaf: %+v", ext)
83
83
  }
84
- subExt := nodeID(mainPath, "SubExt", NodeClass)
84
+ subExt := nodeID(string(mainPath), "SubExt", NodeClass)
85
85
  if !hasEdge(graph, subExt, ext.ID, EdgeHeritage) {
86
86
  t.Fatalf("missing heritage edge SubExt -> Ext (external); edges: %v", graph.Edges)
87
87
  }
@@ -28,7 +28,7 @@ func (g *Graph) collectLiterals(checker *shimchecker.Checker, file *shimast.Sour
28
28
  if file.Statements == nil {
29
29
  return
30
30
  }
31
- g.collectLiteralsIn(checker, file.FileName(), file.Statements.Nodes)
31
+ g.collectLiteralsIn(checker, string(file.FileName()), file.Statements.Nodes)
32
32
  }
33
33
 
34
34
  // collectLiteralsIn walks a statement list — a file's top level, or a namespace
@@ -54,7 +54,7 @@ func (g *Graph) collectLiteralsIn(checker *shimchecker.Checker, path string, sta
54
54
  // left alone rather than given a partial one.
55
55
  func (g *Graph) putLiterals(checker *shimchecker.Checker, path string, statement *shimast.Node, kind NodeKind) {
56
56
  symbol := statement.Symbol()
57
- if symbol == nil || symbol.Name == "" {
57
+ if symbol == nil || shimast.SymbolNameOf(symbol) == "" {
58
58
  return
59
59
  }
60
60
  node, ok := g.Nodes[nodeID(path, qualifiedName(symbol), kind)]
@@ -103,7 +103,7 @@ func enumMembers(checker *shimchecker.Checker, statement *shimast.Node) []EnumMe
103
103
  if symbol == nil {
104
104
  continue
105
105
  }
106
- member := EnumMember{Name: symbol.Name}
106
+ member := EnumMember{Name: shimast.SymbolNameOf(symbol)}
107
107
  if t := shimchecker.Checker_getTypeOfSymbol(checker, symbol); t != nil {
108
108
  if value, ok := literalValue(t); ok {
109
109
  member.Value = value
@@ -58,7 +58,7 @@ export enum Computed {
58
58
 
59
59
  // A nonempty control detects omission of the entire literal pass; this count
60
60
  // does not independently check the control's four values.
61
- if got := literalsOf(t, graph, nodeID(path, "Narrow", NodeTypeAlias)); len(got) != 4 {
61
+ if got := literalsOf(t, graph, nodeID(string(path), "Narrow", NodeTypeAlias)); len(got) != 4 {
62
62
  t.Fatalf("control union did not report its four members: got %v", got)
63
63
  }
64
64
 
@@ -72,7 +72,7 @@ export enum Computed {
72
72
  {"Primitive", NodeTypeAlias, "a primitive is not a value set"},
73
73
  {"Computed", NodeEnum, "a computed enum member has a value nothing here can name"},
74
74
  } {
75
- if got := literalsOf(t, graph, nodeID(path, testCase.name, testCase.kind)); len(got) != 0 {
75
+ if got := literalsOf(t, graph, nodeID(string(path), testCase.name, testCase.kind)); len(got) != 0 {
76
76
  t.Fatalf("%s reported a partial value set %v: %s", testCase.name, got, testCase.why)
77
77
  }
78
78
  }
@@ -54,24 +54,24 @@ export enum Implicit {
54
54
  path := sourceFile(t, prog, "main.ts").FileName()
55
55
 
56
56
  // Multiline declaration with independent literal expected values.
57
- wrapped := literalsOf(t, graph, nodeID(path, "Wrapped", NodeEnum))
57
+ wrapped := literalsOf(t, graph, nodeID(string(path), "Wrapped", NodeEnum))
58
58
  if want := []string{`"a"`, `"b"`, `"c"`}; !slices.Equal(wrapped, want) {
59
59
  t.Fatalf("multi-line enum under-reported its members: got %v, want %v", wrapped, want)
60
60
  }
61
61
  // Layout is not the fact; the single-line twin must agree exactly.
62
- flat := literalsOf(t, graph, nodeID(path, "Flat", NodeEnum))
62
+ flat := literalsOf(t, graph, nodeID(string(path), "Flat", NodeEnum))
63
63
  if !slices.Equal(flat, wrapped) {
64
64
  t.Fatalf("enum layout changed the value set: wrapped %v, flat %v", wrapped, flat)
65
65
  }
66
66
  // Implicitly numbered members have literal semantic expectations; no numeric
67
67
  // initializers are written, but this does not certify the acquisition method.
68
- implicit := literalsOf(t, graph, nodeID(path, "Implicit", NodeEnum))
68
+ implicit := literalsOf(t, graph, nodeID(string(path), "Implicit", NodeEnum))
69
69
  if want := []string{"0", "1"}; !slices.Equal(implicit, want) {
70
70
  t.Fatalf("implicitly numbered enum did not report its resolved values: got %v, want %v", implicit, want)
71
71
  }
72
72
  // Reject this particular method-node identity; other enum detail fields and
73
73
  // member-node spellings are not examined.
74
- if node, ok := graph.Nodes[nodeID(path, "Wrapped.A", NodeMethod)]; ok {
74
+ if node, ok := graph.Nodes[nodeID(string(path), "Wrapped.A", NodeMethod)]; ok {
75
75
  t.Fatalf("enum member unexpectedly modeled as a node (%v); literals may no longer be the only carrier", node.ID)
76
76
  }
77
77
  }
@@ -57,8 +57,8 @@ export type Flat = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h';
57
57
  path := sourceFile(t, prog, "main.ts").FileName()
58
58
 
59
59
  want := []string{`"a"`, `"b"`, `"c"`, `"d"`, `"e"`, `"f"`, `"g"`, `"h"`}
60
- wrapped := literalsOf(t, graph, nodeID(path, "Wrapped", NodeTypeAlias))
61
- flat := literalsOf(t, graph, nodeID(path, "Flat", NodeTypeAlias))
60
+ wrapped := literalsOf(t, graph, nodeID(string(path), "Wrapped", NodeTypeAlias))
61
+ flat := literalsOf(t, graph, nodeID(string(path), "Flat", NodeTypeAlias))
62
62
 
63
63
  if !slices.Equal(wrapped, want) {
64
64
  t.Fatalf("wrapped union under-reported its members: got %v, want %v", wrapped, want)
@@ -69,7 +69,7 @@ export type Mixed = 'a' | 1 | true;
69
69
  // Kinds mix in one union, and source form is what keeps them apart.
70
70
  {"Mixed", []string{`"a"`, "1", "true"}},
71
71
  } {
72
- got := literalsOf(t, graph, nodeID(path, testCase.name, NodeTypeAlias))
72
+ got := literalsOf(t, graph, nodeID(string(path), testCase.name, NodeTypeAlias))
73
73
  if !slices.Equal(got, testCase.want) {
74
74
  t.Fatalf("%s rendered %v, want %v", testCase.name, got, testCase.want)
75
75
  }
@@ -46,18 +46,18 @@ export type Duplicated = Narrow | 'a';
46
46
  path := sourceFile(t, prog, "main.ts").FileName()
47
47
 
48
48
  // One hop: the three members reaching Wide through Narrow are Wide's too.
49
- wide := literalsOf(t, graph, nodeID(path, "Wide", NodeTypeAlias))
49
+ wide := literalsOf(t, graph, nodeID(string(path), "Wide", NodeTypeAlias))
50
50
  if want := []string{`"a"`, `"b"`, `"c"`, `"d"`}; !slices.Equal(wide, want) {
51
51
  t.Fatalf("alias indirection lost members: got %v, want %v", wide, want)
52
52
  }
53
53
  // Two authored hops; this result check does not measure resolution cost.
54
- wider := literalsOf(t, graph, nodeID(path, "Wider", NodeTypeAlias))
54
+ wider := literalsOf(t, graph, nodeID(string(path), "Wider", NodeTypeAlias))
55
55
  if want := []string{`"a"`, `"b"`, `"c"`, `"d"`, `"e"`}; !slices.Equal(wider, want) {
56
56
  t.Fatalf("nested alias indirection lost members: got %v, want %v", wider, want)
57
57
  }
58
58
  // A member named twice is one member; the checker has already deduped, so the
59
59
  // list must not report `"a"` once per mention.
60
- duplicated := literalsOf(t, graph, nodeID(path, "Duplicated", NodeTypeAlias))
60
+ duplicated := literalsOf(t, graph, nodeID(string(path), "Duplicated", NodeTypeAlias))
61
61
  if want := []string{`"a"`, `"b"`, `"c"`}; !slices.Equal(duplicated, want) {
62
62
  t.Fatalf("a member named twice was reported twice: got %v, want %v", duplicated, want)
63
63
  }
@@ -71,11 +71,11 @@ export class Derived extends Base {
71
71
  to string
72
72
  origin string
73
73
  }{
74
- {nodeID(path, "Implementation.run", NodeMethod), nodeID(path, "Contract.run", NodeMethod), "implements"},
75
- {nodeID(path, "Implementation.name", NodeMethod), nodeID(path, "Contract.name", NodeVariable), "implements"},
76
- {nodeID(path, "Implementation.callback", NodeMethod), nodeID(path, "Contract.callback", NodeVariable), "implements"},
77
- {nodeID(path, "Derived.act", NodeMethod), nodeID(path, "Base.act", NodeMethod), "overrides"},
78
- {nodeID(path, "Derived.property", NodeVariable), nodeID(path, "Base.property", NodeVariable), "overrides"},
74
+ {nodeID(string(path), "Implementation.run", NodeMethod), nodeID(string(path), "Contract.run", NodeMethod), "implements"},
75
+ {nodeID(string(path), "Implementation.name", NodeMethod), nodeID(string(path), "Contract.name", NodeVariable), "implements"},
76
+ {nodeID(string(path), "Implementation.callback", NodeMethod), nodeID(string(path), "Contract.callback", NodeVariable), "implements"},
77
+ {nodeID(string(path), "Derived.act", NodeMethod), nodeID(string(path), "Base.act", NodeMethod), "overrides"},
78
+ {nodeID(string(path), "Derived.property", NodeVariable), nodeID(string(path), "Base.property", NodeVariable), "overrides"},
79
79
  }
80
80
  for _, assertion := range assertions {
81
81
  if got := edgeOrigin(built, assertion.from, assertion.to, EdgeMemberRelation); got != assertion.origin {
@@ -83,8 +83,8 @@ export class Derived extends Base {
83
83
  }
84
84
  }
85
85
 
86
- derivedConstructor := nodeID(path, "Derived.__constructor", NodeMethod)
87
- baseConstructor := nodeID(path, "Base.__constructor", NodeMethod)
86
+ derivedConstructor := nodeID(string(path), "Derived.__constructor", NodeMethod)
87
+ baseConstructor := nodeID(string(path), "Base.__constructor", NodeMethod)
88
88
  if built.Nodes[derivedConstructor] == nil || built.Nodes[baseConstructor] == nil {
89
89
  t.Fatalf("missing fixture constructor nodes; nodes: %v", nodeIDSet(built))
90
90
  }
@@ -149,8 +149,8 @@ export class ProtectedPretender implements ProtectedBase {
149
149
  built := Build(prog)
150
150
  path := sourceFile(t, prog, "main.ts").FileName()
151
151
  for _, id := range []string{
152
- nodeID(path, "MixedFlagDerived.item", NodeMethod),
153
- nodeID(path, "MixedFlagBase.item", NodeVariable),
152
+ nodeID(string(path), "MixedFlagDerived.item", NodeMethod),
153
+ nodeID(string(path), "MixedFlagBase.item", NodeVariable),
154
154
  } {
155
155
  if _, ok := built.Nodes[id]; !ok {
156
156
  t.Fatalf("mixed-symbol boundary node %s is missing; nodes: %v", id, built.Nodes)
@@ -161,17 +161,17 @@ export class ProtectedPretender implements ProtectedBase {
161
161
  to string
162
162
  origin string
163
163
  }{
164
- {nodeID(path, "StringGeneric.map", NodeMethod), nodeID(path, "Generic.map", NodeMethod), "implements"},
165
- {nodeID(path, "StringGeneric.required", NodeVariable), nodeID(path, "Generic.required", NodeVariable), "implements"},
166
- {nodeID(path, "WrongGeneric.required", NodeVariable), nodeID(path, "Generic.required", NodeVariable), "implements"},
167
- {nodeID(path, "ParserImpl.parse", NodeMethod), nodeID(path, "Parser.parse", NodeMethod), "implements"},
168
- {nodeID(path, "RequiredGood.value", NodeVariable), nodeID(path, "OptionalContract.value", NodeVariable), "implements"},
169
- {nodeID(path, "PropertyDerived.run", NodeVariable), nodeID(path, "MethodBase.run", NodeMethod), "overrides"},
170
- {nodeID(path, "AbstractPropertyDerived.label", NodeVariable), nodeID(path, "AbstractAccessorBase.label", NodeMethod), "overrides"},
171
- {nodeID(path, "SplitDerived.alpha", NodeMethod), nodeID(path, "SplitBase.alpha", NodeMethod), "overrides"},
172
- {nodeID(path, "SplitDerived.beta", NodeMethod), nodeID(path, "SplitBase.beta", NodeMethod), "overrides"},
173
- {nodeID(path, "MergedDerived.augment", NodeMethod), nodeID(path, "MergedBase.augment", NodeMethod), "overrides"},
174
- {nodeID(path, "ProtectedGood.token", NodeVariable), nodeID(path, "ProtectedBase.token", NodeVariable), "overrides"},
164
+ {nodeID(string(path), "StringGeneric.map", NodeMethod), nodeID(string(path), "Generic.map", NodeMethod), "implements"},
165
+ {nodeID(string(path), "StringGeneric.required", NodeVariable), nodeID(string(path), "Generic.required", NodeVariable), "implements"},
166
+ {nodeID(string(path), "WrongGeneric.required", NodeVariable), nodeID(string(path), "Generic.required", NodeVariable), "implements"},
167
+ {nodeID(string(path), "ParserImpl.parse", NodeMethod), nodeID(string(path), "Parser.parse", NodeMethod), "implements"},
168
+ {nodeID(string(path), "RequiredGood.value", NodeVariable), nodeID(string(path), "OptionalContract.value", NodeVariable), "implements"},
169
+ {nodeID(string(path), "PropertyDerived.run", NodeVariable), nodeID(string(path), "MethodBase.run", NodeMethod), "overrides"},
170
+ {nodeID(string(path), "AbstractPropertyDerived.label", NodeVariable), nodeID(string(path), "AbstractAccessorBase.label", NodeMethod), "overrides"},
171
+ {nodeID(string(path), "SplitDerived.alpha", NodeMethod), nodeID(string(path), "SplitBase.alpha", NodeMethod), "overrides"},
172
+ {nodeID(string(path), "SplitDerived.beta", NodeMethod), nodeID(string(path), "SplitBase.beta", NodeMethod), "overrides"},
173
+ {nodeID(string(path), "MergedDerived.augment", NodeMethod), nodeID(string(path), "MergedBase.augment", NodeMethod), "overrides"},
174
+ {nodeID(string(path), "ProtectedGood.token", NodeVariable), nodeID(string(path), "ProtectedBase.token", NodeVariable), "overrides"},
175
175
  }
176
176
  for _, pair := range expected {
177
177
  if got := edgeOrigin(built, pair.from, pair.to, EdgeMemberRelation); got != pair.origin {
@@ -183,12 +183,12 @@ export class ProtectedPretender implements ProtectedBase {
183
183
  from string
184
184
  to string
185
185
  }{
186
- {nodeID(path, "WrongGeneric.map", NodeMethod), nodeID(path, "Generic.map", NodeMethod)},
187
- {nodeID(path, "OptionalWrong.value", NodeVariable), nodeID(path, "RequiredContract.value", NodeVariable)},
188
- {nodeID(path, "MethodWrong.run", NodeMethod), nodeID(path, "PropertyBase.run", NodeVariable)},
189
- {nodeID(path, "ConcretePropertyWrong.label", NodeVariable), nodeID(path, "ConcreteAccessorBase.label", NodeMethod)},
190
- {nodeID(path, "MixedFlagDerived.item", NodeMethod), nodeID(path, "MixedFlagBase.item", NodeVariable)},
191
- {nodeID(path, "ProtectedPretender.token", NodeVariable), nodeID(path, "ProtectedBase.token", NodeVariable)},
186
+ {nodeID(string(path), "WrongGeneric.map", NodeMethod), nodeID(string(path), "Generic.map", NodeMethod)},
187
+ {nodeID(string(path), "OptionalWrong.value", NodeVariable), nodeID(string(path), "RequiredContract.value", NodeVariable)},
188
+ {nodeID(string(path), "MethodWrong.run", NodeMethod), nodeID(string(path), "PropertyBase.run", NodeVariable)},
189
+ {nodeID(string(path), "ConcretePropertyWrong.label", NodeVariable), nodeID(string(path), "ConcreteAccessorBase.label", NodeMethod)},
190
+ {nodeID(string(path), "MixedFlagDerived.item", NodeMethod), nodeID(string(path), "MixedFlagBase.item", NodeVariable)},
191
+ {nodeID(string(path), "ProtectedPretender.token", NodeVariable), nodeID(string(path), "ProtectedBase.token", NodeVariable)},
192
192
  }
193
193
  for _, pair := range rejected {
194
194
  if built.Nodes[pair.from] == nil || built.Nodes[pair.to] == nil {
@@ -84,12 +84,12 @@ export class InvalidDerived extends Base {
84
84
  from string
85
85
  to string
86
86
  }{
87
- {nodeID(path, "WrongKind.value", NodeMethod), nodeID(path, "Contract.value", NodeVariable)},
88
- {nodeID(path, "WrongKind.run", NodeMethod), nodeID(path, "Contract.run", NodeMethod)},
89
- {nodeID(path, "StaticOnly.value", NodeVariable), nodeID(path, "Contract.value", NodeVariable)},
90
- {nodeID(path, "StaticOnly.run", NodeMethod), nodeID(path, "Contract.run", NodeMethod)},
91
- {nodeID(path, "InvalidDerived.value", NodeMethod), nodeID(path, "Base.value", NodeVariable)},
92
- {nodeID(path, "InvalidDerived.run", NodeMethod), nodeID(path, "Base.run", NodeMethod)},
87
+ {nodeID(string(path), "WrongKind.value", NodeMethod), nodeID(string(path), "Contract.value", NodeVariable)},
88
+ {nodeID(string(path), "WrongKind.run", NodeMethod), nodeID(string(path), "Contract.run", NodeMethod)},
89
+ {nodeID(string(path), "StaticOnly.value", NodeVariable), nodeID(string(path), "Contract.value", NodeVariable)},
90
+ {nodeID(string(path), "StaticOnly.run", NodeMethod), nodeID(string(path), "Contract.run", NodeMethod)},
91
+ {nodeID(string(path), "InvalidDerived.value", NodeMethod), nodeID(string(path), "Base.value", NodeVariable)},
92
+ {nodeID(string(path), "InvalidDerived.run", NodeMethod), nodeID(string(path), "Base.run", NodeMethod)},
93
93
  }
94
94
  for _, pair := range absent {
95
95
  if built.Nodes[pair.from] == nil || built.Nodes[pair.to] == nil {
@@ -104,9 +104,9 @@ export class InvalidDerived extends Base {
104
104
  from string
105
105
  to string
106
106
  }{
107
- {nodeID(path, "WrongKind.kept", NodeVariable), nodeID(path, "Contract.kept", NodeVariable)},
108
- {nodeID(path, "Valid.value", NodeVariable), nodeID(path, "Contract.value", NodeVariable)},
109
- {nodeID(path, "Valid.run", NodeMethod), nodeID(path, "Contract.run", NodeMethod)},
107
+ {nodeID(string(path), "WrongKind.kept", NodeVariable), nodeID(string(path), "Contract.kept", NodeVariable)},
108
+ {nodeID(string(path), "Valid.value", NodeVariable), nodeID(string(path), "Contract.value", NodeVariable)},
109
+ {nodeID(string(path), "Valid.run", NodeMethod), nodeID(string(path), "Contract.run", NodeMethod)},
110
110
  }
111
111
  for _, pair := range valid {
112
112
  if got := edgeOrigin(built, pair.from, pair.to, EdgeMemberRelation); got != "implements" {
@@ -115,8 +115,8 @@ export class InvalidDerived extends Base {
115
115
  }
116
116
  if got := edgeOrigin(
117
117
  built,
118
- nodeID(path, "InvalidDerived.kept", NodeVariable),
119
- nodeID(path, "Base.kept", NodeVariable),
118
+ nodeID(string(path), "InvalidDerived.kept", NodeVariable),
119
+ nodeID(string(path), "Base.kept", NodeVariable),
120
120
  EdgeMemberRelation,
121
121
  ); got != "overrides" {
122
122
  t.Fatalf("valid override sibling in an invalid class was suppressed: got %q; edges: %v", got, built.Edges)
@@ -57,8 +57,8 @@ export function caller(): void {
57
57
  graph := Build(prog)
58
58
  path := sourceFile(t, prog, "main.ts").FileName()
59
59
 
60
- deep := nodeID(path, "A.B.C.deep", NodeFunction)
61
- caller := nodeID(path, "caller", NodeFunction)
60
+ deep := nodeID(string(path), "A.B.C.deep", NodeFunction)
61
+ caller := nodeID(string(path), "caller", NodeFunction)
62
62
 
63
63
  if _, ok := graph.Nodes[deep]; !ok {
64
64
  t.Fatalf("missing deeply-namespaced node %q; nodes: %v", deep, graph.Nodes)
@@ -77,13 +77,13 @@ export type WorkerRef = Service.Worker;
77
77
  graph := Build(prog)
78
78
  path := sourceFile(t, prog, "main.ts").FileName()
79
79
 
80
- serviceHelper := nodeID(path, "Service.helper", NodeFunction)
81
- serviceRun := nodeID(path, "Service.run", NodeFunction)
82
- serviceWorker := nodeID(path, "Service.Worker", NodeClass)
83
- workerProcess := nodeID(path, "Service.Worker.process", NodeMethod)
84
- bootstrap := nodeID(path, "bootstrap", NodeFunction)
85
- workerRef := nodeID(path, "WorkerRef", NodeTypeAlias)
86
- payload := nodeID(path, "Payload", NodeInterface)
80
+ serviceHelper := nodeID(string(path), "Service.helper", NodeFunction)
81
+ serviceRun := nodeID(string(path), "Service.run", NodeFunction)
82
+ serviceWorker := nodeID(string(path), "Service.Worker", NodeClass)
83
+ workerProcess := nodeID(string(path), "Service.Worker.process", NodeMethod)
84
+ bootstrap := nodeID(string(path), "bootstrap", NodeFunction)
85
+ workerRef := nodeID(string(path), "WorkerRef", NodeTypeAlias)
86
+ payload := nodeID(string(path), "Payload", NodeInterface)
87
87
 
88
88
  // The namespaced declarations are nodes in their own right.
89
89
  for _, id := range []string{serviceHelper, serviceRun, serviceWorker, workerProcess} {
@@ -0,0 +1,85 @@
1
+ package graph
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+
7
+ "github.com/samchon/ttsc/packages/ttsc/driver"
8
+ )
9
+
10
+ // Verifies private namespace declarations retain their lexical owners.
11
+ //
12
+ // 1. Load repeated private functions, classes, aliases and variables in two namespaces alongside top-level controls.
13
+ // 2. Build the graph and inspect declaration spans and resolved calls.
14
+ // 3. Require separate identities and reject calls borrowed from another scope.
15
+ //
16
+ // @evidence contracts/testing.md#behavioral-verification Build must retain each lexical declaration and connect only its actual callers and callees, exposing the false union of dependencies caused by a shared private name.
17
+ // @evidence contracts/testing.md#independent-expectations Literal A.hidden, B.hidden and hidden names follow the source's three distinct lexical scopes; only B.hidden calls target. Selected declarations must retain nonempty spans, without an independent byte-offset oracle.
18
+ // @evidence contracts/testing.md#distinguishing-cases Private functions, variables, classes, interfaces, aliases, nested namespaces and named closures contrast exported members and a top-level function of the same name. Moving source offsets is covered by the existing position-invariance tests.
19
+ // @evidence contracts/testing.md#execution-ownership This Go unit owns a temporary project and in-process compiler Program, closes it and calls Build directly without installing or launching a product host.
20
+ func TestNamespacePrivateDeclarationsKeepLexicalIdentity(t *testing.T) {
21
+ t.Setenv(driver.LinkedPluginsEnv, "")
22
+ root := t.TempDir()
23
+ writeFile(t, filepath.Join(root, "tsconfig.json"), fixtureTSConfig)
24
+ writeFile(t, filepath.Join(root, "src", "main.ts"), `export function target() { return 0; }
25
+ export namespace A {
26
+ function hidden() { return 1; }
27
+ class Local { method() { return hidden(); } }
28
+ interface Shape { value: number }
29
+ type Alias = Shape;
30
+ const local = hidden();
31
+ export const a = hidden();
32
+ export namespace Deep { function hidden() { return 4; } export const d = hidden(); }
33
+ export function factory() { function hidden() { return 5; } return hidden(); }
34
+ }
35
+ export namespace B {
36
+ function hidden() { return target(); }
37
+ class Local { method() { return hidden(); } }
38
+ interface Shape { value: number }
39
+ type Alias = Shape;
40
+ const local = hidden();
41
+ export const b = hidden();
42
+ }
43
+ function hidden() { return 3; }
44
+ export const c = hidden();
45
+ `)
46
+ prog, diags, err := driver.LoadProgram(root, "tsconfig.json", driver.LoadProgramOptions{})
47
+ if err != nil {
48
+ t.Fatal(err)
49
+ }
50
+ defer func() { _ = prog.Close() }()
51
+ if len(diags) != 0 {
52
+ t.Fatalf("unexpected diagnostics: %v", diags)
53
+ }
54
+ g := Build(prog)
55
+ file := sourceFile(t, prog, "main.ts").FileName()
56
+ for _, prefix := range []string{"A", "B"} {
57
+ for name, kind := range map[string]NodeKind{
58
+ "hidden": NodeFunction, "Local": NodeClass, "Local.method": NodeMethod,
59
+ "Shape": NodeInterface, "Shape.value": NodeVariable, "Alias": NodeTypeAlias, "local": NodeVariable,
60
+ } {
61
+ if node := g.Nodes[nodeID(string(file), prefix+"."+name, kind)]; node == nil || node.Name != prefix+"."+name || node.End <= node.Pos {
62
+ t.Errorf("missing lexical declaration %s.%s", prefix, name)
63
+ }
64
+ }
65
+ }
66
+ for _, name := range []string{"A.hidden", "B.hidden", "hidden", "A.Deep.hidden", "A.factory.hidden"} {
67
+ id := nodeID(string(file), name, NodeFunction)
68
+ if g.Nodes[id] == nil {
69
+ t.Errorf("missing %s", name)
70
+ }
71
+ if got := hasEdge(g, id, nodeID(string(file), "target", NodeFunction), EdgeValueCall); got != (name == "B.hidden") {
72
+ t.Errorf("%s calls target = %t, want %t", name, got, name == "B.hidden")
73
+ }
74
+ }
75
+ for caller, target := range map[string]string{"A.a": "A.hidden", "B.b": "B.hidden", "c": "hidden", "A.Deep.d": "A.Deep.hidden"} {
76
+ for _, candidate := range []string{"A.hidden", "B.hidden", "hidden", "A.Deep.hidden", "A.factory.hidden"} {
77
+ if got := hasEdge(g, nodeID(string(file), caller, NodeVariable), nodeID(string(file), candidate, NodeFunction), EdgeValueCall); got != (candidate == target) {
78
+ t.Errorf("%s -> %s = %t, want %t", caller, candidate, got, candidate == target)
79
+ }
80
+ }
81
+ }
82
+ if !hasEdge(g, nodeID(string(file), "A.factory", NodeFunction), nodeID(string(file), "A.factory.hidden", NodeFunction), EdgeValueCall) {
83
+ t.Error("factory lost its own hidden closure")
84
+ }
85
+ }
@@ -42,8 +42,8 @@ export { Service };
42
42
  graph := Build(prog)
43
43
  path := sourceFile(t, prog, "main.ts").FileName()
44
44
 
45
- service := graph.Nodes[nodeID(path, "Service", NodeClass)]
46
- internal := graph.Nodes[nodeID(path, "Internal", NodeClass)]
45
+ service := graph.Nodes[nodeID(string(path), "Service", NodeClass)]
46
+ internal := graph.Nodes[nodeID(string(path), "Internal", NodeClass)]
47
47
  if service == nil || internal == nil {
48
48
  t.Fatalf("Build did not record both classes; have %v", nodeIDSet(graph))
49
49
  }
@@ -84,8 +84,8 @@ export namespace Names {
84
84
  }
85
85
  graph := Build(prog)
86
86
  path := sourceFile(t, prog, "main.ts").FileName()
87
- caller := nodeID(path, "caller", NodeFunction)
88
- helper := nodeID(path, "helper", NodeFunction)
87
+ caller := nodeID(string(path), "caller", NodeFunction)
88
+ helper := nodeID(string(path), "helper", NodeFunction)
89
89
  for _, item := range []struct {
90
90
  name string
91
91
  kind NodeKind
@@ -109,7 +109,7 @@ export namespace Names {
109
109
  {"api.computed", NodeMethod, EdgeValueCall},
110
110
  {"api.value", NodeMethod, EdgeValueAccess},
111
111
  } {
112
- id := nodeID(path, item.name, item.kind)
112
+ id := nodeID(string(path), item.name, item.kind)
113
113
  node := graph.Nodes[id]
114
114
  if node == nil || node.Pos <= 0 || node.End <= node.Pos {
115
115
  t.Errorf("missing member/span %s: %+v", item.name, node)
@@ -122,12 +122,12 @@ export namespace Names {
122
122
  t.Errorf("missing member-to-helper relation from %s", item.name)
123
123
  }
124
124
  }
125
- if !hasEdge(graph, nodeID(path, "control", NodeFunction), nodeID(path, "Control.run", NodeMethod), EdgeValueCall) {
125
+ if !hasEdge(graph, nodeID(string(path), "control", NodeFunction), nodeID(string(path), "Control.run", NodeMethod), EdgeValueCall) {
126
126
  t.Error("ordinary class method call was lost")
127
127
  }
128
128
  for _, name := range []string{`Names.api["a[\"\"]"]`, `Names.api.a[""]`} {
129
- id := nodeID(path, name, NodeMethod)
130
- if graph.Nodes[id] == nil || !hasEdge(graph, nodeID(path, "Names.caller", NodeFunction), id, EdgeValueCall) || !hasEdge(graph, id, helper, EdgeValueCall) {
129
+ id := nodeID(string(path), name, NodeMethod)
130
+ if graph.Nodes[id] == nil || !hasEdge(graph, nodeID(string(path), "Names.caller", NodeFunction), id, EdgeValueCall) || !hasEdge(graph, id, helper, EdgeValueCall) {
131
131
  t.Errorf("namespace object identity/relationships missing: %s", name)
132
132
  }
133
133
  }
@@ -146,18 +146,18 @@ export namespace Names {
146
146
  {"Control.prefix__#7@#read", "prefix__#7@#read", NodeMethod, EdgeValueAccess},
147
147
  {"Control.#value", "#value", NodeMethod, EdgeValueCall},
148
148
  } {
149
- id := nodeID(path, item.qualified, item.kind)
149
+ id := nodeID(string(path), item.qualified, item.kind)
150
150
  node := graph.Nodes[id]
151
151
  if node == nil || node.Simple != item.simple || node.Pos <= 0 || node.End <= node.Pos {
152
152
  t.Errorf("literal/private identity %q: %+v, want simple %q", item.qualified, node, item.simple)
153
153
  continue
154
154
  }
155
155
  if item.qualified == "Control.#value" {
156
- if !hasEdge(graph, nodeID(path, "Control.__#41@#value", NodeMethod), id, EdgeValueCall) {
156
+ if !hasEdge(graph, nodeID(string(path), "Control.__#41@#value", NodeMethod), id, EdgeValueCall) {
157
157
  t.Error("public literal method lost its distinct private call target")
158
158
  }
159
159
  } else if len(item.qualified) >= len("Control.") && item.qualified[:len("Control.")] == "Control." {
160
- if !hasEdge(graph, nodeID(path, "control", NodeFunction), id, item.relation) {
160
+ if !hasEdge(graph, nodeID(string(path), "control", NodeFunction), id, item.relation) {
161
161
  t.Errorf("missing control caller relation to %q", item.qualified)
162
162
  }
163
163
  }
@@ -82,7 +82,7 @@ export const shape = (({
82
82
 
83
83
  graph := Build(prog)
84
84
  path := sourceFile(t, prog, "main.ts").FileName()
85
- node := graph.Nodes[nodeID(path, "shape", NodeVariable)]
85
+ node := graph.Nodes[nodeID(string(path), "shape", NodeVariable)]
86
86
  if node == nil {
87
87
  t.Fatalf("missing shape variable; nodes: %v", nodeIDSet(graph))
88
88
  }
@@ -50,7 +50,7 @@ func TestOverloadImplementationReplacesSignature(t *testing.T) {
50
50
  graph := Build(prog)
51
51
  file := sourceFile(t, prog, "main.ts")
52
52
  path := file.FileName()
53
- id := nodeID(path, "Query.join", NodeMethod)
53
+ id := nodeID(string(path), "Query.join", NodeMethod)
54
54
  node := graph.Nodes[id]
55
55
  if node == nil {
56
56
  t.Fatalf("missing node Query.join; have %v", nodeIDSet(graph))
@@ -59,7 +59,7 @@ func TestOverloadImplementationReplacesSignature(t *testing.T) {
59
59
  if !strings.Contains(source, "return this.realJoin") {
60
60
  t.Fatalf("expected Query.join node to cover the implementation body, got:\n%s", source)
61
61
  }
62
- if !hasEdge(graph, id, nodeID(path, "Query.realJoin", NodeMethod), EdgeValueCall) {
62
+ if !hasEdge(graph, id, nodeID(string(path), "Query.realJoin", NodeMethod), EdgeValueCall) {
63
63
  t.Fatalf("missing value-call edge Query.join -> Query.realJoin; edges: %v", graph.Edges)
64
64
  }
65
65
  }
@@ -56,12 +56,12 @@ export interface Contract {
56
56
 
57
57
  graph := Build(prog)
58
58
  path := sourceFile(t, prog, "main.ts").FileName()
59
- dep := nodeID(path, "Dep", NodeInterface)
60
- makeDep := nodeID(path, "makeDep", NodeFunction)
61
- service := nodeID(path, "Service", NodeClass)
62
- serviceDep := nodeID(path, "Service.dep", NodeVariable)
63
- contract := nodeID(path, "Contract", NodeInterface)
64
- contractDep := nodeID(path, "Contract.dep", NodeVariable)
59
+ dep := nodeID(string(path), "Dep", NodeInterface)
60
+ makeDep := nodeID(string(path), "makeDep", NodeFunction)
61
+ service := nodeID(string(path), "Service", NodeClass)
62
+ serviceDep := nodeID(string(path), "Service.dep", NodeVariable)
63
+ contract := nodeID(string(path), "Contract", NodeInterface)
64
+ contractDep := nodeID(string(path), "Contract.dep", NodeVariable)
65
65
 
66
66
  for _, id := range []string{serviceDep, contractDep} {
67
67
  if _, ok := graph.Nodes[id]; !ok {