@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
@@ -0,0 +1,112 @@
1
+ import { hashSemanticValue } from '@shapeshift-labs/frontier-lang-kernel';
2
+ import { idFragment } from '../../native-import-utils.js';
3
+ import { lineColumnForOffset } from './lineColumnForOffset.js';
4
+ import { nearestLexicalPublicOwner, nearestPublicOwnerForOffset } from './projectSymbolGraphScopeUseDefOwners.js';
5
+
6
+ function bindingRecords(bindings, context) {
7
+ const lexicalPublicOwners = bindings
8
+ .filter((binding) => binding.depth === 0 && publicKeysHas(context.publicKeys, context.sourcePath, binding.name))
9
+ .map((binding) => ({ name: binding.name, start: binding.start, depth: binding.depth }));
10
+ return bindings.map((binding, index) => {
11
+ const sourceSpan = sourceSpanForRange(context, binding.start, binding.end);
12
+ const semanticSpan = semanticSpanForHash(sourceSpan);
13
+ const rangeOwner = nearestPublicOwnerForOffset(context.publicOwners, binding.start);
14
+ const lexicalOwner = nearestLexicalPublicOwner(lexicalPublicOwners, binding);
15
+ const publicOwner = binding.name === rangeOwner?.name ? undefined : (rangeOwner ?? lexicalOwner);
16
+ const publicContract = (publicKeysHas(context.publicKeys, context.sourcePath, binding.name) && binding.depth === 0) || Boolean(publicOwner);
17
+ return compactRecord({
18
+ id: `scope_binding_${idFragment(context.sourcePath)}_${index + 1}`,
19
+ name: binding.name,
20
+ bindingKind: binding.kind,
21
+ namespaces: binding.namespaces,
22
+ sourcePath: context.sourcePath,
23
+ sourceHash: context.sourceHash,
24
+ sourceSpan,
25
+ start: binding.start,
26
+ end: binding.end,
27
+ depth: binding.depth,
28
+ ordinal: index + 1,
29
+ scopeEvidenceSource: binding.scopeEvidenceSource,
30
+ scopeEvidenceKind: binding.scopeEvidenceKind,
31
+ scopeType: binding.scopeType,
32
+ definitionType: binding.definitionType,
33
+ externalBindingId: binding.externalBindingId,
34
+ evidenceIds: binding.evidenceIds?.length ? binding.evidenceIds : undefined,
35
+ publicContract: publicContract || undefined,
36
+ publicOwnerName: publicOwner?.name,
37
+ signatureHash: hashSemanticValue({
38
+ kind: 'frontier.lang.projectScopeBindingSignature',
39
+ name: binding.name,
40
+ bindingKind: binding.kind,
41
+ namespaces: binding.namespaces,
42
+ depth: binding.depth,
43
+ sourceSpan: semanticSpan
44
+ })
45
+ });
46
+ });
47
+ }
48
+
49
+ function sourceSpanForRange(context, start, end) {
50
+ const startPos = lineColumnForOffset(context.sourceText, start);
51
+ const endPos = lineColumnForOffset(context.sourceText, end);
52
+ return {
53
+ sourceId: context.sourceHash,
54
+ path: context.sourcePath,
55
+ start,
56
+ end,
57
+ startLine: startPos.line,
58
+ startColumn: startPos.column,
59
+ endLine: endPos.line,
60
+ endColumn: endPos.column
61
+ };
62
+ }
63
+
64
+ function semanticSpanForHash(span) {
65
+ return {
66
+ path: span.path,
67
+ start: span.start,
68
+ end: span.end,
69
+ startLine: span.startLine,
70
+ startColumn: span.startColumn,
71
+ endLine: span.endLine,
72
+ endColumn: span.endColumn
73
+ };
74
+ }
75
+
76
+ function closureCaptureEvidence(referenceDepth, binding, publicOwnerName) {
77
+ if (!binding || !Number.isInteger(referenceDepth) || !Number.isInteger(binding.depth)) return undefined;
78
+ const closureDepthDelta = referenceDepth - binding.depth;
79
+ if (closureDepthDelta <= 0) return undefined;
80
+ const closureBindingDepth = binding.depth;
81
+ const closureOwnerName = publicOwnerName ?? binding.publicOwnerName;
82
+ return compactRecord({
83
+ closureDepthDelta,
84
+ closureBindingDepth,
85
+ closureOwnerName,
86
+ closureCaptureHash: hashSemanticValue({
87
+ kind: 'frontier.lang.projectScopeClosureCapture',
88
+ binding: binding.signatureHash,
89
+ bindingId: binding.id,
90
+ bindingName: binding.name,
91
+ bindingKind: binding.bindingKind,
92
+ bindingDepth: closureBindingDepth,
93
+ referenceDepth,
94
+ closureDepthDelta,
95
+ closureOwnerName
96
+ })
97
+ });
98
+ }
99
+
100
+ function publicKeysHas(keys, sourcePath, name) {
101
+ return Boolean(sourcePath && name && keys.has(publicKey(sourcePath, name)));
102
+ }
103
+
104
+ function publicKey(sourcePath, name) {
105
+ return sourcePath && name ? `${sourcePath}\0${name}` : undefined;
106
+ }
107
+
108
+ function compactRecord(record) {
109
+ return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
110
+ }
111
+
112
+ export { bindingRecords, closureCaptureEvidence, compactRecord, publicKey, publicKeysHas, semanticSpanForHash, sourceSpanForRange };
@@ -0,0 +1,238 @@
1
+ import { hashSemanticValue } from '@shapeshift-labs/frontier-lang-kernel';
2
+ import {
3
+ attachAliasMetadata,
4
+ attachReferenceAliasMetadata,
5
+ compactRecord,
6
+ createScopeGraphContext,
7
+ nativeImportSourceText
8
+ } from './projectSymbolGraphScopeUseDefAliases.js';
9
+ import { lexicalScopeRecordsForImport } from './projectSymbolGraphScopeUseDefLexical.js';
10
+ import { publicKey } from './projectSymbolGraphScopeUseDefRecordBuilders.js';
11
+ import { publicOwnerRanges } from './projectSymbolGraphScopeUseDefOwners.js';
12
+ import { structuralScopeRecordsForImport } from './projectSymbolGraphScopeUseDefStructural.js';
13
+ import { directUseHashesByBinding, finalizeBindingUseHashes } from './projectSymbolGraphScopeUseDefUseHashes.js';
14
+
15
+ const CompilerReferenceAmbiguousReason = 'typescript-compiler-reference-site-ambiguous';
16
+ const CompilerReferenceLexicalMismatchReason = 'typescript-compiler-reference-lexical-binding-mismatch';
17
+ const CompilerReferenceImportAliasTargetMismatchReason = 'typescript-compiler-reference-import-alias-target-mismatch';
18
+
19
+ function createProjectScopeUseDefRecords(semanticIndex, imports, publicContractRegions) {
20
+ const publicKeys = publicScopeKeys(publicContractRegions, semanticIndex);
21
+ const context = createScopeGraphContext(semanticIndex, imports, publicKeys);
22
+ const records = imports.map((imported) => scopeRecordsForImport(imported, context)).filter(Boolean);
23
+ const initialBindings = uniqueRecords(records.flatMap((record) => record.scopeBindingRecords));
24
+ const initialReferences = uniqueRecords(records.flatMap((record) => record.scopeReferenceRecords));
25
+ const directUseHashes = directUseHashesByBinding(initialBindings, initialReferences);
26
+ const aliasBindings = attachAliasMetadata(initialBindings, directUseHashes, context);
27
+ const aliasReferences = attachReferenceAliasMetadata(initialReferences, aliasBindings);
28
+ const compilerReferences = attachCompilerReferenceSiteEvidence(aliasReferences, compilerReferenceSiteIndex(semanticIndex));
29
+ return {
30
+ scopeBindingRecords: finalizeBindingUseHashes(aliasBindings, compilerReferences),
31
+ scopeReferenceRecords: compilerReferences
32
+ };
33
+ }
34
+
35
+ function scopeRecordsForImport(imported, context) {
36
+ const sourceText = nativeImportSourceText(imported);
37
+ const sourcePath = imported?.sourcePath ?? imported?.nativeSource?.sourcePath;
38
+ if (!sourceText || !sourcePath) return undefined;
39
+ const sourceHash = imported?.nativeSource?.sourceHash ?? imported?.metadata?.sourceHash;
40
+ const fileContext = {
41
+ ...context,
42
+ sourceText,
43
+ sourcePath,
44
+ sourceHash,
45
+ publicOwners: publicOwnerRanges(context, sourcePath, sourceText)
46
+ };
47
+ return structuralScopeRecordsForImport(imported, fileContext) ?? lexicalScopeRecordsForImport(sourceText, fileContext);
48
+ }
49
+
50
+ function publicScopeKeys(publicContractRegions = [], semanticIndex) {
51
+ const keys = new Set(publicContractRegions.flatMap((region) => [
52
+ publicKey(region.sourcePath, region.symbolName),
53
+ publicKey(region.sourcePath, region.exportedName)
54
+ ]).filter(Boolean));
55
+ for (const symbol of semanticIndex?.symbols ?? []) {
56
+ if (symbol?.kind !== 'export') continue;
57
+ const path = symbol.definitionSpan?.path;
58
+ for (const name of [symbol.name, symbol.metadata?.localName, symbol.metadata?.exportedName]) {
59
+ if (name && !String(name).startsWith('{')) keys.add(publicKey(path, name));
60
+ }
61
+ }
62
+ return keys;
63
+ }
64
+
65
+ function uniqueRecords(records) {
66
+ const seen = new Set();
67
+ return records.filter((record) => {
68
+ const key = record.id ?? JSON.stringify(record);
69
+ if (seen.has(key)) return false;
70
+ seen.add(key);
71
+ return true;
72
+ });
73
+ }
74
+
75
+ function attachCompilerReferenceSiteEvidence(references, compilerSites) {
76
+ if (!compilerSites.size) return references;
77
+ return references.map((reference) => {
78
+ const candidates = uniqueCompilerCandidates(compilerSites.get(compilerReferenceSiteKey(reference.sourceSpan)) ?? []);
79
+ if (!candidates.length) return reference;
80
+ if (candidates.length > 1) return blockedCompilerReference(reference, candidates, CompilerReferenceAmbiguousReason);
81
+ const mismatchReason = compilerReferenceLexicalMismatchReason(reference, candidates[0]);
82
+ if (mismatchReason) return blockedCompilerReference(reference, candidates, mismatchReason);
83
+ return passedCompilerReference(reference, candidates[0]);
84
+ });
85
+ }
86
+
87
+ function passedCompilerReference(reference, candidate) {
88
+ const proofHash = compilerReferenceProofHash('frontier.lang.projectScopeCompilerReferenceSiteProof', reference, [candidate]);
89
+ return compactRecord({
90
+ ...reference,
91
+ ...compilerReferenceFields(candidate),
92
+ compilerReferenceStatus: 'passed',
93
+ compilerReferenceProofHash: proofHash,
94
+ signatureHash: hashSemanticValue({
95
+ kind: 'frontier.lang.projectScopeReferenceSignatureCompilerProof',
96
+ reference: reference.signatureHash,
97
+ compilerReferenceProofHash: proofHash
98
+ })
99
+ });
100
+ }
101
+
102
+ function blockedCompilerReference(reference, candidates, reasonCode) {
103
+ const reasonCodes = uniqueStrings([...(reference.reasonCodes ?? []), reasonCode]);
104
+ const proofHash = compilerReferenceProofHash('frontier.lang.projectScopeCompilerReferenceSiteBlocker', reference, candidates, reasonCodes);
105
+ return compactRecord({
106
+ ...reference,
107
+ ...(candidates.length === 1 ? compilerReferenceFields(candidates[0]) : {}),
108
+ status: 'blocked',
109
+ reasonCodes,
110
+ compilerReferenceStatus: 'blocked',
111
+ compilerReferenceReasonCodes: [reasonCode],
112
+ compilerReferenceCandidates: candidates.slice(0, 6).map(compilerReferenceCandidateSummary),
113
+ compilerReferenceProofHash: proofHash,
114
+ signatureHash: hashSemanticValue({
115
+ kind: 'frontier.lang.projectScopeReferenceSignatureCompilerBlocker',
116
+ reference: reference.signatureHash,
117
+ compilerReferenceProofHash: proofHash,
118
+ reasonCodes
119
+ })
120
+ });
121
+ }
122
+
123
+ function compilerReferenceLexicalMismatchReason(reference, candidate) {
124
+ if (candidate.compilerSymbol?.aliased === true && reference.importAlias !== true) {
125
+ return CompilerReferenceLexicalMismatchReason;
126
+ }
127
+ if (candidate.compilerSymbol?.aliased === true && reference.importAlias === true) {
128
+ const compilerTargetName = candidate.compilerSymbol?.targetName;
129
+ const lexicalTargetNames = uniqueStrings([
130
+ reference.resolvedBindingName,
131
+ reference.resolvedExportName,
132
+ reference.importedName
133
+ ]);
134
+ if (compilerTargetName && lexicalTargetNames.length && !lexicalTargetNames.includes(compilerTargetName)) {
135
+ return CompilerReferenceImportAliasTargetMismatchReason;
136
+ }
137
+ }
138
+ return undefined;
139
+ }
140
+
141
+ function compilerReferenceSiteIndex(semanticIndex) {
142
+ const occurrences = new Map((semanticIndex?.occurrences ?? []).map((occurrence) => [occurrence.id, occurrence]));
143
+ const relations = groupBy((semanticIndex?.relations ?? []).filter((relation) => relation?.predicate === 'references'), 'sourceId');
144
+ const facts = groupBy((semanticIndex?.facts ?? []).filter((fact) => fact?.predicate === 'compilerSymbolReference'), 'subjectId');
145
+ const result = new Map();
146
+ for (const occurrence of occurrences.values()) {
147
+ const occurrenceRelations = relations.get(occurrence.id) ?? [];
148
+ const occurrenceFacts = facts.get(occurrence.id) ?? [];
149
+ if (!occurrence.metadata?.compilerReference && !occurrenceFacts.length) continue;
150
+ const key = compilerReferenceSiteKey(occurrence.span);
151
+ if (!key) continue;
152
+ const symbolIds = uniqueStrings([occurrence.symbolId, ...occurrenceRelations.map((relation) => relation.targetId), ...occurrenceFacts.map((fact) => fact.objectId)]);
153
+ for (const symbolId of symbolIds) {
154
+ const fact = occurrenceFacts.find((item) => item.objectId === symbolId) ?? occurrenceFacts[0];
155
+ const relationEvidenceIds = occurrenceRelations.filter((relation) => relation.targetId === symbolId).flatMap((relation) => relation.evidenceIds ?? []);
156
+ addCompilerReferenceSite(result, key, compactRecord({
157
+ occurrenceId: occurrence.id,
158
+ symbolId,
159
+ compilerSymbol: objectValue(fact?.value ?? occurrence.metadata?.compilerSymbol),
160
+ compilerSymbolIdentityHash: fact?.value?.identityHash,
161
+ evidenceIds: uniqueStrings([...relationEvidenceIds, ...(fact?.evidenceIds ?? [])])
162
+ }));
163
+ }
164
+ }
165
+ return result;
166
+ }
167
+
168
+ function addCompilerReferenceSite(result, key, record) {
169
+ if (!record.symbolId) return;
170
+ result.set(key, [...(result.get(key) ?? []), record]);
171
+ }
172
+
173
+ function compilerReferenceFields(candidate) {
174
+ return compactRecord({
175
+ compilerReferenceSymbolId: candidate.symbolId,
176
+ compilerReferenceIdentityHash: candidate.compilerSymbolIdentityHash,
177
+ compilerReferenceFullyQualifiedName: candidate.compilerSymbol?.fullyQualifiedName,
178
+ compilerReferenceLocalName: candidate.compilerSymbol?.localName,
179
+ compilerReferenceTargetName: candidate.compilerSymbol?.targetName,
180
+ compilerReferenceAliased: candidate.compilerSymbol?.aliased,
181
+ compilerReferenceEvidenceIds: candidate.evidenceIds?.length ? candidate.evidenceIds : undefined
182
+ });
183
+ }
184
+
185
+ function compilerReferenceCandidateSummary(candidate) {
186
+ return compilerReferenceFields(candidate);
187
+ }
188
+
189
+ function compilerReferenceProofHash(kind, reference, candidates, reasonCodes = undefined) {
190
+ return hashSemanticValue({
191
+ kind,
192
+ reference: reference.signatureHash,
193
+ sourcePath: reference.sourcePath,
194
+ sourceSpan: reference.sourceSpan ? {
195
+ path: reference.sourceSpan.path,
196
+ startLine: reference.sourceSpan.startLine,
197
+ startColumn: reference.sourceSpan.startColumn,
198
+ endLine: reference.sourceSpan.endLine,
199
+ endColumn: reference.sourceSpan.endColumn
200
+ } : undefined,
201
+ candidates: candidates.map(compilerReferenceCandidateSummary),
202
+ reasonCodes
203
+ });
204
+ }
205
+
206
+ function compilerReferenceSiteKey(span) {
207
+ if (!span?.path || !Number.isInteger(span.startLine) || !Number.isInteger(span.startColumn) || !Number.isInteger(span.endLine) || !Number.isInteger(span.endColumn)) return undefined;
208
+ return [span.path, span.startLine, span.startColumn, span.endLine, span.endColumn].join('#');
209
+ }
210
+
211
+ function uniqueCompilerCandidates(candidates) {
212
+ const seen = new Set();
213
+ return candidates.filter((candidate) => {
214
+ const key = `${candidate.symbolId}\0${candidate.compilerSymbolIdentityHash ?? ''}`;
215
+ if (seen.has(key)) return false;
216
+ seen.add(key);
217
+ return true;
218
+ });
219
+ }
220
+
221
+ function groupBy(records, field) {
222
+ const result = new Map();
223
+ for (const record of records) {
224
+ const key = record?.[field];
225
+ if (key) result.set(key, [...(result.get(key) ?? []), record]);
226
+ }
227
+ return result;
228
+ }
229
+
230
+ function objectValue(value) {
231
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
232
+ }
233
+
234
+ function uniqueStrings(values) {
235
+ return [...new Set(values.filter((value) => typeof value === 'string' && value.length > 0))];
236
+ }
237
+
238
+ export { createProjectScopeUseDefRecords };
@@ -0,0 +1,104 @@
1
+ import { hashSemanticValue } from '@shapeshift-labs/frontier-lang-kernel';
2
+ import { idFragment } from '../../native-import-utils.js';
3
+ import { namespaceOverlap, rangeKey, uniqueStrings } from '../../js-ts-semantic-scope-use-def-utils.js';
4
+ import { bindingRecords, closureCaptureEvidence, compactRecord, semanticSpanForHash, sourceSpanForRange } from './projectSymbolGraphScopeUseDefRecordBuilders.js';
5
+ import { nearestPublicOwnerForOffset } from './projectSymbolGraphScopeUseDefOwners.js';
6
+ import { normalizeStructuralScopeEvidence, structuralScopeEvidenceForImport } from './projectSymbolGraphScopeUseDefStructuralNormalize.js';
7
+
8
+ function structuralScopeRecordsForImport(imported, context) {
9
+ const evidence = structuralScopeEvidenceForImport(imported);
10
+ if (!evidence) return undefined;
11
+ const normalized = normalizeStructuralScopeEvidence(evidence);
12
+ if (!normalized.bindingInputs.length && !normalized.referenceInputs.length) return undefined;
13
+ const bindings = bindingRecords(normalized.bindingInputs, context);
14
+ const bindingIndex = structuralBindingIndex(normalized.bindingInputs, bindings);
15
+ const references = structuralReferenceRecords(normalized.referenceInputs, bindings, bindingIndex, context);
16
+ return {
17
+ scopeBindingRecords: bindings,
18
+ scopeReferenceRecords: references
19
+ };
20
+ }
21
+
22
+ function structuralReferenceRecords(references, bindings, bindingIndex, context) {
23
+ const bindingKeys = new Set(bindings.map((binding) => `${binding.start}:${binding.end}`));
24
+ return references.flatMap((reference, index) => {
25
+ if (bindingKeys.has(rangeKey(reference)) && reference.includeDeclarationReference !== true) return [];
26
+ const binding = structuralBindingForReference(reference, bindings, bindingIndex);
27
+ const sourceSpan = sourceSpanForRange(context, reference.start, reference.end);
28
+ const semanticSpan = semanticSpanForHash(sourceSpan);
29
+ const publicOwner = nearestPublicOwnerForOffset(context.publicOwners, reference.start);
30
+ const publicOwnerName = binding?.publicOwnerName ?? publicOwner?.name;
31
+ const closureCapture = closureCaptureEvidence(reference.depth, binding, publicOwnerName);
32
+ return [compactRecord({
33
+ id: `scope_ref_${idFragment(context.sourcePath)}_external_${index + 1}`,
34
+ name: reference.name,
35
+ namespace: reference.namespace,
36
+ namespaces: reference.namespaces,
37
+ sourcePath: context.sourcePath,
38
+ sourceHash: context.sourceHash,
39
+ sourceSpan,
40
+ start: reference.start,
41
+ end: reference.end,
42
+ depth: reference.depth,
43
+ scopeEvidenceSource: reference.scopeEvidenceSource,
44
+ scopeEvidenceKind: reference.scopeEvidenceKind,
45
+ scopeType: reference.scopeType,
46
+ referenceKind: reference.referenceKind,
47
+ evidenceIds: reference.evidenceIds?.length ? reference.evidenceIds : undefined,
48
+ bindingId: binding?.id,
49
+ bindingName: binding?.name ?? reference.resolvedName,
50
+ bindingKind: binding?.bindingKind,
51
+ bindingOrdinal: binding?.ordinal,
52
+ closure: Boolean(closureCapture) || undefined,
53
+ closureDepthDelta: closureCapture?.closureDepthDelta,
54
+ closureBindingDepth: closureCapture?.closureBindingDepth,
55
+ closureOwnerName: closureCapture?.closureOwnerName,
56
+ closureCaptureHash: closureCapture?.closureCaptureHash,
57
+ publicContract: (binding?.publicContract || Boolean(publicOwnerName)) || undefined,
58
+ publicOwnerName,
59
+ status: binding ? undefined : 'unresolved',
60
+ reasonCodes: binding ? undefined : ['scope-manager-unresolved-reference'],
61
+ signatureHash: hashSemanticValue({
62
+ kind: 'frontier.lang.projectScopeReferenceSignature',
63
+ name: reference.name,
64
+ namespace: reference.namespace,
65
+ bindingId: binding?.id,
66
+ sourceSpan: semanticSpan,
67
+ evidenceSource: reference.scopeEvidenceSource,
68
+ closureCaptureHash: closureCapture?.closureCaptureHash,
69
+ closureDepthDelta: closureCapture?.closureDepthDelta,
70
+ closureOwnerName: closureCapture?.closureOwnerName
71
+ })
72
+ })];
73
+ });
74
+ }
75
+
76
+ function structuralBindingIndex(inputs, records) {
77
+ const byExternalId = new Map();
78
+ const byNameRange = new Map();
79
+ for (let index = 0; index < records.length; index += 1) {
80
+ const input = inputs[index];
81
+ const record = records[index];
82
+ for (const externalId of uniqueStrings([input?.externalBindingId, record.externalBindingId, input?.bindingId])) byExternalId.set(externalId, record);
83
+ byNameRange.set(nameRangeKey(record.name, record.start, record.end), record);
84
+ }
85
+ return { byExternalId, byNameRange };
86
+ }
87
+
88
+ function structuralBindingForReference(reference, bindings, bindingIndex) {
89
+ for (const externalId of uniqueStrings([reference.externalBindingId, reference.bindingId, reference.resolvedBindingId])) {
90
+ const binding = bindingIndex.byExternalId.get(externalId);
91
+ if (binding) return binding;
92
+ }
93
+ const byResolvedRange = bindingIndex.byNameRange.get(nameRangeKey(reference.resolvedName, reference.resolvedStart, reference.resolvedEnd));
94
+ if (byResolvedRange) return byResolvedRange;
95
+ return bindings
96
+ .filter((binding) => binding.name === (reference.resolvedName ?? reference.name) && namespaceOverlap(binding.namespaces, reference.namespaces))
97
+ .sort((left, right) => Math.abs(left.depth - reference.depth) - Math.abs(right.depth - reference.depth) || right.start - left.start)[0];
98
+ }
99
+
100
+ function nameRangeKey(name, start, end) {
101
+ return name && Number.isInteger(start) && Number.isInteger(end) ? `${name}:${start}:${end}` : undefined;
102
+ }
103
+
104
+ export { structuralScopeRecordsForImport };