@shapeshift-labs/frontier-lang-compiler 0.2.149 → 0.2.151

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 (280) hide show
  1. package/README.md +315 -9
  2. package/bench/real-repo-corpus-checkout-identity.mjs +134 -0
  3. package/bench/real-repo-corpus-checkout-proof.mjs +263 -0
  4. package/bench/real-repo-corpus-command-execution.mjs +314 -0
  5. package/bench/real-repo-corpus-evidence.mjs +165 -0
  6. package/bench/real-repo-corpus-suite.mjs +273 -0
  7. package/bench/smoke.mjs +109 -7
  8. package/dist/declarations/import-adapter-core.d.ts +4 -3
  9. package/dist/declarations/import-adapter-options-native.d.ts +21 -0
  10. package/dist/declarations/js-ts-project-merge-admission-routes.d.ts +35 -0
  11. package/dist/declarations/js-ts-project-merge-commonjs-interop.d.ts +29 -0
  12. package/dist/declarations/js-ts-project-merge-confidence.d.ts +64 -0
  13. package/dist/declarations/js-ts-project-merge-declaration-emit-parity.d.ts +37 -0
  14. package/dist/declarations/js-ts-project-merge-declarations.d.ts +65 -0
  15. package/dist/declarations/js-ts-project-merge-diagnostics.d.ts +97 -0
  16. package/dist/declarations/js-ts-project-merge-global-augmentation.d.ts +30 -0
  17. package/dist/declarations/js-ts-project-merge-jsx-render-branch.d.ts +48 -0
  18. package/dist/declarations/js-ts-project-merge-proof-levels.d.ts +109 -0
  19. package/dist/declarations/js-ts-project-merge-quality-gates.d.ts +38 -0
  20. package/dist/declarations/js-ts-project-merge-semantic-equivalence-proof.d.ts +45 -0
  21. package/dist/declarations/js-ts-project-merge-tsconfig.d.ts +43 -0
  22. package/dist/declarations/js-ts-safe-merge.d.ts +47 -0
  23. package/dist/declarations/js-ts-safe-project-merge.d.ts +120 -38
  24. package/dist/declarations/native-project-compiler-assignability-oracle.d.ts +41 -0
  25. package/dist/declarations/native-project-compiler-callable-signatures.d.ts +31 -0
  26. package/dist/declarations/native-project-compiler-class-member-runtime-proof.d.ts +87 -0
  27. package/dist/declarations/native-project-compiler-composite-types.d.ts +23 -0
  28. package/dist/declarations/native-project-compiler-enum-proof.d.ts +58 -0
  29. package/dist/declarations/native-project-compiler-index-signature.d.ts +7 -0
  30. package/dist/declarations/native-project-compiler-public-api-source-binding.d.ts +8 -0
  31. package/dist/declarations/native-project-compiler-scope.d.ts +37 -0
  32. package/dist/declarations/native-project-compiler-type-reference-targets.d.ts +38 -0
  33. package/dist/declarations/native-project-css-modules.d.ts +90 -0
  34. package/dist/declarations/native-project-decorator-metadata.d.ts +126 -0
  35. package/dist/declarations/native-project-jsx-graph.d.ts +313 -0
  36. package/dist/declarations/native-project-module-declarations.d.ts +52 -0
  37. package/dist/declarations/native-project-module-resolution.d.ts +76 -1
  38. package/dist/declarations/native-project-runtime-effect-target.d.ts +29 -0
  39. package/dist/declarations/native-project-runtime-executable-effect-evidence.d.ts +107 -0
  40. package/dist/declarations/native-project-runtime-mutation-target.d.ts +33 -0
  41. package/dist/declarations/native-project-runtime-promise-chain.d.ts +30 -0
  42. package/dist/declarations/native-project-runtime-promise-combinator.d.ts +22 -0
  43. package/dist/declarations/native-project-runtime-reachability.d.ts +30 -0
  44. package/dist/declarations/native-project-runtime-resource-management.d.ts +27 -0
  45. package/dist/declarations/native-project-runtime-yield-delegation.d.ts +10 -0
  46. package/dist/declarations/native-project-scope-template-reference.d.ts +13 -0
  47. package/dist/declarations/native-project-source-evidence.d.ts +8 -0
  48. package/dist/declarations/native-project.d.ts +40 -39
  49. package/dist/declarations/semantic-edit-script.d.ts +10 -8
  50. package/dist/declarations/semantic-graph-layers.d.ts +79 -0
  51. package/dist/declarations/semantic-patch-bundle-composition.d.ts +62 -0
  52. package/dist/declarations/semantic-sidecar.d.ts +3 -2
  53. package/dist/declarations/semantic-structural-diff.d.ts +94 -0
  54. package/dist/declarations/source-preservation.d.ts +32 -1
  55. package/dist/declarations/target-adapters.d.ts +22 -2
  56. package/dist/index.d.ts +32 -0
  57. package/dist/index.js +6 -0
  58. package/dist/internal/index-impl/compileNativeSource.js +53 -5
  59. package/dist/internal/index-impl/createLightweightNativeImport.js +58 -4
  60. package/dist/internal/index-impl/createNativeImportFromSyntaxAst.js +17 -1
  61. package/dist/internal/index-impl/createNativeImportFromTypeScriptAst.js +28 -4
  62. package/dist/internal/index-impl/createNativeProjectImportResult.js +31 -27
  63. package/dist/internal/index-impl/createNativeProjectModuleResolutionFromPackageManifests.js +145 -0
  64. package/dist/internal/index-impl/createNativeSourcePreservation.js +34 -7
  65. package/dist/internal/index-impl/createSemanticImportSidecar.js +27 -1
  66. package/dist/internal/index-impl/createTypeScriptCompilerNativeImporterAdapter.js +16 -5
  67. package/dist/internal/index-impl/dynamicImportExpressionMetadata.js +80 -0
  68. package/dist/internal/index-impl/importMetaUrlDependencyMetadata.js +176 -0
  69. package/dist/internal/index-impl/importNativeSource.js +2 -3
  70. package/dist/internal/index-impl/moduleImportAttributeMetadata.js +232 -0
  71. package/dist/internal/index-impl/projectSemanticEditScriptToSource.js +8 -1
  72. package/dist/internal/index-impl/projectSymbolGraphClassStaticBlocks.js +148 -0
  73. package/dist/internal/index-impl/projectSymbolGraphCompilerAdvancedTypeMetadata.js +45 -0
  74. package/dist/internal/index-impl/projectSymbolGraphCompilerCallableSignatureEquivalence.js +107 -0
  75. package/dist/internal/index-impl/projectSymbolGraphCompilerClassPrivateAccessorRuntimeProof.js +280 -0
  76. package/dist/internal/index-impl/projectSymbolGraphCompilerClassShapeEquivalence.js +103 -0
  77. package/dist/internal/index-impl/projectSymbolGraphCompilerConditionalTypeEquivalence.js +242 -0
  78. package/dist/internal/index-impl/projectSymbolGraphCompilerDecoratorRuntimeProof.js +197 -0
  79. package/dist/internal/index-impl/projectSymbolGraphCompilerEnumEquivalence.js +188 -0
  80. package/dist/internal/index-impl/projectSymbolGraphCompilerFacts.js +244 -0
  81. package/dist/internal/index-impl/projectSymbolGraphCompilerIndexSignatureEquivalence.js +58 -0
  82. package/dist/internal/index-impl/projectSymbolGraphCompilerMetadata.js +168 -0
  83. package/dist/internal/index-impl/projectSymbolGraphCompilerTypeEquivalence.js +199 -0
  84. package/dist/internal/index-impl/projectSymbolGraphCompilerTypeEquivalenceProof.js +204 -0
  85. package/dist/internal/index-impl/projectSymbolGraphCompilerTypeReferenceTargetEquivalence.js +99 -0
  86. package/dist/internal/index-impl/projectSymbolGraphCssModuleRecords.js +264 -0
  87. package/dist/internal/index-impl/projectSymbolGraphCssModuleScanners.js +242 -0
  88. package/dist/internal/index-impl/projectSymbolGraphCssModuleUtils.js +152 -0
  89. package/dist/internal/index-impl/projectSymbolGraphCssModules.js +82 -0
  90. package/dist/internal/index-impl/projectSymbolGraphJsxComponentImports.js +170 -0
  91. package/dist/internal/index-impl/projectSymbolGraphJsxComponentProviderLookup.js +167 -0
  92. package/dist/internal/index-impl/projectSymbolGraphJsxComponentWrappers.js +150 -0
  93. package/dist/internal/index-impl/projectSymbolGraphJsxContextTargets.js +71 -0
  94. package/dist/internal/index-impl/projectSymbolGraphJsxContextValues.js +212 -0
  95. package/dist/internal/index-impl/projectSymbolGraphJsxEventHandlers.js +172 -0
  96. package/dist/internal/index-impl/projectSymbolGraphJsxHookEffects.js +124 -0
  97. package/dist/internal/index-impl/projectSymbolGraphJsxHooks.js +281 -0
  98. package/dist/internal/index-impl/projectSymbolGraphJsxMemberComponents.js +139 -0
  99. package/dist/internal/index-impl/projectSymbolGraphJsxPropFlows.js +320 -0
  100. package/dist/internal/index-impl/projectSymbolGraphJsxPropValues.js +145 -0
  101. package/dist/internal/index-impl/projectSymbolGraphJsxProviderFlows.js +133 -0
  102. package/dist/internal/index-impl/projectSymbolGraphJsxRecords.js +315 -0
  103. package/dist/internal/index-impl/projectSymbolGraphJsxRenderCollections.js +155 -0
  104. package/dist/internal/index-impl/projectSymbolGraphJsxRenderReturns.js +291 -0
  105. package/dist/internal/index-impl/projectSymbolGraphJsxRenderRisk.js +279 -0
  106. package/dist/internal/index-impl/projectSymbolGraphModuleDeclarationShapes.js +138 -0
  107. package/dist/internal/index-impl/projectSymbolGraphModuleResolution.js +89 -87
  108. package/dist/internal/index-impl/projectSymbolGraphPackageConditions.js +314 -0
  109. package/dist/internal/index-impl/projectSymbolGraphReExportImportTargets.js +43 -0
  110. package/dist/internal/index-impl/projectSymbolGraphReExports.js +55 -1
  111. package/dist/internal/index-impl/projectSymbolGraphRuntimeRegions.js +108 -0
  112. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefAliases.js +307 -0
  113. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefLexical.js +320 -0
  114. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefOwners.js +50 -0
  115. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefRecordBuilders.js +112 -0
  116. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefRecords.js +238 -0
  117. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefStructural.js +104 -0
  118. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefStructuralNormalize.js +242 -0
  119. package/dist/internal/index-impl/projectSymbolGraphScopeUseDefUseHashes.js +107 -0
  120. package/dist/internal/index-impl/projectSymbolGraphSourceMapGeneratedBoundary.js +111 -0
  121. package/dist/internal/index-impl/projectSymbolGraphSourceRecords.js +268 -0
  122. package/dist/internal/index-impl/projectSymbolGraphSourceRecordsOwnership.js +309 -0
  123. package/dist/internal/index-impl/replaySemanticEditProjection.js +53 -39
  124. package/dist/internal/index-impl/runtimeOrderEvidenceBinding.js +151 -0
  125. package/dist/internal/index-impl/runtimeOrderProofSurfaces.js +253 -0
  126. package/dist/internal/index-impl/semanticEditCallsiteArgumentMerge.js +319 -0
  127. package/dist/internal/index-impl/semanticEditExplicitSourceReplacement.js +7 -2
  128. package/dist/internal/index-impl/semanticEditProjectionRecord.js +8 -0
  129. package/dist/internal/index-impl/semanticEditReplayDiagnostics.js +7 -2
  130. package/dist/internal/index-impl/semanticEditReplayOutputBinding.js +61 -0
  131. package/dist/internal/index-impl/semanticEditReplayRerunRoute.js +27 -0
  132. package/dist/internal/index-impl/semanticEditReplaySourceReplacement.js +6 -1
  133. package/dist/internal/index-impl/semanticEditRuntimeOrderReasons.js +320 -0
  134. package/dist/internal/index-impl/semanticEditScriptClassification.js +90 -5
  135. package/dist/internal/index-impl/semanticEditScripts.js +42 -5
  136. package/dist/internal/index-impl/semanticEditTypeSyntaxReasons.js +134 -0
  137. package/dist/internal/index-impl/semanticIndexFromNativeDeclarations.js +11 -5
  138. package/dist/internal/index-impl/semanticPatchBundleComposition.js +166 -0
  139. package/dist/internal/index-impl/semanticStructuralDiffRecords.js +150 -0
  140. package/dist/internal/index-impl/sourceMapGeneratedBoundaryGate.js +185 -0
  141. package/dist/internal/index-impl/staticMemberLiteral.js +31 -0
  142. package/dist/internal/index-impl/staticOptionalMemberReference.js +22 -0
  143. package/dist/internal/index-impl/syntaxAstSourcePreservation.js +273 -0
  144. package/dist/internal/index-impl/syntaxCommonJsModuleDeclarationEntries.js +297 -0
  145. package/dist/internal/index-impl/syntaxModuleDeclarationEntries.js +56 -132
  146. package/dist/internal/index-impl/syntaxModuleEntryRecords.js +160 -0
  147. package/dist/internal/index-impl/typeScriptCompilerAdvancedTypeShapes.js +160 -0
  148. package/dist/internal/index-impl/typeScriptCompilerAssignabilityOracle.js +97 -0
  149. package/dist/internal/index-impl/typeScriptCompilerClassApi.js +238 -0
  150. package/dist/internal/index-impl/typeScriptCompilerDecoratorMetadata.js +290 -0
  151. package/dist/internal/index-impl/typeScriptCompilerEnumShape.js +279 -0
  152. package/dist/internal/index-impl/typeScriptCompilerFacts.js +294 -0
  153. package/dist/internal/index-impl/typeScriptCompilerInferenceSyntax.js +170 -0
  154. package/dist/internal/index-impl/typeScriptCompilerReferenceGraph.js +186 -0
  155. package/dist/internal/index-impl/typeScriptCompilerSymbolIdentity.js +294 -0
  156. package/dist/internal/index-impl/typeScriptCompilerTypeReferenceTargets.js +142 -0
  157. package/dist/internal/index-impl/typeScriptDeclaration.js +10 -38
  158. package/dist/internal/index-impl/typeScriptModuleDeclarationEntries.js +52 -15
  159. package/dist/internal/index-impl/typeScriptSourceFilePreservation.js +296 -0
  160. package/dist/js-ts-safe-member-class-invariants.js +247 -0
  161. package/dist/js-ts-safe-member-merge-result.js +23 -3
  162. package/dist/js-ts-safe-member-merge.js +28 -4
  163. package/dist/js-ts-safe-merge-binding-patterns.js +170 -0
  164. package/dist/js-ts-safe-merge-context.js +1 -0
  165. package/dist/js-ts-safe-merge-jsx-attribute-fallback.js +314 -0
  166. package/dist/js-ts-safe-merge-jsx-attribute-parser.js +277 -0
  167. package/dist/js-ts-safe-merge-jsx-child-expression-fallback.js +161 -0
  168. package/dist/js-ts-safe-merge-jsx-child-expression-merge.js +319 -0
  169. package/dist/js-ts-safe-merge-jsx-child-expression-parser.js +300 -0
  170. package/dist/js-ts-safe-merge-parse-declarations.js +46 -2
  171. package/dist/js-ts-safe-merge-parse-statements.js +8 -0
  172. package/dist/js-ts-safe-merge-plan.js +3 -1
  173. package/dist/js-ts-safe-merge-semantic-edit-fallback.js +49 -0
  174. package/dist/js-ts-safe-merge-source-shape-fallbacks.js +5 -1
  175. package/dist/js-ts-safe-merge-top-level-rename-fallback.js +31 -5
  176. package/dist/js-ts-safe-merge-top-level-rename-result.js +7 -2
  177. package/dist/js-ts-safe-merge-variable-declarator-fallback.js +124 -6
  178. package/dist/js-ts-safe-merge-variable-declarator-parser.js +34 -4
  179. package/dist/js-ts-safe-merge.js +136 -0
  180. package/dist/js-ts-safe-project-merge-admission-routes.js +216 -0
  181. package/dist/js-ts-safe-project-merge-admission.js +161 -0
  182. package/dist/js-ts-safe-project-merge-ambient.js +110 -0
  183. package/dist/js-ts-safe-project-merge-core.js +85 -0
  184. package/dist/js-ts-safe-project-merge-css-module-conflicts.js +60 -0
  185. package/dist/js-ts-safe-project-merge-declaration-emit-parity.js +186 -0
  186. package/dist/js-ts-safe-project-merge-declarations.js +227 -0
  187. package/dist/js-ts-safe-project-merge-diagnostics-metadata.js +42 -0
  188. package/dist/js-ts-safe-project-merge-diagnostics-ts.js +73 -0
  189. package/dist/js-ts-safe-project-merge-diagnostics.js +283 -0
  190. package/dist/js-ts-safe-project-merge-evidence-routing.js +38 -0
  191. package/dist/js-ts-safe-project-merge-files.js +70 -0
  192. package/dist/js-ts-safe-project-merge-global-augmentation-compatibility.js +99 -0
  193. package/dist/js-ts-safe-project-merge-graph-conflicts.js +90 -2
  194. package/dist/js-ts-safe-project-merge-graph-delta-commonjs-interop.js +108 -0
  195. package/dist/js-ts-safe-project-merge-graph-delta-compiler-conflicts.js +179 -0
  196. package/dist/js-ts-safe-project-merge-graph-delta-compiler-details.js +189 -0
  197. package/dist/js-ts-safe-project-merge-graph-delta-conflicts.js +51 -184
  198. package/dist/js-ts-safe-project-merge-graph-delta-identity-conflicts.js +202 -0
  199. package/dist/js-ts-safe-project-merge-graph-delta-inference-syntax.js +80 -0
  200. package/dist/js-ts-safe-project-merge-graph-delta-module-declarations.js +155 -0
  201. package/dist/js-ts-safe-project-merge-graph-limits.js +16 -1
  202. package/dist/js-ts-safe-project-merge-graph.js +37 -5
  203. package/dist/js-ts-safe-project-merge-import-removal.js +292 -0
  204. package/dist/js-ts-safe-project-merge-jsx-graph-conflict-details.js +235 -0
  205. package/dist/js-ts-safe-project-merge-jsx-graph-conflicts.js +173 -0
  206. package/dist/js-ts-safe-project-merge-jsx-prop-contracts.js +86 -0
  207. package/dist/js-ts-safe-project-merge-jsx-render-branch-proof.js +189 -0
  208. package/dist/js-ts-safe-project-merge-missing-evidence.js +310 -0
  209. package/dist/js-ts-safe-project-merge-move-rename.js +209 -0
  210. package/dist/js-ts-safe-project-merge-proof-conflicts.js +44 -0
  211. package/dist/js-ts-safe-project-merge-proof-levels.js +320 -0
  212. package/dist/js-ts-safe-project-merge-quality-gates.js +140 -0
  213. package/dist/js-ts-safe-project-merge-routing-calibration.js +125 -0
  214. package/dist/js-ts-safe-project-merge-runtime-region-conflicts.js +156 -0
  215. package/dist/js-ts-safe-project-merge-scope-use-def-conflicts.js +292 -0
  216. package/dist/js-ts-safe-project-merge-semantic-equivalence-proof.js +175 -0
  217. package/dist/js-ts-safe-project-merge-semantic-replay-proof.js +311 -0
  218. package/dist/js-ts-safe-project-merge-semantic-replay-routes.js +179 -0
  219. package/dist/js-ts-safe-project-merge-source-span-conflicts.js +310 -0
  220. package/dist/js-ts-safe-project-merge-source-span-roundtrip-proof.js +172 -0
  221. package/dist/js-ts-safe-project-merge-split-merge-admission.js +96 -0
  222. package/dist/js-ts-safe-project-merge-split-merge-records.js +320 -0
  223. package/dist/js-ts-safe-project-merge-split-merge-shapes.js +234 -0
  224. package/dist/js-ts-safe-project-merge-split-merge.js +218 -0
  225. package/dist/js-ts-safe-project-merge-summary.js +320 -0
  226. package/dist/js-ts-safe-project-merge-symbol-move-admission.js +63 -0
  227. package/dist/js-ts-safe-project-merge-symbol-move-default-admission.js +143 -0
  228. package/dist/js-ts-safe-project-merge-symbol-move-risks.js +213 -0
  229. package/dist/js-ts-safe-project-merge-symbol-move.js +316 -0
  230. package/dist/js-ts-safe-project-merge-symbol-rename-admission.js +59 -0
  231. package/dist/js-ts-safe-project-merge-symbol-rename-default-admission.js +111 -0
  232. package/dist/js-ts-safe-project-merge-symbol-rename.js +319 -0
  233. package/dist/js-ts-safe-project-merge-ts-options.js +205 -0
  234. package/dist/js-ts-safe-project-merge-ts-program.js +268 -0
  235. package/dist/js-ts-safe-project-merge-typed-property-rename-rebase-utils.js +69 -0
  236. package/dist/js-ts-safe-project-merge-typed-property-rename-rebase.js +317 -0
  237. package/dist/js-ts-safe-project-merge-unsupported-surfaces.js +319 -0
  238. package/dist/js-ts-safe-project-merge.js +171 -172
  239. package/dist/js-ts-semantic-scope-use-def-bindings.js +287 -0
  240. package/dist/js-ts-semantic-scope-use-def-scan.js +241 -0
  241. package/dist/js-ts-semantic-scope-use-def-utils.js +132 -0
  242. package/dist/js-ts-semantic-scope-use-def.js +217 -0
  243. package/dist/lightweight-dependency-effects.js +28 -4
  244. package/dist/lightweight-dependency-relations.js +13 -7
  245. package/dist/lightweight-dependency-top-level.js +63 -0
  246. package/dist/native-import-language-profiles.js +27 -1
  247. package/dist/native-js-ts-importers.js +9 -5
  248. package/dist/native-parser-ast-format-profiles.js +12 -0
  249. package/dist/native-parser-html-css-format-profiles.js +85 -0
  250. package/dist/native-region-scanner-core.js +5 -3
  251. package/dist/native-region-scanner-js-commonjs.js +155 -0
  252. package/dist/native-region-scanner-js-imports.js +51 -13
  253. package/dist/native-region-scanner-js-reexports.js +79 -0
  254. package/dist/native-region-scanner-js-ts-helpers.js +23 -0
  255. package/dist/native-source-ledger-helpers.js +1 -1
  256. package/dist/native-source-ledger.js +24 -10
  257. package/dist/native-source-maps-ecma426.js +316 -0
  258. package/dist/native-source-maps.js +36 -6
  259. package/dist/native-source-preservation-ownership.js +292 -0
  260. package/dist/native-source-preservation-scanner.js +63 -25
  261. package/dist/native-source-preservation-types.d.ts +3 -0
  262. package/dist/semantic-import-effect-occurrences.js +242 -0
  263. package/dist/semantic-import-effect-regions.js +95 -58
  264. package/dist/semantic-import-graph-layers.js +224 -0
  265. package/dist/semantic-import-runtime-conditional-evidence.js +135 -0
  266. package/dist/semantic-import-runtime-effect-target-evidence.js +145 -0
  267. package/dist/semantic-import-runtime-exit-evidence.js +32 -0
  268. package/dist/semantic-import-runtime-import-meta-evidence.js +33 -0
  269. package/dist/semantic-import-runtime-mutation-evidence.js +155 -0
  270. package/dist/semantic-import-runtime-order-evidence.js +318 -0
  271. package/dist/semantic-import-runtime-promise-chain-evidence.js +103 -0
  272. package/dist/semantic-import-runtime-promise-combinator-evidence.js +166 -0
  273. package/dist/semantic-import-runtime-reachability-evidence.js +269 -0
  274. package/dist/semantic-import-runtime-resource-management-evidence.js +293 -0
  275. package/dist/semantic-import-runtime-switch-evidence.js +304 -0
  276. package/dist/semantic-import-runtime-throw-evidence.js +44 -0
  277. package/dist/semantic-import-runtime-try-finally-evidence.js +172 -0
  278. package/dist/semantic-import-sidecar-entry.js +4 -0
  279. package/dist/semantic-import-source-preservation.js +6 -2
  280. package/package.json +1 -1
