@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,242 @@
1
+ import { normalizeNamespaces, typeNamespace, uniqueStrings, valueNamespace } from '../../js-ts-semantic-scope-use-def-utils.js';
2
+
3
+ function structuralScopeEvidenceForImport(imported) {
4
+ const candidates = [
5
+ imported?.metadata?.scopeUseDefEvidence,
6
+ imported?.metadata?.estreeScopeEvidence,
7
+ imported?.metadata?.estreeScopeManager,
8
+ imported?.metadata?.scopeManager,
9
+ imported?.nativeAst?.metadata?.scopeUseDefEvidence,
10
+ imported?.nativeAst?.metadata?.estreeScopeEvidence,
11
+ imported?.nativeAst?.metadata?.estreeScopeManager,
12
+ imported?.nativeAst?.metadata?.scopeManager,
13
+ imported?.universalAst?.metadata?.scopeUseDefEvidence,
14
+ imported?.universalAst?.metadata?.estreeScopeEvidence,
15
+ imported?.universalAst?.metadata?.estreeScopeManager,
16
+ imported?.universalAst?.metadata?.scopeManager
17
+ ];
18
+ for (const candidate of candidates) {
19
+ const evidence = unwrapStructuralScopeEvidence(candidate);
20
+ if (evidence) return evidence;
21
+ }
22
+ return undefined;
23
+ }
24
+
25
+ function unwrapStructuralScopeEvidence(candidate) {
26
+ if (!candidate || typeof candidate !== 'object') return undefined;
27
+ if (Array.isArray(candidate.scopes) || Array.isArray(candidate.bindings) || Array.isArray(candidate.references) || Array.isArray(candidate.variables)) return candidate;
28
+ return unwrapStructuralScopeEvidence(candidate.scopeManager)
29
+ ?? unwrapStructuralScopeEvidence(candidate.manager)
30
+ ?? unwrapStructuralScopeEvidence(candidate.scopeUseDefEvidence);
31
+ }
32
+
33
+ function normalizeStructuralScopeEvidence(evidence) {
34
+ const evidenceContext = {
35
+ source: firstString(evidence.source, evidence.format, evidence.adapterId, evidence.parser, 'external-scope-manager'),
36
+ kind: evidenceKind(evidence),
37
+ evidenceIds: uniqueStrings([...(evidence.evidenceIds ?? []), evidence.evidenceId])
38
+ };
39
+ const bindingInputs = [];
40
+ const referenceInputs = [];
41
+ for (const binding of evidence.bindings ?? []) {
42
+ const normalized = normalizeStructuralBindingInput(binding, evidenceContext, bindingInputs.length);
43
+ if (normalized) bindingInputs.push(normalized);
44
+ }
45
+ for (const reference of evidence.references ?? []) {
46
+ const normalized = normalizeStructuralReferenceInput(reference, evidenceContext, referenceInputs.length);
47
+ if (normalized) referenceInputs.push(normalized);
48
+ }
49
+ for (const variable of evidence.variables ?? []) {
50
+ const normalized = normalizeScopeVariableBinding(variable, {}, evidenceContext, bindingInputs.length, undefined);
51
+ if (normalized) bindingInputs.push(normalized);
52
+ }
53
+ normalizeScopes(evidence, evidenceContext, bindingInputs, referenceInputs);
54
+ return { bindingInputs: uniqueStructuralBindings(bindingInputs), referenceInputs };
55
+ }
56
+
57
+ function normalizeScopes(evidence, evidenceContext, bindingInputs, referenceInputs) {
58
+ const scopes = Array.isArray(evidence.scopes) ? evidence.scopes : [];
59
+ const variableExternalIds = new Map();
60
+ for (let scopeIndex = 0; scopeIndex < scopes.length; scopeIndex += 1) {
61
+ const scope = scopes[scopeIndex];
62
+ const variables = Array.isArray(scope?.variables) ? scope.variables : [];
63
+ for (let variableIndex = 0; variableIndex < variables.length; variableIndex += 1) {
64
+ const variable = variables[variableIndex];
65
+ const normalized = normalizeScopeVariableBinding(variable, scope, evidenceContext, bindingInputs.length, `${scopeIndex + 1}:${variableIndex + 1}`);
66
+ if (!normalized) continue;
67
+ bindingInputs.push(normalized);
68
+ variableExternalIds.set(variable, normalized.externalBindingId);
69
+ }
70
+ }
71
+ for (let scopeIndex = 0; scopeIndex < scopes.length; scopeIndex += 1) {
72
+ const scope = scopes[scopeIndex];
73
+ for (const reference of [...(scope?.references ?? []), ...(scope?.through ?? [])]) {
74
+ const normalized = normalizeScopeManagerReference(reference, scope, evidenceContext, referenceInputs.length, variableExternalIds);
75
+ if (normalized) referenceInputs.push(normalized);
76
+ }
77
+ }
78
+ }
79
+
80
+ function normalizeStructuralBindingInput(binding, evidenceContext, index) {
81
+ if (!binding || typeof binding !== 'object') return undefined;
82
+ const range = sourceRange(binding);
83
+ const name = firstString(binding.name, binding.localName, binding.identifier?.name, binding.id);
84
+ if (!name || !range) return undefined;
85
+ const kind = bindingKindForExternal(binding.bindingKind, binding.kind, binding.definitionType, binding.defType);
86
+ return {
87
+ kind,
88
+ name,
89
+ start: range.start,
90
+ end: range.end,
91
+ depth: numberOr(binding.depth, 0),
92
+ namespaces: namespacesForExternal(binding, kind),
93
+ scopeEvidenceSource: firstString(binding.scopeEvidenceSource, evidenceContext.source),
94
+ scopeEvidenceKind: firstString(binding.scopeEvidenceKind, evidenceContext.kind),
95
+ scopeType: firstString(binding.scopeType, binding.variableScopeType),
96
+ definitionType: firstString(binding.definitionType, binding.defType, binding.kind),
97
+ externalBindingId: firstString(binding.externalBindingId, binding.bindingId, binding.id, `external:${index + 1}:${name}:${range.start}:${range.end}`),
98
+ evidenceIds: uniqueStrings([...(binding.evidenceIds ?? []), binding.evidenceId, ...evidenceContext.evidenceIds])
99
+ };
100
+ }
101
+
102
+ function normalizeScopeVariableBinding(variable, scope, evidenceContext, index, fallbackId) {
103
+ if (!variable || typeof variable !== 'object') return undefined;
104
+ const definition = Array.isArray(variable.defs) ? variable.defs.find((def) => sourceRange(def?.name ?? def?.node ?? def)) : undefined;
105
+ const identifier = definition?.name ?? (Array.isArray(variable.identifiers) ? variable.identifiers.find(sourceRange) : undefined) ?? variable.identifier ?? variable;
106
+ const range = sourceRange(identifier);
107
+ const name = firstString(variable.name, identifier?.name);
108
+ if (!name || !range) return undefined;
109
+ const definitionType = firstString(definition?.type, variable.definitionType, variable.kind);
110
+ const kind = bindingKindForExternal(variable.bindingKind, variable.kind, definitionType, variable.defType);
111
+ return {
112
+ kind,
113
+ name,
114
+ start: range.start,
115
+ end: range.end,
116
+ depth: numberOr(variable.depth, numberOr(scope?.depth, 0)),
117
+ namespaces: namespacesForExternal(variable, kind, definitionType),
118
+ scopeEvidenceSource: firstString(variable.scopeEvidenceSource, evidenceContext.source),
119
+ scopeEvidenceKind: firstString(variable.scopeEvidenceKind, evidenceContext.kind),
120
+ scopeType: firstString(variable.scopeType, scope?.type),
121
+ definitionType,
122
+ externalBindingId: firstString(variable.externalBindingId, variable.bindingId, variable.id, fallbackId ? `scope-manager:${fallbackId}:${name}:${range.start}:${range.end}` : undefined, `external:${index + 1}:${name}:${range.start}:${range.end}`),
123
+ evidenceIds: uniqueStrings([...(variable.evidenceIds ?? []), variable.evidenceId, ...evidenceContext.evidenceIds])
124
+ };
125
+ }
126
+
127
+ function normalizeStructuralReferenceInput(reference, evidenceContext, index) {
128
+ if (!reference || typeof reference !== 'object') return undefined;
129
+ const identifier = reference.identifier ?? reference.node ?? reference;
130
+ const range = sourceRange(reference) ?? sourceRange(identifier);
131
+ const name = firstString(reference.name, identifier?.name);
132
+ if (!name || !range) return undefined;
133
+ const namespace = referenceNamespace(reference);
134
+ const resolvedRange = sourceRange(reference.resolvedRange)
135
+ ?? sourceRange(reference.resolved?.defs?.[0]?.name)
136
+ ?? sourceRange(reference.resolved?.identifiers?.[0]);
137
+ return {
138
+ name,
139
+ namespace,
140
+ namespaces: [namespace],
141
+ start: range.start,
142
+ end: range.end,
143
+ depth: numberOr(reference.depth, 0),
144
+ externalBindingId: firstString(reference.externalBindingId, reference.bindingId, reference.resolvedBindingId, reference.resolved?.externalBindingId, reference.resolved?.id),
145
+ resolvedName: firstString(reference.bindingName, reference.resolvedName, reference.resolved?.name),
146
+ resolvedStart: resolvedRange?.start,
147
+ resolvedEnd: resolvedRange?.end,
148
+ scopeEvidenceSource: firstString(reference.scopeEvidenceSource, evidenceContext.source),
149
+ scopeEvidenceKind: firstString(reference.scopeEvidenceKind, evidenceContext.kind),
150
+ scopeType: firstString(reference.scopeType),
151
+ referenceKind: firstString(reference.referenceKind, reference.writeExpr ? 'write' : 'read'),
152
+ evidenceIds: uniqueStrings([...(reference.evidenceIds ?? []), reference.evidenceId, ...evidenceContext.evidenceIds]),
153
+ ordinal: index + 1
154
+ };
155
+ }
156
+
157
+ function normalizeScopeManagerReference(reference, scope, evidenceContext, index, variableExternalIds) {
158
+ const normalized = normalizeStructuralReferenceInput({
159
+ ...reference,
160
+ depth: numberOr(reference?.depth, numberOr(scope?.depth, 0)),
161
+ scopeType: firstString(reference?.scopeType, scope?.type),
162
+ externalBindingId: variableExternalIds.get(reference?.resolved) ?? reference?.externalBindingId ?? reference?.bindingId ?? reference?.resolvedBindingId
163
+ }, evidenceContext, index);
164
+ if (!normalized) return undefined;
165
+ const resolvedRange = sourceRange(reference?.resolved?.defs?.[0]?.name) ?? sourceRange(reference?.resolved?.identifiers?.[0]);
166
+ return {
167
+ ...normalized,
168
+ externalBindingId: normalized.externalBindingId ?? variableExternalIds.get(reference?.resolved),
169
+ resolvedName: normalized.resolvedName ?? firstString(reference?.resolved?.name),
170
+ resolvedStart: normalized.resolvedStart ?? resolvedRange?.start,
171
+ resolvedEnd: normalized.resolvedEnd ?? resolvedRange?.end
172
+ };
173
+ }
174
+
175
+ function uniqueStructuralBindings(bindings) {
176
+ const seen = new Set();
177
+ return bindings.filter((binding) => {
178
+ const key = nameRangeKey(binding.name, binding.start, binding.end);
179
+ if (seen.has(key)) return false;
180
+ seen.add(key);
181
+ return true;
182
+ });
183
+ }
184
+
185
+ function evidenceKind(evidence) {
186
+ if (firstString(evidence.kind)) return firstString(evidence.kind);
187
+ if (Array.isArray(evidence.scopes)) return 'estree-scope-manager';
188
+ return 'scope-use-def-records';
189
+ }
190
+
191
+ function bindingKindForExternal(...values) {
192
+ const raw = firstString(...values);
193
+ if (!raw) return 'binding';
194
+ const normalized = raw.replace(/Name$/, '').toLowerCase();
195
+ if (normalized === 'function' || normalized === 'functionname') return 'function';
196
+ if (normalized === 'classname' || normalized === 'class') return 'class';
197
+ if (normalized === 'interfacename' || normalized === 'interface') return 'interface';
198
+ if (normalized === 'type' || normalized === 'typeparameter') return normalized === 'typeparameter' ? 'type-parameter' : 'type';
199
+ if (normalized === 'tsenum' || normalized === 'tsenumname' || normalized === 'enum') return 'enum';
200
+ if (normalized === 'tsmodule' || normalized === 'tsmodulename' || normalized === 'namespace' || normalized === 'module') return 'namespace';
201
+ if (normalized === 'importbinding' || normalized === 'import') return 'import';
202
+ if (normalized === 'parameter' || normalized === 'param') return 'param';
203
+ if (normalized === 'catchclause' || normalized === 'catch') return 'catch';
204
+ if (normalized === 'variable' || normalized === 'const' || normalized === 'let' || normalized === 'var') return raw;
205
+ return raw;
206
+ }
207
+
208
+ function namespacesForExternal(record, kind, definitionType) {
209
+ const explicit = normalizeNamespaces(record.namespaces ?? record.namespace);
210
+ if (record.namespaces || record.namespace) return explicit;
211
+ if (record.isTypeVariable === true && record.isValueVariable !== true) return [typeNamespace];
212
+ if (record.isValueVariable === true && record.isTypeVariable !== true) return [valueNamespace];
213
+ if (record.isTypeVariable === true && record.isValueVariable === true) return [valueNamespace, typeNamespace];
214
+ if (record.typeOnly === true || record.isTypeOnly === true) return [typeNamespace];
215
+ const normalized = firstString(definitionType, kind)?.toLowerCase();
216
+ if (normalized === 'type' || normalized === 'interface' || normalized === 'interfacename' || normalized === 'typeparameter') return [typeNamespace];
217
+ if (normalized === 'class' || normalized === 'classname' || normalized === 'enum' || normalized === 'tsenumname' || normalized === 'namespace' || normalized === 'module' || normalized === 'tsmodulename') return [valueNamespace, typeNamespace];
218
+ return [valueNamespace];
219
+ }
220
+
221
+ function referenceNamespace(reference) {
222
+ if (reference.namespace === typeNamespace || (reference.isTypeReference === true && reference.isValueReference !== true) || reference.typeOnly === true) return typeNamespace;
223
+ return valueNamespace;
224
+ }
225
+
226
+ function sourceRange(value) {
227
+ if (!value) return undefined;
228
+ if (Array.isArray(value) && Number.isInteger(value[0]) && Number.isInteger(value[1])) return { start: value[0], end: value[1] };
229
+ if (Array.isArray(value.range) && Number.isInteger(value.range[0]) && Number.isInteger(value.range[1])) return { start: value.range[0], end: value.range[1] };
230
+ if (Number.isInteger(value.start) && Number.isInteger(value.end)) return { start: value.start, end: value.end };
231
+ if (Number.isInteger(value.sourceSpan?.start) && Number.isInteger(value.sourceSpan?.end)) return { start: value.sourceSpan.start, end: value.sourceSpan.end };
232
+ return undefined;
233
+ }
234
+
235
+ function numberOr(value, fallback) { return Number.isInteger(value) ? value : fallback; }
236
+ function nameRangeKey(name, start, end) { return name && Number.isInteger(start) && Number.isInteger(end) ? `${name}:${start}:${end}` : undefined; }
237
+ function firstString(...values) {
238
+ for (const value of values) if (value !== undefined && value !== null && String(value)) return String(value);
239
+ return undefined;
240
+ }
241
+
242
+ export { normalizeStructuralScopeEvidence, structuralScopeEvidenceForImport };
@@ -0,0 +1,107 @@
1
+ import { hashSemanticValue } from '@shapeshift-labs/frontier-lang-kernel';
2
+
3
+ function directUseHashesByBinding(bindings, references) {
4
+ const referencesByBinding = groupBy(references, 'bindingId');
5
+ return new Map(bindings.map((binding) => [binding.id, hashSemanticValue({
6
+ kind: 'frontier.lang.projectScopeBindingLocalUseHash',
7
+ binding: binding.signatureHash,
8
+ references: (referencesByBinding.get(binding.id) ?? []).map((reference) => reference.signatureHash).sort()
9
+ })]));
10
+ }
11
+
12
+ function finalizeBindingUseHashes(bindings, references) {
13
+ const referencesByBinding = groupBy(references, 'bindingId');
14
+ const ownerReferencesByKey = groupByKey(references.filter((reference) => reference.publicOwnerName), (reference) => localKey(reference.sourcePath, reference.publicOwnerName));
15
+ return bindings.map((binding) => bindingWithUseHash(binding, referencesByBinding.get(binding.id) ?? [], ownerReferencesByKey.get(localKey(binding.sourcePath, binding.name)) ?? []));
16
+ }
17
+
18
+ function bindingWithUseHash(binding, references, ownerReferences) {
19
+ const referenceUseHashes = references.map(referenceUseHash).sort();
20
+ const closureReferences = references.filter((reference) => reference.closure);
21
+ const closureCaptureUseHashes = closureReferences.map(closureCaptureUseHash).sort();
22
+ const scopeUseDefReasonCodes = uniqueStrings([
23
+ ...(binding.scopeUseDefReasonCodes ?? []),
24
+ ...references.flatMap((reference) => reference.reasonCodes ?? []),
25
+ ...ownerReferences.flatMap((reference) => reference.reasonCodes ?? [])
26
+ ]);
27
+ const closureUseHash = closureReferences.length ? hashSemanticValue({
28
+ kind: 'frontier.lang.projectScopeBindingClosureUseHash',
29
+ binding: binding.signatureHash,
30
+ references: closureReferences.map(referenceUseHash).sort(),
31
+ captures: closureCaptureUseHashes
32
+ }) : undefined;
33
+ const closureCaptureHash = closureReferences.length ? hashSemanticValue({
34
+ kind: 'frontier.lang.projectScopeBindingClosureCaptureHash',
35
+ binding: binding.signatureHash,
36
+ captures: closureCaptureUseHashes
37
+ }) : undefined;
38
+ const publicOwnerUseHash = binding.publicContract && ownerReferences.length ? hashSemanticValue({
39
+ kind: 'frontier.lang.projectScopePublicOwnerUseHash',
40
+ binding: binding.signatureHash,
41
+ references: ownerReferences.map(referenceUseHash).sort()
42
+ }) : undefined;
43
+ return compactRecord({
44
+ ...binding,
45
+ publicOwnerUseHash,
46
+ closureUseHash,
47
+ closureCaptureHash,
48
+ scopeUseDefStatus: scopeUseDefReasonCodes.length ? 'blocked' : undefined,
49
+ scopeUseDefReasonCodes: scopeUseDefReasonCodes.length ? scopeUseDefReasonCodes : undefined,
50
+ referenceCount: references.length,
51
+ closureReferenceCount: closureReferences.length,
52
+ useHash: hashSemanticValue({
53
+ kind: 'frontier.lang.projectScopeBindingUseHash',
54
+ binding: binding.signatureHash,
55
+ references: referenceUseHashes,
56
+ closureUseHash,
57
+ closureCaptureHash,
58
+ publicOwnerUseHash,
59
+ aliasHash: binding.aliasHash,
60
+ resolvedUseHash: binding.resolvedUseHash,
61
+ scopeUseDefReasonCodes: scopeUseDefReasonCodes.length ? scopeUseDefReasonCodes : undefined
62
+ })
63
+ });
64
+ }
65
+
66
+ function closureCaptureUseHash(reference) {
67
+ return reference.closureCaptureHash ? hashSemanticValue({
68
+ kind: 'frontier.lang.projectScopeReferenceClosureCaptureUseHash',
69
+ reference: referenceUseHash(reference),
70
+ closureCaptureHash: reference.closureCaptureHash,
71
+ closureDepthDelta: reference.closureDepthDelta,
72
+ closureBindingDepth: reference.closureBindingDepth,
73
+ closureOwnerName: reference.closureOwnerName
74
+ }) : referenceUseHash(reference);
75
+ }
76
+
77
+ function referenceUseHash(reference) {
78
+ return reference.resolvedUseHash ? hashSemanticValue({
79
+ kind: 'frontier.lang.projectScopeReferenceUseHash',
80
+ reference: reference.signatureHash,
81
+ resolvedUseHash: reference.resolvedUseHash
82
+ }) : reference.signatureHash;
83
+ }
84
+
85
+ function groupBy(records, field) {
86
+ const result = new Map();
87
+ for (const record of records) {
88
+ const key = record?.[field];
89
+ if (key) result.set(key, [...(result.get(key) ?? []), record]);
90
+ }
91
+ return result;
92
+ }
93
+
94
+ function groupByKey(records, keyFn) {
95
+ const result = new Map();
96
+ for (const record of records) {
97
+ const key = keyFn(record);
98
+ if (key) result.set(key, [...(result.get(key) ?? []), record]);
99
+ }
100
+ return result;
101
+ }
102
+
103
+ function localKey(sourcePath, name) { return sourcePath && name ? `${sourcePath}\0${name}` : undefined; }
104
+ function compactRecord(record) { return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined)); }
105
+ function uniqueStrings(values) { return [...new Set(values.filter((value) => typeof value === 'string' && value.length > 0))]; }
106
+
107
+ export { directUseHashesByBinding, finalizeBindingUseHashes };
@@ -0,0 +1,111 @@
1
+ import { classifySourceMapGeneratedBoundary } from './sourceMapGeneratedBoundaryGate.js';
2
+
3
+ function sourceMapsForImport(imported) {
4
+ return uniqueRecords([
5
+ ...(imported?.sourceMaps ?? []),
6
+ ...(imported?.universalAst?.sourceMaps ?? [])
7
+ ]);
8
+ }
9
+
10
+ function sourceMapGeneratedBoundaryGateForImport(imported, sourceMaps, context) {
11
+ const generatedBoundarySourceMaps = sourceMaps.filter(sourceMapHasGeneratedBoundaryEvidence);
12
+ const derived = generatedBoundarySourceMaps.length
13
+ ? classifySourceMapGeneratedBoundary(generatedBoundarySourceMaps, {
14
+ sourceLanguage: context.preservation?.language ?? imported?.language,
15
+ target: imported?.target,
16
+ outputMode: imported?.metadata?.outputMode,
17
+ projectionMode: imported?.metadata?.projectionMode
18
+ })
19
+ : undefined;
20
+ const existing = firstGeneratedBoundaryGate(
21
+ imported?.metadata?.sourceMapGeneratedBoundaryGate,
22
+ imported?.metadata?.projectionReview?.sourceMapGeneratedBoundaryGate,
23
+ ...(sourceMaps ?? []).flatMap((sourceMap) => [
24
+ sourceMap?.metadata?.sourceMapGeneratedBoundaryGate,
25
+ sourceMap?.metadata?.projectionReview?.sourceMapGeneratedBoundaryGate
26
+ ])
27
+ );
28
+ return derived ?? existing;
29
+ }
30
+
31
+ function sourceMapGeneratedBoundaryRecordForSpan(context, span) {
32
+ return span.kind === 'source-map-comment'
33
+ ? sourceMapGeneratedBoundaryRecord(context, { sourceMapComments: 1 })
34
+ : undefined;
35
+ }
36
+
37
+ function sourceMapGeneratedBoundaryRecord(context, summary = {}) {
38
+ const sourceMapCommentCount = summary.sourceMapComments ?? summary.ledger?.sourceMapComments ?? 0;
39
+ const gate = context.generatedBoundaryGate
40
+ ?? (sourceMapCommentCount > 0
41
+ ? classifySourceMapGeneratedBoundary([], { sourceLanguage: context.preservation?.language })
42
+ : undefined);
43
+ if (!gate) return undefined;
44
+ const blockReasonCodes = sourceMapGeneratedBoundaryBlockReasonCodes(gate);
45
+ return compactRecord({
46
+ sourceMapRecordCount: gate.summary?.sourceMaps,
47
+ sourceMapMappingCount: gate.summary?.mappings,
48
+ sourceMapIds: gate.sourceMapIds,
49
+ sourceMapMappingIds: gate.sourceMapMappingIds,
50
+ sourceMapGeneratedBoundaryStatus: gate.status,
51
+ sourceMapGeneratedBoundaryReadiness: gate.readiness,
52
+ sourceMapGeneratedBoundaryAction: gate.action,
53
+ sourceMapGeneratedBoundaryReviewRequired: gate.reviewRequired,
54
+ sourceMapGeneratedBoundaryExactBoundary: gate.exactBoundary,
55
+ sourceMapGeneratedBoundaryOwnershipStatus: gate.generatedBoundaryOwnershipStatus,
56
+ sourceMapGeneratedBoundaryOwnershipKeys: gate.generatedBoundaryOwnershipKeys,
57
+ sourceMapGeneratedBoundaryOwnershipRecords: gate.generatedBoundaryOwnershipRecords,
58
+ sourceMapGeneratedBoundaryReasonCodes: gate.reasonCodes,
59
+ sourceMapGeneratedBoundaryBlockReasonCodes: blockReasonCodes,
60
+ sourceMapGeneratedBoundarySummary: gate.summary,
61
+ sourceMapGeneratedBoundaryInvariant: gate.invariant,
62
+ sourceMapGeneratedBoundaryMissingInvariant: gate.missingInvariant
63
+ });
64
+ }
65
+
66
+ function sourceMapHasGeneratedBoundaryEvidence(sourceMap) {
67
+ return Boolean(
68
+ sourceMap?.targetPath
69
+ || sourceMap?.targetHash
70
+ || sourceMap?.target?.emitPath
71
+ || sourceMap?.metadata?.ecma426SourceMap?.present === true
72
+ || (sourceMap?.mappings ?? []).some((mapping) => mapping?.generatedSpan || mapping?.targetHash)
73
+ );
74
+ }
75
+
76
+ function firstGeneratedBoundaryGate(...values) {
77
+ return values.find((value) => value?.schema === 'frontier.lang.sourceMapGeneratedBoundaryGate.v1'
78
+ || typeof value?.generatedBoundaryOwnershipStatus === 'string');
79
+ }
80
+
81
+ function sourceMapGeneratedBoundaryBlockReasonCodes(gate) {
82
+ if (gate?.status !== 'blocked' && gate?.generatedBoundaryOwnershipStatus !== 'blocked') return [];
83
+ return uniqueStrings([
84
+ gate?.missingInvariant,
85
+ ...(gate?.reasonCodes ?? []).filter((code) => code !== 'ecma-426:source-map-generated-boundary-gate'
86
+ && code !== 'runtime-neutral:source-map-records-only')
87
+ ]);
88
+ }
89
+
90
+ function compactRecord(record) {
91
+ return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
92
+ }
93
+ function uniqueRecords(records) {
94
+ const seen = new Set();
95
+ return records.filter((record) => {
96
+ const key = record.id ?? JSON.stringify(record);
97
+ if (seen.has(key)) return false;
98
+ seen.add(key);
99
+ return true;
100
+ });
101
+ }
102
+ function uniqueStrings(values) {
103
+ return [...new Set((values ?? []).filter((value) => typeof value === 'string' && value.length > 0))];
104
+ }
105
+
106
+ export {
107
+ sourceMapGeneratedBoundaryGateForImport,
108
+ sourceMapGeneratedBoundaryRecord,
109
+ sourceMapGeneratedBoundaryRecordForSpan,
110
+ sourceMapsForImport
111
+ };