@@ -60,6 +60,8 @@ export type NativeSourceTokenKind =
60
60
  | 'operator'
61
61
  | 'punctuation'
62
62
  | 'comment'
63
+ | 'jsdoc-comment'
64
+ | 'block-comment'
63
65
  | 'source-map-comment'
64
66
  | 'whitespace'
65
67
  | 'newline'
@@ -145,6 +147,22 @@ export interface NativeSourceLedger {
145
147
  readonly summary: NativeSourceLedgerSummary;
146
148
  }
147
149
 
150
+ export type ParserTriviaExactnessStatus = 'exact' | 'approximate' | 'blocked' | (string & {});
151
+ export type ParserTriviaOwnershipStatus = 'exact' | 'blocked' | (string & {});
152
+ export type ParserTriviaOwnershipRelation =
153
+ | 'directive-prologue'
154
+ | 'source-directive'
155
+ | 'leading-comment'
156
+ | 'trailing-comment'
157
+ | 'jsdoc-comment'
158
+ | 'block-comment'
159
+ | 'file-comment'
160
+ | 'generated-source-boundary'
161
+ | 'file-entrypoint-directive'
162
+ | (string & {});
163
+ export interface ParserTriviaEvidenceInput { readonly [key: string]: unknown; readonly status?: ParserTriviaExactnessStatus; readonly exactParserTrivia?: boolean; readonly exact?: boolean; readonly losslessCst?: boolean; readonly sourceHash?: string; readonly sourceId?: string; readonly roundtripHash?: string; readonly evidenceSourceHash?: string; readonly parserEvidence?: string; readonly adapterId?: string; readonly parserAdapterId?: string; readonly parserId?: string; readonly adapter?: string; readonly evidenceId?: string; readonly id?: string; readonly blocked?: boolean; readonly reasonCodes?: readonly string[]; readonly blockReasonCodes?: readonly string[]; readonly metadata?: Record<string, unknown>; }
164
+ export interface ParserTriviaExactnessRecord { readonly schema: 'frontier.lang.parserTriviaExactness.v1'; readonly version: 1; readonly status: ParserTriviaExactnessStatus; readonly exactParserTrivia: boolean; readonly losslessCst?: boolean; readonly sourcePath?: string; readonly sourceHash?: string; readonly evidenceSourceHash?: string; readonly sourceHashVerified?: boolean; readonly parserEvidence?: string; readonly adapterId?: string; readonly evidenceId?: string; readonly reasonCodes: readonly string[]; readonly blockReasonCodes: readonly string[]; readonly reviewRequired: boolean; readonly autoMergeClaim: false; readonly semanticEquivalenceClaim: false; }
165
+
148
166
  export interface NativeSourcePreservation {
149
167
  readonly kind: 'frontier.lang.nativeSourcePreservation';
150
168
  readonly version: 1;
@@ -174,8 +192,19 @@ export interface NativeSourcePreservation {
174
192
  readonly braces?: number;
175
193
  readonly exactSourceAvailable: boolean;
176
194
  readonly truncated: boolean;
195
+ readonly parserTriviaExactnessStatus?: string;
196
+ readonly exactParserTrivia?: boolean;
197
+ readonly parserTriviaExactnessReasonCodes?: readonly string[];
198
+ readonly parserTriviaExactnessBlockReasonCodes?: readonly string[];
177
199
  };
178
- readonly metadata?: Record<string, unknown>;
200
+ readonly metadata?: Record<string, unknown> & { readonly parserTriviaExactness?: ParserTriviaExactnessRecord };
201
+ }
202
+
203
+ export interface NativeSourceTokenTriviaScan {
204
+ readonly tokens: readonly NativeSourcePreservedToken[];
205
+ readonly trivia: readonly NativeSourcePreservedToken[];
206
+ readonly truncated?: boolean;
207
+ readonly parserEvidence?: string;
179
208
  }
180
209
 
181
210
  export interface CreateNativeSourcePreservationOptions {
@@ -192,7 +221,9 @@ export interface CreateNativeSourcePreservationOptions {
192
221
  readonly includeSourceLedger?: boolean;
193
222
  readonly maxTokens?: number;
194
223
  readonly maxTrivia?: number;
224
+ readonly tokensAndTrivia?: NativeSourceTokenTriviaScan;
195
225
  readonly maxDirectives?: number;
196
226
  readonly maxLedgerSpans?: number;
227
+ readonly parserTriviaEvidence?: ParserTriviaEvidenceInput;
197
228
  readonly metadata?: Record<string, unknown>;
198
229
  }
@@ -81,11 +81,31 @@ export interface NativeTargetProjectionAdapterInput {
81
81
  readonly metadata: Record<string, unknown>;
82
82
  }
83
83
 
84
+ export interface Ecma426SourceMapSection {
85
+ readonly offset: { readonly line: number; readonly column: number };
86
+ readonly map: Ecma426SourceMapPayload;
87
+ }
88
+
89
+ export interface Ecma426SourceMapPayload {
90
+ readonly version: 3;
91
+ readonly file?: string;
92
+ readonly sourceRoot?: string;
93
+ readonly sources?: readonly (string | null)[];
94
+ readonly sourcesContent?: readonly (string | null)[];
95
+ readonly names?: readonly string[];
96
+ readonly mappings?: string;
97
+ readonly ignoreList?: readonly number[];
98
+ readonly sections?: readonly Ecma426SourceMapSection[];
99
+ readonly [key: string]: unknown;
100
+ }
101
+
102
+ export type NativeSourceMapInput = SourceMapRecord | Ecma426SourceMapPayload | string;
103
+
84
104
  export interface NativeTargetProjectionAdapterResult {
85
105
  readonly id?: string;
86
106
  readonly output?: string;
87
107
  readonly outputHash?: string;
88
- readonly sourceMaps?: readonly SourceMapRecord[];
108
+ readonly sourceMaps?: readonly NativeSourceMapInput[];
89
109
  readonly losses?: readonly NativeAstLossRecord[];
90
110
  readonly evidence?: readonly EvidenceRecord[];
91
111
  readonly diagnostics?: readonly NativeImporterAdapterDiagnostic[];
@@ -128,7 +148,7 @@ export interface NativeTargetProjectionResult {
128
148
  readonly output: string;
129
149
  readonly outputHash: string;
130
150
  readonly outputMode: 'target-adapter';
131
- readonly sourceMaps: readonly SourceMapRecord[];
151
+ readonly sourceMaps: readonly NativeSourceMapInput[];
132
152
  readonly losses: readonly NativeAstLossRecord[];
133
153
  readonly lossSummary: NativeImportLossSummary;
134
154
  readonly readiness: NativeImportReadinessClassification;
package/dist/index.d.ts CHANGED
@@ -18,19 +18,28 @@ export * from './declarations/semantic-sidecar-admission.js';
18
18
  export * from './declarations/semantic-merge-candidates.js';
19
19
  export * from './declarations/semantic-merge-conflicts.js';
20
20
  export * from './declarations/semantic-edit-script.js';
21
+ export * from './declarations/semantic-structural-diff.js';
21
22
  export * from './declarations/semantic-lineage.js';
22
23
  export * from './declarations/semantic-history.js';
23
24
  export * from './declarations/semantic-edit-bundle.js';
24
25
  export * from './declarations/semantic-patch-bundle-index.js';
25
26
  export * from './declarations/semantic-patch-bundle.js';
26
27
  export * from './declarations/semantic-patch-bundle-overlaps.js';
28
+ export * from './declarations/semantic-patch-bundle-composition.js';
27
29
  export * from './declarations/semantic-transform-identity.js';
28
30
  export * from './declarations/bidirectional-target-change.js';
29
31
  export * from './declarations/bidirectional-target-change-source-edit.js';
30
32
  export * from './declarations/semantic-impact.js';
33
+ export * from './declarations/semantic-graph-layers.js';
31
34
  export * from './declarations/semantic-sidecar.js';
32
35
  export * from './declarations/semantic-sidecar-example.js';
33
36
  export * from './declarations/js-ts-semantic-merge.js';
37
+ export * from './declarations/js-ts-project-merge-declaration-emit-parity.js';
38
+ export * from './declarations/js-ts-project-merge-declarations.js';
39
+ export * from './declarations/js-ts-project-merge-diagnostics.js';
40
+ export * from './declarations/js-ts-project-merge-tsconfig.js';
41
+ export * from './declarations/js-ts-project-merge-jsx-render-branch.js';
42
+ export * from './declarations/js-ts-project-merge-semantic-equivalence-proof.js';
34
43
  export * from './declarations/native-diff.js';
35
44
  export * from './declarations/semantic-slice.js';
36
45
  export * from './declarations/semantic-slice-admission.js';
@@ -41,6 +50,29 @@ export * from './declarations/import-adapter-options-platform.js';
41
50
  export * from './declarations/target-adapters.js';
42
51
  export * from './declarations/native-project-admission.js';
43
52
  export * from './declarations/native-project-module-resolution.js';
53
+ export * from './declarations/native-project-source-evidence.js';
54
+ export * from './declarations/native-project-jsx-graph.js';
55
+ export * from './declarations/native-project-css-modules.js';
56
+ export * from './declarations/native-project-compiler-callable-signatures.js';
57
+ export * from './declarations/native-project-compiler-composite-types.js';
58
+ export * from './declarations/native-project-compiler-index-signature.js';
59
+ export * from './declarations/native-project-compiler-assignability-oracle.js';
60
+ export * from './declarations/native-project-compiler-public-api-source-binding.js';
61
+ export * from './declarations/native-project-compiler-type-reference-targets.js';
62
+ export * from './declarations/native-project-compiler-enum-proof.js';
63
+ export * from './declarations/native-project-compiler-class-member-runtime-proof.js';
64
+ export * from './declarations/native-project-compiler-scope.js';
65
+ export * from './declarations/native-project-scope-template-reference.js';
66
+ export * from './declarations/native-project-decorator-metadata.js';
67
+ export * from './declarations/native-project-runtime-effect-target.js';
68
+ export * from './declarations/native-project-runtime-mutation-target.js';
69
+ export * from './declarations/native-project-runtime-resource-management.js';
70
+ export * from './declarations/native-project-runtime-reachability.js';
71
+ export * from './declarations/native-project-runtime-promise-combinator.js';
72
+ export * from './declarations/native-project-runtime-promise-chain.js';
73
+ export * from './declarations/native-project-runtime-yield-delegation.js';
74
+ export * from './declarations/native-project-runtime-executable-effect-evidence.js';
75
+ export * from './declarations/native-project-module-declarations.js';
44
76
  export * from './declarations/native-project.js';
45
77
  export * from './declarations/roundtrip.js';
46
78
  export * from './declarations/runtime.js';
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ export { createNativeImportCoverageMatrix } from './internal/index-impl/createNa
15
15
  export { createNativeImportResultContract } from './internal/index-impl/createNativeImportResultContract.js';
16
16
  export { createNativeParserAstFormatMatrix } from './internal/index-impl/createNativeParserAstFormatMatrix.js';
17
17
  export { createNativeParserFeatureMatrix } from './internal/index-impl/createNativeParserFeatureMatrix.js';
18
+ export { createNativeProjectModuleResolutionFromPackageManifests } from './internal/index-impl/createNativeProjectModuleResolutionFromPackageManifests.js';
18
19
  export { createNativeRoundtripEvidence } from './internal/index-impl/createNativeRoundtripEvidence.js';
19
20
  export { createProjectImportAdmissionRecord } from './internal/index-impl/createProjectImportAdmissionRecord.js';
20
21
  export { createNativeSourcePreservation } from './internal/index-impl/createNativeSourcePreservation.js';
@@ -23,8 +24,12 @@ export { createProjectionTargetLossMatrix } from './internal/index-impl/createPr
23
24
  export { createPythonAstNativeImporterAdapter } from './internal/index-impl/createPythonAstNativeImporterAdapter.js';
24
25
  export { createRustSynNativeImporterAdapter } from './internal/index-impl/createRustSynNativeImporterAdapter.js';
25
26
  export { createSemanticImportSidecar } from './internal/index-impl/createSemanticImportSidecar.js';
27
+ export { createSemanticGraphLayerSummary, SemanticGraphLayerKinds } from './semantic-import-graph-layers.js';
26
28
  export { compactSemanticSidecarExample } from './semantic-sidecar-example.js';
27
29
  export * from './js-ts-semantic-merge.js';
30
+ export { createJsTsProjectMergeDeclarationEmitParityProof } from './js-ts-safe-project-merge-declaration-emit-parity.js';
31
+ export { createJsTsProjectMergeDeclarationGate } from './js-ts-safe-project-merge-declarations.js';
32
+ export { createJsTsProjectMergeDiagnosticsGate } from './js-ts-safe-project-merge-diagnostics.js';
28
33
  export { createSemanticSlice } from './internal/index-impl/createSemanticSlice.js';
29
34
  export { createSemanticSliceAdmissionRecord } from './internal/index-impl/createSemanticSliceAdmissionRecord.js';
30
35
  export { createSwiftSyntaxNativeImporterAdapter } from './internal/index-impl/createSwiftSyntaxNativeImporterAdapter.js';
@@ -72,6 +77,7 @@ export { queryProjectionReadinessMatrix } from './internal/index-impl/queryProje
72
77
  export { createSemanticPatchBundleRecord, querySemanticPatchBundleRecords, SemanticPatchBundleAdmissionStatuses } from './internal/index-impl/semanticPatchBundleRecords.js';
73
78
  export { createSemanticEditBundleAdmission, SemanticEditBundleAdmissionStatuses } from './internal/index-impl/semanticEditBundleAdmission.js';
74
79
  export { compareSemanticPatchBundleRecords, querySemanticPatchBundleOverlaps, SemanticPatchBundleOverlapKinds, SemanticPatchBundleOverlapStatuses } from './internal/index-impl/semanticPatchBundleOverlaps.js';
80
+ export { composeSemanticPatchBundleProjections } from './internal/index-impl/semanticPatchBundleComposition.js';
75
81
  export { createSemanticTransformIdentityRecord, deriveSemanticTransformIdentityRecords, semanticTransformIdentityFields } from './internal/index-impl/semanticTransformIdentityRecords.js';
76
82
  export { createSemanticMergeCandidateAdmissionRecord, decorateSemanticMergeCandidateForAdmission, querySemanticMergeCandidateAdmissionOverlaps, SemanticMergeCandidateProjectionRisks, semanticMergeCandidateReadinessSortKey, sortSemanticMergeCandidateAdmissionRecords } from './internal/index-impl/semanticMergeCandidateRecords.js';
77
83
  export { querySemanticMergeConflictClasses, SemanticMergeConflictClasses, semanticMergeConflictRiskScore, sortSemanticMergeCandidatesByConflictRisk, summarizeSemanticMergeConflicts } from './internal/index-impl/semanticMergeConflicts.js';
@@ -1,5 +1,6 @@
1
- import{nativeLanguageCompileTarget}from'../../coverage-matrix-profiles.js';import{idFragment,uniqueByEvidenceId,uniqueByLossId}from'../../native-import-utils.js';
1
+ import{nativeLanguageCompileTarget}from'../../coverage-matrix-profiles.js';import{idFragment,uniqueByEvidenceId,uniqueByLossId}from'../../native-import-utils.js';import{normalizeSourceMaps}from'../../native-source-maps.js';
2
2
  import{classifyNativeImportReadiness}from'./classifyNativeImportReadiness.js';import{createNativeRoundtripEvidence}from'./createNativeRoundtripEvidence.js';import{createProjectionTargetLossMatrix}from'./createProjectionTargetLossMatrix.js';import{importNativeSource}from'./importNativeSource.js';import{isNativeSourceImportResult}from'./isNativeSourceImportResult.js';import{nativeCompileSourceLanguage}from'./nativeCompileSourceLanguage.js';import{nativeCompileTarget}from'./nativeCompileTarget.js';import{nativeProjectionReview}from'./nativeProjectionReview.js';import{nativeSourceCompileEvidence}from'./nativeSourceCompileEvidence.js';import{nativeSourceCompileSourceMaps}from'./nativeSourceCompileSourceMaps.js';import{nativeSourceCompileTargetCoverage}from'./nativeSourceCompileTargetCoverage.js';import{nativeSourceCompileTargetLosses}from'./nativeSourceCompileTargetLosses.js';import{projectNativeImportToSource}from'./projectNativeImportToSource.js';import{resolveNativeTargetProjectionAdapter}from'./resolveNativeTargetProjectionAdapter.js';import{runNativeTargetProjectionAdapter}from'./runNativeTargetProjectionAdapter.js';import{summarizeNativeImportLosses}from'./summarizeNativeImportLosses.js';
3
+ import{classifySourceMapGeneratedBoundary}from'./sourceMapGeneratedBoundaryGate.js';
3
4
  export function compileNativeSource(input, options = {}) {
4
5
  const importResult = isNativeSourceImportResult(input) ? input : importNativeSource(input);
5
6
  const sourceLanguage = nativeCompileSourceLanguage(importResult, input);
@@ -105,7 +106,7 @@ export function compileNativeSource(input, options = {}) {
105
106
  scanKind: 'native-source-compile',
106
107
  semanticStatus: importResult.metadata?.semanticStatus ?? options.semanticStatus
107
108
  });
108
- const sourceMaps = options.emitSourceMap === false
109
+ const emittedSourceMaps = options.emitSourceMap === false
109
110
  ? []
110
111
  : nativeSourceCompileSourceMaps({
111
112
  id: options.sourceMapId ?? `source_map_${idFragment(id)}_${idFragment(target)}`,
@@ -123,8 +124,32 @@ export function compileNativeSource(input, options = {}) {
123
124
  losses,
124
125
  compileResultId: id
125
126
  });
127
+ const sourceMaps = normalizeSourceMaps(emittedSourceMaps, {
128
+ document: importResult.document,
129
+ nativeSources: [importResult.nativeSource].filter(Boolean),
130
+ nativeAst: importResult.nativeAst ?? importResult.nativeSource?.ast,
131
+ nativeSource: importResult.nativeSource,
132
+ semanticIndex: importResult.semanticIndex ?? importResult.universalAst?.semanticIndex,
133
+ evidence,
134
+ losses,
135
+ sourcePreservation: importResult.metadata?.sourcePreservation ?? importResult.nativeSource?.metadata?.sourcePreservation,
136
+ target,
137
+ targetPath: options.targetPath ?? targetProjection?.targetPath,
138
+ targetHash: options.targetHash ?? outputHash,
139
+ sourcePath: importResult.sourcePath ?? importResult.nativeSource?.sourcePath,
140
+ sourceHash: importResult.nativeSource?.sourceHash ?? importResult.nativeAst?.sourceHash ?? importResult.sourceHash,
141
+ defaultSourceMapId: options.sourceMapId ?? `source_map_${idFragment(id)}_${idFragment(target)}`
142
+ });
143
+ if (targetProjection?.sourceMaps?.length) targetProjection.sourceMaps = sourceMaps;
126
144
  const sourceMap = sourceMaps[0];
127
- const projectionReview = nativeProjectionReview({
145
+ const sourceMapGeneratedBoundaryGate = classifySourceMapGeneratedBoundary(sourceMaps, {
146
+ sourceLanguage,
147
+ target,
148
+ outputMode,
149
+ projectionMode: projection.mode
150
+ });
151
+ const projectionReview = {
152
+ ...nativeProjectionReview({
128
153
  mode: projection.mode, outputMode, language: projection.language, sourceLanguage, target,
129
154
  sourcePath: importResult.sourcePath ?? importResult.nativeSource?.sourcePath,
130
155
  exactSourceAvailable: projection.metadata?.exactSourceAvailable === true,
@@ -132,9 +157,12 @@ export function compileNativeSource(input, options = {}) {
132
157
  sourceHashVerified: projection.metadata?.sourceHashVerified === true,
133
158
  declarationCount: projection.declarations.length, sourceMapCount: sourceMaps.length,
134
159
  losses, targetLosses, readiness: readiness.readiness, targetCoverage, targetProjection
135
- });
160
+ }),
161
+ sourceMapGeneratedBoundaryGate
162
+ };
136
163
  compileEvidence.metadata.projectionReview = projectionReview;
137
- for (const record of sourceMaps) record.metadata = { ...(record.metadata ?? {}), projectionReview };
164
+ compileEvidence.metadata.sourceMapGeneratedBoundaryGate = sourceMapGeneratedBoundaryGate;
165
+ for (const record of sourceMaps) record.metadata = { ...(record.metadata ?? {}), projectionReview, sourceMapGeneratedBoundaryGate };
138
166
  const roundtripEvidence = createNativeRoundtripEvidence(importResult, {
139
167
  id: `evidence_${idPart}_${idFragment(target)}_native_roundtrip`,
140
168
  projection,
@@ -146,6 +174,25 @@ export function compileNativeSource(input, options = {}) {
146
174
  target,
147
175
  outputMode
148
176
  });
177
+ const roundtripBoundaryGate = {
178
+ schema: sourceMapGeneratedBoundaryGate.schema,
179
+ version: sourceMapGeneratedBoundaryGate.version,
180
+ status: sourceMapGeneratedBoundaryGate.status,
181
+ readiness: sourceMapGeneratedBoundaryGate.readiness,
182
+ action: sourceMapGeneratedBoundaryGate.action,
183
+ reviewRequired: sourceMapGeneratedBoundaryGate.reviewRequired,
184
+ exactBoundary: sourceMapGeneratedBoundaryGate.exactBoundary,
185
+ sourceMapIds: sourceMapGeneratedBoundaryGate.sourceMapIds,
186
+ sourceMapMappingIds: sourceMapGeneratedBoundaryGate.sourceMapMappingIds,
187
+ reasonCodes: sourceMapGeneratedBoundaryGate.reasonCodes,
188
+ summary: sourceMapGeneratedBoundaryGate.summary
189
+ };
190
+ roundtripEvidence.metadata.sourceMapGeneratedBoundaryGate = roundtripBoundaryGate;
191
+ roundtripEvidence.metadata.roundtripEvidence.sourceMapGeneratedBoundaryGate = roundtripBoundaryGate;
192
+ roundtripEvidence.metadata.roundtripEvidence.audit = {
193
+ ...roundtripEvidence.metadata.roundtripEvidence.audit,
194
+ sourceMapGeneratedBoundaryGate: roundtripBoundaryGate
195
+ };
149
196
  const resultEvidence = uniqueByEvidenceId([...evidence, roundtripEvidence]);
150
197
  return {
151
198
  kind: 'frontier.lang.nativeSourceCompileResult',
@@ -191,6 +238,7 @@ export function compileNativeSource(input, options = {}) {
191
238
  targetReadiness: targetCoverage.readiness,
192
239
  targetSupported: targetCoverage.supported,
193
240
  projectionReview,
241
+ sourceMapGeneratedBoundaryGate,
194
242
  ...options.metadata,
195
243
  roundtripEvidence: roundtripEvidence.metadata.roundtripEvidence
196
244
  }
@@ -1,4 +1,4 @@
1
- import{idFragment,uniqueRecordsById}from'../../native-import-utils.js';import{lightweightDependencyRelations}from'../../lightweight-dependency-relations.js';import{lightweightCoverageLosses,scanNativeDeclarations}from'../../native-region-scanner.js';import{semanticOwnershipRegionForDeclaration,semanticPatchHintForRegion}from'../../semantic-import-regions.js';import{createSemanticIndexRecord,hashSemanticValue}from'@shapeshift-labs/frontier-lang-kernel';
1
+ import{idFragment,uniqueRecordsById}from'../../native-import-utils.js';import{lightweightDependencyRelations}from'../../lightweight-dependency-relations.js';import{lightweightCoverageLosses,scanNativeDeclarations}from'../../native-region-scanner.js';import{semanticOwnershipRegionForDeclaration,semanticPatchHintForRegion}from'../../semantic-import-regions.js';import{createSemanticIndexRecord,hashSemanticValue}from'@shapeshift-labs/frontier-lang-kernel';import{dynamicImportExpressionEdgeFields}from'./dynamicImportExpressionMetadata.js';
2
2
  export function createLightweightNativeImport(input) {
3
3
  const parser = input.parser ?? `${input.language}.lightweight-declaration-scan`;
4
4
  const rootId = 'native_root';
@@ -43,6 +43,8 @@ export function createLightweightNativeImport(input) {
43
43
  };
44
44
  if (declaration.symbolId) {
45
45
  const occurrenceId = `occ_${idFragment(declaration.nodeId)}_def`;
46
+ const relationId = `rel_${idFragment(documentId)}_${idFragment(declaration.nodeId)}`;
47
+ const moduleEdge = lightweightModuleEdge(declaration, input, documentId, relationId, ownershipRegion);
46
48
  symbols.push({
47
49
  id: declaration.symbolId,
48
50
  scheme: 'frontier',
@@ -68,10 +70,11 @@ export function createLightweightNativeImport(input) {
68
70
  nativeAstNodeId: declaration.nodeId
69
71
  });
70
72
  relations.push({
71
- id: `rel_${idFragment(documentId)}_${idFragment(declaration.nodeId)}`,
73
+ id: relationId,
72
74
  sourceId: documentId,
73
- predicate: declaration.role === 'import' ? 'imports' : 'defines',
74
- targetId: declaration.symbolId
75
+ predicate: lightweightRelationPredicate(declaration),
76
+ targetId: declaration.symbolId,
77
+ ...(moduleEdge ? { metadata: { moduleEdge } } : {})
75
78
  });
76
79
  facts.push({
77
80
  id: `fact_${idFragment(declaration.nodeId)}_kind`,
@@ -93,6 +96,14 @@ export function createLightweightNativeImport(input) {
93
96
  key: ownershipRegion.key
94
97
  }
95
98
  });
99
+ if (moduleEdge) facts.push({
100
+ id: `fact_${idFragment(relationId)}_${idFragment(declaration.symbolId)}_module_edge`,
101
+ predicate: 'moduleEdge',
102
+ subjectId: declaration.symbolId,
103
+ objectId: declaration.symbolId,
104
+ value: moduleEdge,
105
+ evidenceIds: [evidenceId]
106
+ });
96
107
  mappings.push({
97
108
  id: `map_${idFragment(declaration.nodeId)}`,
98
109
  nativeAstNodeId: declaration.nodeId,
@@ -190,3 +201,46 @@ export function createLightweightNativeImport(input) {
190
201
  }
191
202
  };
192
203
  }
204
+
205
+ function lightweightRelationPredicate(declaration) {
206
+ if (declaration.role === 'import') return 'imports';
207
+ if (declaration.role === 'export') return 'exports';
208
+ return 'defines';
209
+ }
210
+
211
+ function lightweightModuleEdge(declaration, input, documentId, relationId, ownershipRegion) {
212
+ if (declaration.role !== 'import' && declaration.role !== 'export') return undefined;
213
+ const fields = declaration.fields ?? {};
214
+ const metadata = declaration.metadata ?? {};
215
+ const moduleSpecifier = fields.importPath ?? fields.moduleSpecifier ?? fields.exportPath ?? fields.source
216
+ ?? metadata.importPath ?? metadata.moduleSpecifier ?? metadata.exportPath ?? metadata.source;
217
+ return compactRecord({
218
+ kind: 'frontier.lang.moduleEdge',
219
+ version: 1,
220
+ id: relationId,
221
+ edgeKind: declaration.role === 'import' ? 'import' : moduleSpecifier || metadata.reexport ? 're-export' : 'export',
222
+ role: declaration.role,
223
+ sourceDocumentId: documentId,
224
+ sourcePath: input.sourcePath,
225
+ sourceHash: input.sourceHash,
226
+ moduleSpecifier,
227
+ symbolId: declaration.symbolId,
228
+ relationId,
229
+ ownershipRegionId: ownershipRegion.id,
230
+ ownershipRegionKey: ownershipRegion.key,
231
+ importKind: fields.importKind ?? metadata.importKind,
232
+ exportKind: fields.exportKind ?? metadata.exportKind,
233
+ importedName: fields.importedName ?? metadata.importedName,
234
+ exportedName: fields.exportedName ?? metadata.exportedName,
235
+ localName: fields.localName ?? metadata.localName,
236
+ namespace: fields.namespace ?? metadata.namespace,
237
+ exportStar: fields.exportStar ?? metadata.exportStar,
238
+ isTypeOnly: fields.typeOnly ?? fields.isTypeOnly ?? metadata.typeOnly ?? metadata.isTypeOnly,
239
+ ...dynamicImportExpressionEdgeFields(metadata),
240
+ publicContract: declaration.role === 'export' || metadata.publicContract
241
+ });
242
+ }
243
+
244
+ function compactRecord(record) {
245
+ return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
246
+ }
@@ -1,4 +1,13 @@
1
- import{adapterDiagnosticToLoss}from'./adapterDiagnosticToLoss.js';import{createAstNormalizationContext}from'./createAstNormalizationContext.js';import{mergeNativeLosses}from'./mergeNativeLosses.js';import{missingInjectedParserResult}from'./missingInjectedParserResult.js';import{normalizeSyntaxAstRoot}from'./normalizeSyntaxAstRoot.js';import{semanticIndexFromNativeDeclarations}from'./semanticIndexFromNativeDeclarations.js';import{truncatedAstLoss}from'./truncatedAstLoss.js';import{visitSyntaxAstNode}from'./visitSyntaxAstNode.js';
1
+ import { adapterDiagnosticToLoss } from './adapterDiagnosticToLoss.js';
2
+ import { createAstNormalizationContext } from './createAstNormalizationContext.js';
3
+ import { mergeNativeLosses } from './mergeNativeLosses.js';
4
+ import { missingInjectedParserResult } from './missingInjectedParserResult.js';
5
+ import { normalizeSyntaxAstRoot } from './normalizeSyntaxAstRoot.js';
6
+ import { semanticIndexFromNativeDeclarations } from './semanticIndexFromNativeDeclarations.js';
7
+ import { createSyntaxAstSourcePreservation } from './syntaxAstSourcePreservation.js';
8
+ import { truncatedAstLoss } from './truncatedAstLoss.js';
9
+ import { visitSyntaxAstNode } from './visitSyntaxAstNode.js';
10
+
2
11
  export function createNativeImportFromSyntaxAst(ast, input, options) {
3
12
  const root = normalizeSyntaxAstRoot(ast, options.astFormat);
4
13
  if (!root) {
@@ -14,6 +23,7 @@ export function createNativeImportFromSyntaxAst(ast, input, options) {
14
23
  context.losses.push(truncatedAstLoss(input, context, options));
15
24
  }
16
25
  const semantic = semanticIndexFromNativeDeclarations(context.declarations, input, options);
26
+ const sourcePreservation = createSyntaxAstSourcePreservation(ast, input, options);
17
27
  return {
18
28
  rootId: context.rootId,
19
29
  nodes: context.nodes,
@@ -25,11 +35,17 @@ export function createNativeImportFromSyntaxAst(ast, input, options) {
25
35
  }, input)) ?? []),
26
36
  evidence: semantic.evidence,
27
37
  diagnostics: options.diagnostics,
38
+ ...(sourcePreservation ? { sourcePreservation } : {}),
28
39
  metadata: {
29
40
  astFormat: options.astFormat,
30
41
  parser: options.parser,
31
42
  normalizedNodeCount: Object.keys(context.nodes).length,
32
43
  declarationCount: context.declarations.length,
44
+ ...(sourcePreservation ? {
45
+ sourcePreservationId: sourcePreservation.id,
46
+ sourcePreservationSummary: sourcePreservation.summary,
47
+ parserTriviaExactness: sourcePreservation.metadata?.parserTriviaExactness
48
+ } : {}),
33
49
  truncated: context.truncated
34
50
  }
35
51
  };
@@ -1,4 +1,13 @@
1
- import{createAstNormalizationContext}from'./createAstNormalizationContext.js';import{semanticIndexFromNativeDeclarations}from'./semanticIndexFromNativeDeclarations.js';import{truncatedAstLoss}from'./truncatedAstLoss.js';import{visitTypeScriptAstNode}from'./visitTypeScriptAstNode.js';
1
+ import { createAstNormalizationContext } from './createAstNormalizationContext.js';
2
+ import { semanticIndexFromNativeDeclarations } from './semanticIndexFromNativeDeclarations.js';
3
+ import {
4
+ attachTypeScriptCompilerReferenceGraph,
5
+ createTypeScriptCompilerReferenceGraph
6
+ } from './typeScriptCompilerReferenceGraph.js';
7
+ import { createTypeScriptSourceFilePreservation } from './typeScriptSourceFilePreservation.js';
8
+ import { truncatedAstLoss } from './truncatedAstLoss.js';
9
+ import { visitTypeScriptAstNode } from './visitTypeScriptAstNode.js';
10
+
2
11
  export function createNativeImportFromTypeScriptAst(sourceFile, input, options) {
3
12
  const context = createAstNormalizationContext(input, options);
4
13
  visitTypeScriptAstNode(sourceFile, sourceFile, context, 'root', options.ts);
@@ -6,18 +15,33 @@ export function createNativeImportFromTypeScriptAst(sourceFile, input, options)
6
15
  context.losses.push(truncatedAstLoss(input, context, options));
7
16
  }
8
17
  const semantic = semanticIndexFromNativeDeclarations(context.declarations, input, options);
18
+ const referenceGraph = createTypeScriptCompilerReferenceGraph(
19
+ sourceFile,
20
+ input,
21
+ options,
22
+ context,
23
+ semantic.semanticIndex
24
+ );
25
+ const sourcePreservation = createTypeScriptSourceFilePreservation(sourceFile, input, options);
9
26
  return {
10
27
  rootId: context.rootId,
11
28
  nodes: context.nodes,
12
- semanticIndex: semantic.semanticIndex,
13
- mappings: semantic.mappings,
29
+ semanticIndex: attachTypeScriptCompilerReferenceGraph(semantic.semanticIndex, referenceGraph),
30
+ mappings: [...semantic.mappings, ...referenceGraph.mappings],
14
31
  losses: context.losses,
15
- evidence: semantic.evidence,
32
+ evidence: [...semantic.evidence, ...referenceGraph.evidence],
33
+ ...(sourcePreservation ? { sourcePreservation } : {}),
16
34
  metadata: {
17
35
  astFormat: options.astFormat,
18
36
  parser: options.parser,
19
37
  normalizedNodeCount: Object.keys(context.nodes).length,
20
38
  declarationCount: context.declarations.length,
39
+ compilerReferenceGraph: referenceGraph.summary,
40
+ ...(sourcePreservation ? {
41
+ sourcePreservationId: sourcePreservation.id,
42
+ sourcePreservationSummary: sourcePreservation.summary,
43
+ parserTriviaExactness: sourcePreservation.metadata?.parserTriviaExactness
44
+ } : {}),
21
45
  truncated: context.truncated
22
46
  }
23
47
  };
@@ -1,8 +1,9 @@
1
1
  import{idFragment,uniqueByEvidenceId,uniqueByLossId,uniqueStrings}from'../../native-import-utils.js';import{createDocument,createPatch,createUniversalAstEnvelope}from'@shapeshift-labs/frontier-lang-kernel';
2
2
  import{createNativeImportResultContract}from'./createNativeImportResultContract.js';import{createProjectImportAdmissionRecord}from'./createProjectImportAdmissionRecord.js';import{mergeSemanticIndexes}from'./mergeSemanticIndexes.js';import{summarizeNativeImportLosses}from'./summarizeNativeImportLosses.js';import{summarizeProjectSourcePreservation}from'./summarizeProjectSourcePreservation.js';
3
3
  import{createProjectDocumentExportSymbolResolver,createProjectDocumentExportSymbolsResolver,createProjectModuleSymbolResolver,resolveProjectModule}from'./projectSymbolGraphModuleResolution.js';
4
+ import{createProjectCompilerGraphRecords}from'./projectSymbolGraphCompilerFacts.js';import{createProjectJsxGraphRecords}from'./projectSymbolGraphJsxRecords.js';import{createProjectRuntimeRegionRecords}from'./projectSymbolGraphRuntimeRegions.js';import{createProjectScopeUseDefRecords}from'./projectSymbolGraphScopeUseDefRecords.js';import{createProjectSourceEvidenceRecords}from'./projectSymbolGraphSourceRecords.js';import{createProjectCssModuleGraphRecords}from'./projectSymbolGraphCssModules.js';
4
5
  import{publicContractRegionRecord}from'./projectSymbolGraphPublicContracts.js';
5
- import{exportStarReExportIdentityRecords,isReExportImportEdge,reExportIdentityInputFromEdge,reExportIdentityRecord}from'./projectSymbolGraphReExports.js';
6
+ import{commonJsAliasReExportIdentityRecords,exportStarReExportIdentityRecords,isReExportImportEdge,reExportIdentityInputFromEdge,reExportIdentityRecord}from'./projectSymbolGraphReExports.js';import{createProjectModuleDeclarationShapeRecords}from'./projectSymbolGraphModuleDeclarationShapes.js';import{resolveReExportIdentityImportTargets}from'./projectSymbolGraphReExportImportTargets.js';
6
7
  export function createNativeProjectImportResult(input, imports) {
7
8
  const idPart = idFragment(input.id ?? input.projectRoot ?? 'native_project');
8
9
  const nodes = {};
@@ -141,9 +142,7 @@ export function createNativeProjectImportResult(input, imports) {
141
142
  }
142
143
  };
143
144
  }
144
-
145
145
  const PROJECT_SYMBOL_GRAPH_REMAINING_FIELDS = Object.freeze([]);
146
-
147
146
  function createProjectSymbolGraphSummary(semanticIndex, imports, input) {
148
147
  const documents = semanticIndex?.documents ?? [];
149
148
  const symbolsById = new Map((semanticIndex?.symbols ?? []).map((symbol) => [symbol.id, symbol]));
@@ -155,7 +154,7 @@ function createProjectSymbolGraphSummary(semanticIndex, imports, input) {
155
154
  const resolveDocumentExportSymbols = createProjectDocumentExportSymbolsResolver(semanticIndex?.symbols ?? [], documents);
156
155
  const facts = semanticIndex?.facts ?? [];
157
156
  const moduleEdgeFacts = facts.filter((fact) => fact.predicate === 'moduleEdge');
158
- const moduleEdgeByRelation = new Map(moduleEdgeFacts.map((fact) => [fact.subjectId, fact]));
157
+ const moduleEdgeByRelation = new Map(moduleEdgeFacts.map((fact) => [objectValue(fact.value).relationId ?? fact.subjectId, fact]));
159
158
  const relations = semanticIndex?.relations ?? [];
160
159
  const importEdges = relations
161
160
  .filter((relation) => relation.predicate === 'imports')
@@ -167,19 +166,19 @@ function createProjectSymbolGraphSummary(semanticIndex, imports, input) {
167
166
  const reExportIdentities = uniqueRecords([
168
167
  ...facts
169
168
  .filter((fact) => fact.predicate === 'reExportIdentity' && fact.value)
169
+ .filter((fact) => hasConcreteReExportIdentity(objectValue(fact.value)))
170
170
  .map((fact) => reExportIdentityRecord(objectValue(fact.value), moduleEdgeById.get(objectValue(fact.value).relationId ?? fact.objectId), resolveDocumentExportSymbolId, { factId: fact.id })),
171
- ...exportEdges
172
- .filter((edge) => edge.isReExport)
173
- .map((edge) => reExportIdentityRecord(reExportIdentityInputFromEdge(edge, `reexport_${idFragment(edge.id)}`), edge, resolveDocumentExportSymbolId)),
174
171
  ...importEdges
175
172
  .filter((edge) => isReExportImportEdge(edge))
176
173
  .flatMap((edge) => edge.exportStar
177
174
  ? exportStarReExportIdentityRecords(edge, resolveDocumentExportSymbols(edge.targetDocumentId))
178
- : [reExportIdentityRecord(reExportIdentityInputFromEdge(edge, `reexport_${idFragment(edge.id)}`), edge, resolveDocumentExportSymbolId)])
175
+ : [reExportIdentityRecord(reExportIdentityInputFromEdge(edge, `reexport_${idFragment(edge.id)}`), edge, resolveDocumentExportSymbolId)]),...commonJsAliasReExportIdentityRecords(importEdges, exportEdges, resolveDocumentExportSymbolId)
179
176
  ]);
177
+ const resolvedImportEdges = resolveReExportIdentityImportTargets(importEdges, reExportIdentities);
180
178
  const publicContractRegions = uniqueRecords(facts
181
179
  .filter((fact) => fact.predicate === 'publicContractRegion' && fact.value)
182
180
  .map((fact) => publicContractRegionRecord(objectValue(fact.value), fact, symbolsById.get(fact.subjectId))));
181
+ const compilerGraphRecords = createProjectCompilerGraphRecords(semanticIndex, symbolsById, documentsById, publicContractRegions); const runtimeRegionRecords = createProjectRuntimeRegionRecords(semanticIndex, imports, publicContractRegions); const scopeUseDefRecords = createProjectScopeUseDefRecords(semanticIndex, imports, publicContractRegions); const jsxGraphRecords = createProjectJsxGraphRecords(semanticIndex, imports, publicContractRegions, resolvedImportEdges, exportEdges); const cssModuleGraphRecords = createProjectCssModuleGraphRecords(semanticIndex, imports, resolvedImportEdges, scopeUseDefRecords.scopeReferenceRecords, jsxGraphRecords.jsxPropRecords); const sourceEvidenceRecords = createProjectSourceEvidenceRecords(imports); const moduleDeclarationShapeRecords = createProjectModuleDeclarationShapeRecords(semanticIndex, exportEdges);
183
182
  const fileHashes = uniqueRecords([
184
183
  ...documents.map((document) => fileHashRecord(document)),
185
184
  ...facts
@@ -197,10 +196,20 @@ function createProjectSymbolGraphSummary(semanticIndex, imports, input) {
197
196
  relationCount: relations.length,
198
197
  factCount: facts.length,
199
198
  fileHashes,
200
- importEdges,
199
+ importEdges: resolvedImportEdges,
201
200
  exportEdges,
202
- reExportIdentities,
201
+ reExportIdentities, moduleDeclarationRecords: moduleDeclarationShapeRecords.moduleDeclarationRecords, exportAssignmentRecords: moduleDeclarationShapeRecords.exportAssignmentRecords,
203
202
  publicContractRegions,
203
+ sourceFileRecords: sourceEvidenceRecords.sourceFileRecords, sourceSpanRecords: sourceEvidenceRecords.sourceSpanRecords,
204
+ compilerSymbolRecords: compilerGraphRecords.compilerSymbolRecords,
205
+ compilerTypeRecords: compilerGraphRecords.compilerTypeRecords,
206
+ runtimeRegionRecords,
207
+ scopeBindingRecords: scopeUseDefRecords.scopeBindingRecords,
208
+ scopeReferenceRecords: scopeUseDefRecords.scopeReferenceRecords,
209
+ jsxElementRecords: jsxGraphRecords.jsxElementRecords,
210
+ jsxPropRecords: jsxGraphRecords.jsxPropRecords,
211
+ cssModuleImportBindings: cssModuleGraphRecords.cssModuleImportBindings, cssModuleUseSites: cssModuleGraphRecords.cssModuleUseSites,
212
+ cssModuleUseSiteBlockers: cssModuleGraphRecords.cssModuleUseSiteBlockers, cssModuleUseSiteGraphs: cssModuleGraphRecords.cssModuleUseSiteGraphs,
204
213
  remainingFields: PROJECT_SYMBOL_GRAPH_REMAINING_FIELDS
205
214
  };
206
215
  }
@@ -223,7 +232,8 @@ function moduleEdgeRecord(relation, moduleEdgeByRelation, symbolsById, documents
223
232
  symbolMetadata.source,
224
233
  symbol?.kind === 'module' ? symbol.name : undefined
225
234
  );
226
- const resolution = resolveProjectModule(document?.path, moduleSpecifier, documentsByPath, moduleResolution);
235
+ const runtimeEdgeMetadata = compactRecord({ importKind: firstString(moduleEdge.importKind, value.importKind, symbolMetadata.importKind), exportKind: firstString(moduleEdge.exportKind, value.exportKind, symbolMetadata.exportKind), dynamicImport: firstBoolean(moduleEdge.dynamicImport, value.dynamicImport, metadata.dynamicImport, symbolMetadata.dynamicImport), hostDependencyKind: firstString(moduleEdge.hostDependencyKind, value.hostDependencyKind, metadata.hostDependencyKind, symbolMetadata.hostDependencyKind), commonJs: firstBoolean(moduleEdge.commonJs, value.commonJs, metadata.commonJs, symbolMetadata.commonJs), interopHelper: firstString(moduleEdge.interopHelper, value.interopHelper, metadata.interopHelper, symbolMetadata.interopHelper), packageEnvironmentCondition: firstString(moduleEdge.packageEnvironmentCondition, value.packageEnvironmentCondition, metadata.packageEnvironmentCondition, symbolMetadata.packageEnvironmentCondition) });
236
+ const resolution = resolveProjectModule(document?.path, moduleSpecifier, documentsByPath, moduleResolution, runtimeEdgeMetadata);
227
237
  const record = {
228
238
  id: relation.id,
229
239
  sourceDocumentId: relation.sourceId,
@@ -239,11 +249,15 @@ function moduleEdgeRecord(relation, moduleEdgeByRelation, symbolsById, documents
239
249
  resolutionPathVariant: resolution?.resolutionPathVariant,
240
250
  packageName: resolution?.packageName,
241
251
  packageSubpath: resolution?.packageSubpath,
252
+ packageExportKey: resolution?.packageExportKey,
242
253
  packageExportCondition: resolution?.packageExportCondition,
254
+ packageExportTarget: resolution?.packageExportTarget,
255
+ packageRuntimeCondition: resolution?.packageRuntimeCondition, packageRuntimeConditionEvidenceSource: resolution?.packageRuntimeConditionEvidenceSource, packageRuntimeConditionEdgeKind: resolution?.packageRuntimeConditionEdgeKind, packageRuntimeConditionCandidates: resolution?.packageRuntimeConditionCandidates, packageRuntimeConditionReasonCode: resolution?.packageRuntimeConditionReasonCode, packageEnvironmentCondition: resolution?.packageEnvironmentCondition, packageEnvironmentConditionEvidenceSource: resolution?.packageEnvironmentConditionEvidenceSource, packageEnvironmentConditionCandidates: resolution?.packageEnvironmentConditionCandidates, packageEnvironmentConditionReasonCode: resolution?.packageEnvironmentConditionReasonCode, packageWorkspaceRootAmbiguous: resolution?.packageWorkspaceRootAmbiguous, packageWorkspaceRoots: resolution?.packageWorkspaceRoots, packageResolutionReasonCode: resolution?.packageResolutionReasonCode,
256
+ packageType: resolution?.packageType,
243
257
  packageImportKey: resolution?.packageImportKey,
244
258
  packageImportCondition: resolution?.packageImportCondition,
245
259
  packageImportTarget: resolution?.packageImportTarget,
246
- importKind: firstString(moduleEdge.importKind, value.importKind, symbolMetadata.importKind),
260
+ importKind: firstString(moduleEdge.importKind, value.importKind, symbolMetadata.importKind), commonJs: firstBoolean(moduleEdge.commonJs, value.commonJs, metadata.commonJs, symbolMetadata.commonJs), interopHelper: firstString(moduleEdge.interopHelper, value.interopHelper, metadata.interopHelper, symbolMetadata.interopHelper), dynamicImport: firstBoolean(moduleEdge.dynamicImport, value.dynamicImport, metadata.dynamicImport, symbolMetadata.dynamicImport), dynamicImportSpecifierKind: firstString(moduleEdge.dynamicImportSpecifierKind, value.dynamicImportSpecifierKind, metadata.dynamicImportSpecifierKind, symbolMetadata.dynamicImportSpecifierKind), dynamicImportExpressionText: firstString(moduleEdge.dynamicImportExpressionText, value.dynamicImportExpressionText, metadata.dynamicImportExpressionText, symbolMetadata.dynamicImportExpressionText), dynamicImportExpressionHash: firstString(moduleEdge.dynamicImportExpressionHash, value.dynamicImportExpressionHash, metadata.dynamicImportExpressionHash, symbolMetadata.dynamicImportExpressionHash), dynamicImportStaticSpecifierEvidence: firstBoolean(moduleEdge.dynamicImportStaticSpecifierEvidence, value.dynamicImportStaticSpecifierEvidence, metadata.dynamicImportStaticSpecifierEvidence, symbolMetadata.dynamicImportStaticSpecifierEvidence), dynamicImportRuntimeResolutionClaim: firstBoolean(moduleEdge.dynamicImportRuntimeResolutionClaim, value.dynamicImportRuntimeResolutionClaim, metadata.dynamicImportRuntimeResolutionClaim, symbolMetadata.dynamicImportRuntimeResolutionClaim), dynamicImportResolutionProofRequired: firstBoolean(moduleEdge.dynamicImportResolutionProofRequired, value.dynamicImportResolutionProofRequired, metadata.dynamicImportResolutionProofRequired, symbolMetadata.dynamicImportResolutionProofRequired), hostDependency: firstBoolean(moduleEdge.hostDependency, value.hostDependency, metadata.hostDependency, symbolMetadata.hostDependency), hostDependencyKind: firstString(moduleEdge.hostDependencyKind, value.hostDependencyKind, metadata.hostDependencyKind, symbolMetadata.hostDependencyKind), hostDependencyBase: firstString(moduleEdge.hostDependencyBase, value.hostDependencyBase, metadata.hostDependencyBase, symbolMetadata.hostDependencyBase), hostDependencyExpressionText: firstString(moduleEdge.hostDependencyExpressionText, value.hostDependencyExpressionText, metadata.hostDependencyExpressionText, symbolMetadata.hostDependencyExpressionText), hostDependencyExpressionHash: firstString(moduleEdge.hostDependencyExpressionHash, value.hostDependencyExpressionHash, metadata.hostDependencyExpressionHash, symbolMetadata.hostDependencyExpressionHash), hostDependencyStaticSpecifierEvidence: firstBoolean(moduleEdge.hostDependencyStaticSpecifierEvidence, value.hostDependencyStaticSpecifierEvidence, metadata.hostDependencyStaticSpecifierEvidence, symbolMetadata.hostDependencyStaticSpecifierEvidence), hostDependencyRuntimeResolutionClaim: firstBoolean(moduleEdge.hostDependencyRuntimeResolutionClaim, value.hostDependencyRuntimeResolutionClaim, metadata.hostDependencyRuntimeResolutionClaim, symbolMetadata.hostDependencyRuntimeResolutionClaim), hostDependencyResolutionProofRequired: firstBoolean(moduleEdge.hostDependencyResolutionProofRequired, value.hostDependencyResolutionProofRequired, metadata.hostDependencyResolutionProofRequired, symbolMetadata.hostDependencyResolutionProofRequired), hasImportAttributes: firstBoolean(moduleEdge.hasImportAttributes, value.hasImportAttributes, metadata.hasImportAttributes, symbolMetadata.hasImportAttributes), importAttributeCount: moduleEdge.importAttributeCount ?? value.importAttributeCount ?? metadata.importAttributeCount ?? symbolMetadata.importAttributeCount, importAttributeKeys: moduleEdge.importAttributeKeys ?? value.importAttributeKeys ?? metadata.importAttributeKeys ?? symbolMetadata.importAttributeKeys, importAttributeHash: firstString(moduleEdge.importAttributeHash, value.importAttributeHash, metadata.importAttributeHash, symbolMetadata.importAttributeHash), importAttributes: moduleEdge.importAttributes ?? value.importAttributes ?? metadata.importAttributes ?? symbolMetadata.importAttributes,
247
261
  exportKind: firstString(moduleEdge.exportKind, value.exportKind, symbolMetadata.exportKind),
248
262
  importedName: firstString(moduleEdge.importedName, value.importedName, symbolMetadata.importedName),
249
263
  exportedName: firstString(moduleEdge.exportedName, value.exportedName, symbolMetadata.exportedName),
@@ -252,7 +266,7 @@ function moduleEdgeRecord(relation, moduleEdgeByRelation, symbolsById, documents
252
266
  exportStar: firstBoolean(moduleEdge.exportStar, value.exportStar, symbolMetadata.exportStar),
253
267
  isTypeOnly: firstBoolean(moduleEdge.isTypeOnly, value.isTypeOnly, symbolMetadata.isTypeOnly, symbolMetadata.typeOnly),
254
268
  isReExport: firstBoolean(moduleEdge.isReExport, value.isReExport, symbolMetadata.reexport) ?? (relation.predicate === 'exports' && Boolean(moduleSpecifier)),
255
- publicContract: firstBoolean(moduleEdge.publicContract, value.publicContract, metadata.publicContract),
269
+ publicContract: firstBoolean(moduleEdge.publicContract, value.publicContract, metadata.publicContract, symbolMetadata.publicContract),
256
270
  evidenceIds: uniqueStrings([...(relation.evidenceIds ?? []), ...(fact?.evidenceIds ?? [])])
257
271
  };
258
272
  return compactRecord({ ...record, resolvedTargetSymbolId: resolveTargetSymbolId(record) });
@@ -277,6 +291,8 @@ function objectValue(value) {
277
291
  return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
278
292
  }
279
293
 
294
+ function hasConcreteReExportIdentity(identity) { return Boolean(identity.exportedName || identity.importedName || identity.localName || identity.namespace); }
295
+
280
296
  function compactRecord(record) {
281
297
  return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
282
298
  }
@@ -292,17 +308,5 @@ function uniqueRecords(records) {
292
308
  }
293
309
  return result;
294
310
  }
295
-
296
- function firstString(...values) {
297
- for (const value of values) {
298
- if (value !== undefined && value !== null && String(value)) return String(value);
299
- }
300
- return undefined;
301
- }
302
-
303
- function firstBoolean(...values) {
304
- for (const value of values) {
305
- if (typeof value === 'boolean') return value;
306
- }
307
- return undefined;
308
- }
311
+ function firstString(...values) { for (const value of values) if (value !== undefined && value !== null && String(value)) return String(value); return undefined; }
312
+ function firstBoolean(...values) { for (const value of values) if (typeof value === 'boolean') return value; return undefined; }