rea-agents 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { semanticCapturePosition, semanticEscapeFollowsCapture, semanticBindingPrecedesCapture, } from "./javascriptSemanticMutationInitializers.js";
|
|
3
|
+
import { semanticSlotAtPath } from "./javascriptSemanticSlots.js";
|
|
4
|
+
import { invalidateSemanticEscapedPath, invalidateSemanticMutationPath, } from "./javascriptSemanticMutationValues.js";
|
|
3
5
|
import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
|
|
4
6
|
import { semanticRequireOrigin } from "./javascriptSemanticRequireOrigin.js";
|
|
5
|
-
import {
|
|
6
|
-
import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
|
|
7
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
8
|
+
import { readExactJavaScriptLiteral, semanticStaticPropertyKey, unwrapJavaScriptExpression, } from "./javascriptAstValues.js";
|
|
7
9
|
import { semanticAmbiguousProvenance, semanticLocalProvenance, semanticOriginsProvenance, semanticUnresolvedProvenance, uniqueSemanticOrigins, } from "./javascriptSemanticProvenance.js";
|
|
8
|
-
import {
|
|
10
|
+
import { semanticPrimitiveCandidates as primitiveCandidates, semanticPrimitiveSet as primitiveSet, } from "./javascriptSemanticPrimitives.js";
|
|
9
11
|
import { SEMANTIC_EXPRESSION_DEPTH_LIMIT, SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT, exceedsSemanticPrimitiveAdditionByteBudget, exceedsSemanticTemplateByteBudget, semanticResourceLimitUnknown, semanticResourceLimitReason, } from "./javascriptSemanticResourceLimits.js";
|
|
10
12
|
const primitiveBindingValuesByState = new WeakMap();
|
|
13
|
+
const primitiveExpressionValuesByState = new WeakMap();
|
|
14
|
+
const capturedBindingValuesByState = new WeakMap();
|
|
15
|
+
/** Discard primitive projections evaluated before mutation collection finished. */
|
|
16
|
+
export const clearSemanticPrimitiveBindingValues = (state) => {
|
|
17
|
+
primitiveBindingValuesByState.delete(state);
|
|
18
|
+
capturedBindingValuesByState.delete(state);
|
|
19
|
+
primitiveExpressionValuesByState.delete(state);
|
|
20
|
+
};
|
|
11
21
|
const primitiveBindingValuesFor = (state) => {
|
|
12
22
|
const existing = primitiveBindingValuesByState.get(state);
|
|
13
23
|
if (existing !== undefined)
|
|
@@ -25,13 +35,18 @@ export const evaluateSemanticBinding = (binding, state) => evaluateBinding(bindi
|
|
|
25
35
|
expressionDepth: 0,
|
|
26
36
|
primitiveBindingValues: primitiveBindingValuesFor(state),
|
|
27
37
|
});
|
|
28
|
-
/** Evaluate
|
|
29
|
-
export const evaluateSemanticExpression = (node, state) =>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
/** Evaluate an inert expression, optionally at an earlier reference capture. */
|
|
39
|
+
export const evaluateSemanticExpression = (node, state, capturePoint) => {
|
|
40
|
+
const context = {
|
|
41
|
+
state,
|
|
42
|
+
bindings: new Set(),
|
|
43
|
+
expressionDepth: 0,
|
|
44
|
+
primitiveBindingValues: primitiveBindingValuesFor(state),
|
|
45
|
+
};
|
|
46
|
+
return evaluateExpression(node, capturePoint === undefined
|
|
47
|
+
? context
|
|
48
|
+
: (captureContextAt(capturePoint, context) ?? context));
|
|
49
|
+
};
|
|
35
50
|
/** Follow module provenance through destructuring, members, and aliases. */
|
|
36
51
|
export const evaluateSemanticProvenance = (binding, state) => provenanceForBinding(binding, {
|
|
37
52
|
state,
|
|
@@ -42,6 +57,14 @@ export const evaluateSemanticProvenance = (binding, state) => provenanceForBindi
|
|
|
42
57
|
const evaluateBinding = (binding, context) => {
|
|
43
58
|
if (context.bindings.has(binding.bindingId))
|
|
44
59
|
return { status: "cycle", reason: `Alias cycle at ${binding.name}.` };
|
|
60
|
+
if (context.capturePoint !== undefined &&
|
|
61
|
+
!semanticBindingPrecedesCapture(binding, context.capturePoint, context.state.parentsByNode)) {
|
|
62
|
+
const { capturePoint: _capturePoint, ...liveContext } = context;
|
|
63
|
+
return evaluateBinding(binding, {
|
|
64
|
+
...liveContext,
|
|
65
|
+
primitiveBindingValues: primitiveBindingValuesFor(context.state),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
45
68
|
const cached = context.primitiveBindingValues.get(binding.bindingId);
|
|
46
69
|
if (cached !== undefined)
|
|
47
70
|
return cached;
|
|
@@ -50,6 +73,16 @@ const evaluateBinding = (binding, context) => {
|
|
|
50
73
|
status: "unknown",
|
|
51
74
|
reason: `Binding ${binding.name} has no constant initializer.`,
|
|
52
75
|
};
|
|
76
|
+
if (binding.initializers.some(({ node }) => t.isUpdateExpression(node) ||
|
|
77
|
+
(t.isAssignmentExpression(node) &&
|
|
78
|
+
node.operator !== "=" &&
|
|
79
|
+
node.operator !== "&&=" &&
|
|
80
|
+
node.operator !== "||=" &&
|
|
81
|
+
node.operator !== "??=")))
|
|
82
|
+
return {
|
|
83
|
+
status: "unknown",
|
|
84
|
+
reason: `Binding ${binding.name} has a compound or update write.`,
|
|
85
|
+
};
|
|
53
86
|
if (binding.initializers.length > 1)
|
|
54
87
|
return {
|
|
55
88
|
status: "ambiguous",
|
|
@@ -59,9 +92,24 @@ const evaluateBinding = (binding, context) => {
|
|
|
59
92
|
if (initializer === undefined)
|
|
60
93
|
return { status: "unknown", reason: "Missing binding initializer." };
|
|
61
94
|
const nested = nestedContext(context, binding.bindingId);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
95
|
+
let value = projectValue(evaluateExpression(initializer.node, nested), initializer.projection);
|
|
96
|
+
if (!isPrimitive(value)) {
|
|
97
|
+
const captureContext = primitiveCaptureContext(initializer.node, nested);
|
|
98
|
+
if (captureContext !== undefined) {
|
|
99
|
+
const captured = projectValue(evaluateExpression(initializer.node, captureContext), initializer.projection);
|
|
100
|
+
if (isPrimitive(captured))
|
|
101
|
+
value = captured;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const mutated = binding.mutatedPaths.reduce(invalidateSemanticMutationPath, value);
|
|
105
|
+
const projected = binding.escapedPaths.reduce((value, escape) => context.capturePoint !== undefined &&
|
|
106
|
+
semanticEscapeFollowsCapture(binding, context.capturePoint, escape.node, context.state.parentsByNode)
|
|
107
|
+
? value
|
|
108
|
+
: invalidateSemanticEscapedPath(value, escape.path), mutated);
|
|
109
|
+
// Point-local memoization also bounds failed speculative captures. Only a
|
|
110
|
+
// primitive result is allowed back into ordinary value evaluation.
|
|
111
|
+
if (context.capturePoint !== undefined ||
|
|
112
|
+
projected.status === "literal" ||
|
|
65
113
|
projected.status === "union" ||
|
|
66
114
|
(isSemanticResourceLimit(projected) &&
|
|
67
115
|
(projected.resourceLimit === "primitive-bytes" ||
|
|
@@ -72,9 +120,21 @@ const evaluateBinding = (binding, context) => {
|
|
|
72
120
|
const evaluateExpression = (node, context) => {
|
|
73
121
|
if (context.expressionDepth > SEMANTIC_EXPRESSION_DEPTH_LIMIT)
|
|
74
122
|
return semanticResourceLimitUnknown("expression-depth");
|
|
75
|
-
const
|
|
123
|
+
const unwrapped = unwrapJavaScriptExpression(node);
|
|
124
|
+
if (unwrapped.depth > 0) {
|
|
125
|
+
if (context.expressionDepth + unwrapped.depth >
|
|
126
|
+
SEMANTIC_EXPRESSION_DEPTH_LIMIT)
|
|
127
|
+
return semanticResourceLimitUnknown("expression-depth");
|
|
128
|
+
return evaluateExpression(unwrapped.node, {
|
|
129
|
+
...context,
|
|
130
|
+
expressionDepth: context.expressionDepth + unwrapped.depth,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const literal = readExactJavaScriptLiteral(node);
|
|
76
134
|
if (literal.found)
|
|
77
|
-
return
|
|
135
|
+
return typeof literal.value === "number"
|
|
136
|
+
? primitiveSet([literal.value])
|
|
137
|
+
: { status: "literal", value: literal.value };
|
|
78
138
|
if (t.isIdentifier(node)) {
|
|
79
139
|
const binding = resolveSemanticBindingState(context.state, node, node.name);
|
|
80
140
|
return binding === undefined
|
|
@@ -103,20 +163,18 @@ const evaluateExpression = (node, context) => {
|
|
|
103
163
|
return evaluateAddition(node, context);
|
|
104
164
|
if (t.isUnaryExpression(node))
|
|
105
165
|
return evaluateUnary(node, context);
|
|
106
|
-
if ((t.isTSAsExpression(node) ||
|
|
107
|
-
t.isTSTypeAssertion(node) ||
|
|
108
|
-
t.isTSNonNullExpression(node)) &&
|
|
109
|
-
t.isExpression(node.expression))
|
|
110
|
-
return evaluateExpression(node.expression, nestedContext(context));
|
|
111
166
|
return { status: "unknown", reason: `Unsupported ${node.type} value.` };
|
|
112
167
|
};
|
|
113
168
|
const evaluateTemplate = (node, context) => {
|
|
114
169
|
let candidates = [""];
|
|
115
170
|
for (let index = 0; index < node.quasis.length; index += 1) {
|
|
116
171
|
const quasi = node.quasis[index];
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
172
|
+
const text = quasi?.value.cooked;
|
|
173
|
+
if (text === undefined || text === null)
|
|
174
|
+
return {
|
|
175
|
+
status: "unknown",
|
|
176
|
+
reason: "Template text has no cooked representation.",
|
|
177
|
+
};
|
|
120
178
|
if (exceedsSemanticTemplateByteBudget(candidates, [text]))
|
|
121
179
|
return semanticResourceLimitUnknown("primitive-bytes");
|
|
122
180
|
candidates = candidates.map((prefix) => `${prefix}${text}`);
|
|
@@ -150,6 +208,7 @@ const evaluateObject = (node, context) => {
|
|
|
150
208
|
for (const [name] of propertiesByName)
|
|
151
209
|
propertiesByName.set(name, {
|
|
152
210
|
name,
|
|
211
|
+
presence: "present",
|
|
153
212
|
value: {
|
|
154
213
|
status: "unknown",
|
|
155
214
|
reason: "A later property may overwrite this value.",
|
|
@@ -183,15 +242,16 @@ const evaluateObject = (node, context) => {
|
|
|
183
242
|
}
|
|
184
243
|
propertiesByName.set(name, {
|
|
185
244
|
name,
|
|
245
|
+
presence: "present",
|
|
186
246
|
value: t.isObjectProperty(property)
|
|
187
|
-
?
|
|
247
|
+
? evaluateCapturedExpression(property.value, nestedContext(context))
|
|
188
248
|
: {
|
|
189
249
|
status: "unknown",
|
|
190
250
|
reason: "Object method or accessor value is not a primitive.",
|
|
191
251
|
},
|
|
192
252
|
});
|
|
193
253
|
}
|
|
194
|
-
const properties = [...propertiesByName.values()].sort((left, right) =>
|
|
254
|
+
const properties = [...propertiesByName.values()].sort((left, right) => compareUnicodeCodePoints(left.name, right.name));
|
|
195
255
|
return unknownProperties
|
|
196
256
|
? {
|
|
197
257
|
status: "object",
|
|
@@ -218,20 +278,27 @@ const evaluateArray = (node, context) => {
|
|
|
218
278
|
break;
|
|
219
279
|
}
|
|
220
280
|
if (element === null) {
|
|
221
|
-
unknownItems = true;
|
|
222
|
-
if (omittedItems !== null)
|
|
223
|
-
omittedItems += 1;
|
|
224
281
|
items.push({
|
|
225
|
-
|
|
226
|
-
|
|
282
|
+
name: String(items.length),
|
|
283
|
+
presence: "absent",
|
|
284
|
+
value: { status: "unknown", reason: "Array hole has no own value." },
|
|
227
285
|
});
|
|
228
286
|
continue;
|
|
229
287
|
}
|
|
230
|
-
items.push(
|
|
288
|
+
items.push({
|
|
289
|
+
name: String(items.length),
|
|
290
|
+
presence: "present",
|
|
291
|
+
value: evaluateCapturedExpression(element, nestedContext(context)),
|
|
292
|
+
});
|
|
231
293
|
}
|
|
232
294
|
return unknownItems
|
|
233
295
|
? { status: "array", items, unknownItems: true, omittedItems }
|
|
234
|
-
: {
|
|
296
|
+
: {
|
|
297
|
+
status: "array",
|
|
298
|
+
items,
|
|
299
|
+
unknownItems: false,
|
|
300
|
+
omittedItems: 0,
|
|
301
|
+
};
|
|
235
302
|
};
|
|
236
303
|
const evaluateMember = (node, context) => {
|
|
237
304
|
const keys = [];
|
|
@@ -290,7 +357,7 @@ const addPrimitiveValues = (leftValue, rightValue) => {
|
|
|
290
357
|
return rightValue;
|
|
291
358
|
return { status: "unknown", reason: "Non-primitive addition." };
|
|
292
359
|
}
|
|
293
|
-
if (left.length >
|
|
360
|
+
if (left.length > SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT / right.length)
|
|
294
361
|
return semanticResourceLimitUnknown("primitive-candidates");
|
|
295
362
|
if (exceedsSemanticPrimitiveAdditionByteBudget(left, right))
|
|
296
363
|
return semanticResourceLimitUnknown("primitive-bytes");
|
|
@@ -316,46 +383,16 @@ const evaluateUnary = (node, context) => {
|
|
|
316
383
|
return { status: "unknown", reason: `Unsupported unary ${node.operator}.` };
|
|
317
384
|
};
|
|
318
385
|
const projectValue = (value, projection) => {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
return {
|
|
330
|
-
status: current.unknownProperties ? "unknown" : "unknown",
|
|
331
|
-
reason: `Object property ${key} was not observed.`,
|
|
332
|
-
};
|
|
333
|
-
current = property.value;
|
|
334
|
-
}
|
|
335
|
-
else if (current.status === "array") {
|
|
336
|
-
const index = typeof key === "number" ? key : Number(key);
|
|
337
|
-
if (!Number.isSafeInteger(index) ||
|
|
338
|
-
index < 0 ||
|
|
339
|
-
String(index) !== String(key))
|
|
340
|
-
return {
|
|
341
|
-
status: "unknown",
|
|
342
|
-
reason: `Array property ${String(key)} is not a canonical index.`,
|
|
343
|
-
};
|
|
344
|
-
const item = current.items[index];
|
|
345
|
-
if (item === undefined)
|
|
346
|
-
return {
|
|
347
|
-
status: "unknown",
|
|
348
|
-
reason: `Array item ${String(key)} missing.`,
|
|
349
|
-
};
|
|
350
|
-
current = item;
|
|
351
|
-
}
|
|
352
|
-
else
|
|
353
|
-
return {
|
|
354
|
-
status: "unknown",
|
|
355
|
-
reason: `Cannot project ${String(key)} from ${current.status}.`,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
return current;
|
|
386
|
+
if (projection.includes(null))
|
|
387
|
+
return { status: "unknown", reason: "Cannot project a dynamic property." };
|
|
388
|
+
const path = projection.map((key) => String(key));
|
|
389
|
+
const slot = semanticSlotAtPath(value, path);
|
|
390
|
+
return slot.presence === "present"
|
|
391
|
+
? slot.value
|
|
392
|
+
: {
|
|
393
|
+
status: "unknown",
|
|
394
|
+
reason: `Own property ${path.join("/")} is ${slot.presence}.`,
|
|
395
|
+
};
|
|
359
396
|
};
|
|
360
397
|
const provenanceForBinding = (binding, context) => {
|
|
361
398
|
if (context.bindings.has(binding.bindingId))
|
|
@@ -385,6 +422,16 @@ const provenanceForBinding = (binding, context) => {
|
|
|
385
422
|
const provenanceForExpression = (node, context) => {
|
|
386
423
|
if (context.expressionDepth > SEMANTIC_EXPRESSION_DEPTH_LIMIT)
|
|
387
424
|
return semanticUnresolvedProvenance("unknown", semanticResourceLimitReason("expression-depth"));
|
|
425
|
+
const unwrapped = unwrapJavaScriptExpression(node);
|
|
426
|
+
if (unwrapped.depth > 0) {
|
|
427
|
+
if (context.expressionDepth + unwrapped.depth >
|
|
428
|
+
SEMANTIC_EXPRESSION_DEPTH_LIMIT)
|
|
429
|
+
return semanticUnresolvedProvenance("unknown", semanticResourceLimitReason("expression-depth"));
|
|
430
|
+
return provenanceForExpression(unwrapped.node, {
|
|
431
|
+
...context,
|
|
432
|
+
expressionDepth: context.expressionDepth + unwrapped.depth,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
388
435
|
const required = semanticRequireOrigin(node, context.state);
|
|
389
436
|
if (required !== undefined)
|
|
390
437
|
return semanticOriginsProvenance([required]);
|
|
@@ -423,9 +470,14 @@ const provenanceForExpression = (node, context) => {
|
|
|
423
470
|
provenanceForExpression(left, nestedContext(context)),
|
|
424
471
|
provenanceForExpression(right, nestedContext(context)),
|
|
425
472
|
];
|
|
426
|
-
const origins = candidates.flatMap((candidate) => candidate.origins);
|
|
473
|
+
const origins = uniqueSemanticOrigins(candidates.flatMap((candidate) => candidate.origins));
|
|
474
|
+
const allModuleOrigins = candidates.every(({ status }) => status === "module");
|
|
475
|
+
if (allModuleOrigins && origins.length === 1)
|
|
476
|
+
return semanticOriginsProvenance(origins);
|
|
427
477
|
return origins.length > 0
|
|
428
|
-
? semanticAmbiguousProvenance(
|
|
478
|
+
? semanticAmbiguousProvenance(origins, allModuleOrigins
|
|
479
|
+
? "Multiple module origins."
|
|
480
|
+
: "Conditional provenance includes a non-module alternative.")
|
|
429
481
|
: semanticUnresolvedProvenance("unknown", "Conditional provenance is unresolved.");
|
|
430
482
|
}
|
|
431
483
|
return semanticLocalProvenance();
|
|
@@ -442,8 +494,60 @@ const mergeValues = (values) => {
|
|
|
442
494
|
const nestedContext = (context, bindingId) => ({
|
|
443
495
|
state: context.state,
|
|
444
496
|
primitiveBindingValues: context.primitiveBindingValues,
|
|
497
|
+
...(context.capturePoint === undefined
|
|
498
|
+
? {}
|
|
499
|
+
: { capturePoint: context.capturePoint }),
|
|
445
500
|
expressionDepth: context.expressionDepth + 1,
|
|
446
501
|
bindings: bindingId === undefined
|
|
447
502
|
? context.bindings
|
|
448
503
|
: new Set([...context.bindings, bindingId]),
|
|
449
504
|
});
|
|
505
|
+
const isPrimitive = (value) => value.status === "literal" || value.status === "union";
|
|
506
|
+
const primitiveCaptureContext = (node, context) => {
|
|
507
|
+
if (t.isObjectExpression(node) || t.isArrayExpression(node))
|
|
508
|
+
return undefined;
|
|
509
|
+
return captureContextAt(node, context);
|
|
510
|
+
};
|
|
511
|
+
const captureContextAt = (node, context) => {
|
|
512
|
+
if (context.capturePoint !== undefined ||
|
|
513
|
+
semanticCapturePosition(node, context.state.parentsByNode) === null)
|
|
514
|
+
return undefined;
|
|
515
|
+
let captures = capturedBindingValuesByState.get(context.state);
|
|
516
|
+
if (captures === undefined) {
|
|
517
|
+
captures = new WeakMap();
|
|
518
|
+
capturedBindingValuesByState.set(context.state, captures);
|
|
519
|
+
}
|
|
520
|
+
let values = captures.get(node);
|
|
521
|
+
if (values === undefined) {
|
|
522
|
+
values = new Map();
|
|
523
|
+
captures.set(node, values);
|
|
524
|
+
}
|
|
525
|
+
return { ...context, capturePoint: node, primitiveBindingValues: values };
|
|
526
|
+
};
|
|
527
|
+
const evaluateCapturedExpression = (node, context) => {
|
|
528
|
+
// A literal field captures its primitive at construction, even when its
|
|
529
|
+
// containing object is subsequently read at another capture point.
|
|
530
|
+
let values = primitiveExpressionValuesByState.get(context.state);
|
|
531
|
+
const cached = values?.get(node);
|
|
532
|
+
if (cached !== undefined)
|
|
533
|
+
return cached;
|
|
534
|
+
let value = evaluateExpression(node, context);
|
|
535
|
+
if (!isPrimitive(value)) {
|
|
536
|
+
const captureContext = primitiveCaptureContext(node, context);
|
|
537
|
+
if (captureContext !== undefined) {
|
|
538
|
+
const captured = evaluateExpression(node, captureContext);
|
|
539
|
+
if (isPrimitive(captured))
|
|
540
|
+
value = captured;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
// Never publish values evaluated at somebody else's capture point. Like
|
|
544
|
+
// binding caches, these entries are discarded whenever effects change.
|
|
545
|
+
if (context.capturePoint === undefined && isPrimitive(value)) {
|
|
546
|
+
if (values === undefined) {
|
|
547
|
+
values = new WeakMap();
|
|
548
|
+
primitiveExpressionValuesByState.set(context.state, values);
|
|
549
|
+
}
|
|
550
|
+
values.set(node, value);
|
|
551
|
+
}
|
|
552
|
+
return value;
|
|
553
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { domainToASCII, fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
/** Map-scoped source declaration and its path interpretation for matching. */
|
|
5
|
+
export const javascriptSourceMapReferenceSchema = z.strictObject({
|
|
6
|
+
source_name: z.string(),
|
|
7
|
+
source_root: z.string().nullable(),
|
|
8
|
+
map_path: z.string().min(1),
|
|
9
|
+
resolution: z.discriminatedUnion("kind", [
|
|
10
|
+
z.strictObject({
|
|
11
|
+
kind: z.enum(["artifact-relative", "suffix"]),
|
|
12
|
+
path: z.string().min(1),
|
|
13
|
+
}),
|
|
14
|
+
z.strictObject({
|
|
15
|
+
kind: z.literal("unresolved"),
|
|
16
|
+
reason: z.string().min(1),
|
|
17
|
+
}),
|
|
18
|
+
]),
|
|
19
|
+
});
|
|
20
|
+
/** Interpret a declaration once at the source-map ingestion boundary. */
|
|
21
|
+
export const resolveJavaScriptSourceMapReference = (sourceName, sourceRoot, mapPath) => {
|
|
22
|
+
// TraceMap's producer prefixes sourceRoot before resolving the URL reference.
|
|
23
|
+
const reference = `${sourceRoot ? `${sourceRoot}/` : ""}${sourceName}`;
|
|
24
|
+
return {
|
|
25
|
+
source_name: sourceName,
|
|
26
|
+
source_root: sourceRoot,
|
|
27
|
+
map_path: mapPath,
|
|
28
|
+
resolution: resolveJavaScriptSourceMapPath(reference, mapPath),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/** Resolve a source-map URL reference without changing its recorded identity. */
|
|
32
|
+
const resolveJavaScriptSourceMapPath = (source, mapPath) => {
|
|
33
|
+
const portable = source.replaceAll("\\", "/");
|
|
34
|
+
const windowsPath = /^[a-z]:\//iu.test(portable) || source.startsWith("\\\\");
|
|
35
|
+
// Preserve parent traversal rather than letting URL resolution clamp at '/'.
|
|
36
|
+
const anchor = `/${"source/".repeat(portable.split("/").length + 1)}`;
|
|
37
|
+
const directory = posix.join(anchor, posix.dirname(mapPath.replaceAll("\\", "/")));
|
|
38
|
+
const base = pathToFileURL(`${directory}/`, { windows: false });
|
|
39
|
+
const absolute = windowsPath ? windowsFileUrl(source) : URL.parse(source);
|
|
40
|
+
const resolved = windowsPath ? absolute : URL.parse(source, base);
|
|
41
|
+
if (resolved === null)
|
|
42
|
+
return {
|
|
43
|
+
kind: "unresolved",
|
|
44
|
+
reason: "Source reference is not a valid URL or filesystem path.",
|
|
45
|
+
};
|
|
46
|
+
if (!resolved.pathname.startsWith("/"))
|
|
47
|
+
return {
|
|
48
|
+
kind: "unresolved",
|
|
49
|
+
reason: "Source reference uses a non-hierarchical URL without a file pathname.",
|
|
50
|
+
};
|
|
51
|
+
if (resolved.pathname.endsWith("/"))
|
|
52
|
+
return {
|
|
53
|
+
kind: "unresolved",
|
|
54
|
+
reason: "Source reference names a directory rather than a file.",
|
|
55
|
+
};
|
|
56
|
+
// Encoded separators must not manufacture a different filesystem hierarchy.
|
|
57
|
+
if (/%(?:2f|5c)/iu.test(resolved.pathname))
|
|
58
|
+
return {
|
|
59
|
+
kind: "unresolved",
|
|
60
|
+
reason: "Source reference contains an encoded path separator.",
|
|
61
|
+
};
|
|
62
|
+
const relative = absolute === null
|
|
63
|
+
? !portable.startsWith("/")
|
|
64
|
+
: absolute.href !== resolved.href;
|
|
65
|
+
const path = decodedUrlPath(resolved);
|
|
66
|
+
if (path === null)
|
|
67
|
+
return {
|
|
68
|
+
kind: "unresolved",
|
|
69
|
+
reason: "Source reference has malformed URL encoding or an invalid file URL.",
|
|
70
|
+
};
|
|
71
|
+
const value = relative
|
|
72
|
+
? posix.relative(anchor, path)
|
|
73
|
+
: path.replace(/^\/+/, "");
|
|
74
|
+
if (value === "" || value === ".." || value.startsWith("../"))
|
|
75
|
+
return {
|
|
76
|
+
kind: "unresolved",
|
|
77
|
+
reason: "Source reference resolves outside the inventoried artifact.",
|
|
78
|
+
};
|
|
79
|
+
return { path: value, kind: relative ? "artifact-relative" : "suffix" };
|
|
80
|
+
};
|
|
81
|
+
// Reject URL delimiters/escapes before IDNA can truncate or decode the host.
|
|
82
|
+
const unusableHost = /[\0\t\n\r #/:<>?@[\\\]^|%]/u;
|
|
83
|
+
// URL/IDNA validation also rejects Unicode hosts that normalize to empty.
|
|
84
|
+
const carriesUsableHost = (host) => !unusableHost.test(host) && domainToASCII(host) !== "";
|
|
85
|
+
const windowsFileUrl = (path) => {
|
|
86
|
+
// A malformed UNC host aborts pathToFileURL() on the Node builds this
|
|
87
|
+
// package admits, so decline the reference before handing the path over
|
|
88
|
+
// rather than trusting a TypeError that never arrives.
|
|
89
|
+
if (path.startsWith("\\\\") &&
|
|
90
|
+
!carriesUsableHost(path.slice(2).split("\\")[0] ?? ""))
|
|
91
|
+
return null;
|
|
92
|
+
try {
|
|
93
|
+
return pathToFileURL(path, { windows: true });
|
|
94
|
+
}
|
|
95
|
+
catch (cause) {
|
|
96
|
+
if (cause instanceof TypeError)
|
|
97
|
+
return null;
|
|
98
|
+
throw cause;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const decodedUrlPath = (url) => {
|
|
102
|
+
try {
|
|
103
|
+
if (url.protocol === "file:")
|
|
104
|
+
return fileURLToPath(url, {
|
|
105
|
+
windows: url.hostname !== "" && url.hostname !== "localhost",
|
|
106
|
+
}).replaceAll("\\", "/");
|
|
107
|
+
return `${url.host}${decodeURIComponent(url.pathname)}`;
|
|
108
|
+
}
|
|
109
|
+
catch (cause) {
|
|
110
|
+
if (cause instanceof URIError || cause instanceof TypeError)
|
|
111
|
+
return null;
|
|
112
|
+
throw cause;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
import { parse } from "@babel/parser";
|
|
2
|
+
/**
|
|
3
|
+
* Babel plugins for one source path. Single owner for TypeScript/JSX
|
|
4
|
+
* mode selection (tsc + Babel `typescript` plugin semantics).
|
|
5
|
+
*
|
|
6
|
+
* - `dts:true` only for `.d.ts/.d.mts/.d.cts` ambient declarations;
|
|
7
|
+
* ordinary `.ts` keeps the missing-initializer diagnostic.
|
|
8
|
+
* - JSX enabled for `.tsx`, `.jsx`, `.js`, and unknown paths; disabled for
|
|
9
|
+
* plain `.ts/.cts/.mts` (angle-bracket assertions, not JSX) and for all
|
|
10
|
+
* declaration files. `.mts` (including `.d.mts`) sets
|
|
11
|
+
* `disallowAmbiguousJSXLike`, matching tsc's `.mts` mode.
|
|
12
|
+
* - `decorators-legacy` always present: without it decorated sources fail
|
|
13
|
+
* hard instead of reporting recovered syntax, losing every derived fact.
|
|
14
|
+
* - Unknown paths retain the existing JSX-capable contract (best-effort
|
|
15
|
+
* parse; failures surface via `errorRecovery`, never silent misparse).
|
|
16
|
+
*/
|
|
17
|
+
export const parserPluginsForPath = (sourcePath) => {
|
|
18
|
+
const path = sourcePath ?? "";
|
|
19
|
+
const dts = /\.d\.(?:ts|mts|cts)$/iu.test(path);
|
|
20
|
+
const isTsLike = /\.(?:ts|cts|mts)$/iu.test(path);
|
|
21
|
+
const isTsx = /\.tsx$/iu.test(path);
|
|
22
|
+
const isMts = /\.mts$/iu.test(path);
|
|
23
|
+
const typescript = [
|
|
24
|
+
"typescript",
|
|
25
|
+
{
|
|
26
|
+
dts,
|
|
27
|
+
...(isMts ? { disallowAmbiguousJSXLike: true } : {}),
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
const jsxCapable = !dts && (isTsx || !isTsLike);
|
|
31
|
+
return jsxCapable
|
|
32
|
+
? ["decorators-legacy", "jsx", typescript]
|
|
33
|
+
: ["decorators-legacy", typescript];
|
|
34
|
+
};
|
|
2
35
|
/** Parse JavaScript or TypeScript once without attaching comments to AST nodes. */
|
|
3
36
|
export const parseJavaScriptSource = (source, sourcePath) => {
|
|
4
37
|
try {
|
|
@@ -6,15 +39,7 @@ export const parseJavaScriptSource = (source, sourcePath) => {
|
|
|
6
39
|
sourceType: "unambiguous",
|
|
7
40
|
errorRecovery: true,
|
|
8
41
|
attachComment: false,
|
|
9
|
-
|
|
10
|
-
// forms, including parameter decorators. Without it a decorated
|
|
11
|
-
// TypeScript source fails to parse at all rather than reporting
|
|
12
|
-
// recovered syntax, which loses every fact derived from that source.
|
|
13
|
-
// Plain .ts artifacts admit angle-bracket type assertions instead of JSX.
|
|
14
|
-
// Unknown paths retain the existing JSX-capable parser contract.
|
|
15
|
-
plugins: sourcePath?.toLowerCase().endsWith(".ts") === true
|
|
16
|
-
? ["decorators-legacy", "typescript"]
|
|
17
|
-
: ["decorators-legacy", "jsx", "typescript"],
|
|
42
|
+
plugins: parserPluginsForPath(sourcePath),
|
|
18
43
|
});
|
|
19
44
|
}
|
|
20
45
|
catch (cause) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
3
3
|
import { collectJavaScriptExports, fingerprintJavaScriptAst, } from "./javascriptAstFingerprint.js";
|
|
4
|
-
import {
|
|
4
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
5
5
|
import { addFindingOnce } from "./javascriptStaticAnalysisFindings.js";
|
|
6
6
|
import { argumentValue, calleeName, chunkRuntime, factoryRequireName, moduleFactory, modulePropertyName, range, registrationKey, sha256Text, sourceSlice, staticArrayValues, } from "./javascriptStaticAnalysisHelpers.js";
|
|
7
7
|
/** Inspect a bundler registration call and recover its module table. */
|
|
@@ -39,7 +39,7 @@ export const inspectBundlerRegistration = (source, call, accumulator) => {
|
|
|
39
39
|
unknown_entry_module_keys: runtimeValue.unknownEntryModuleKeys,
|
|
40
40
|
async_chunk_keys: asyncChunkKeys.values,
|
|
41
41
|
unknown_async_chunk_keys: runtimeValue.unknownAsyncChunkKeys + recovered.unknownAsyncChunkKeys,
|
|
42
|
-
modules: recovered.modules.sort((left, right) =>
|
|
42
|
+
modules: recovered.modules.sort((left, right) => compareUnicodeCodePoints(left.module_key, right.module_key)),
|
|
43
43
|
location: range(call),
|
|
44
44
|
};
|
|
45
45
|
addFindingOnce(accumulator, `registration\0${registrationKey(registration)}`, () => accumulator.registrations.push(registration));
|
|
@@ -70,7 +70,7 @@ export const inspectEsbuildWrapper = (source, call, accumulator) => {
|
|
|
70
70
|
unknown_entry_module_keys: 0,
|
|
71
71
|
async_chunk_keys: recovered.asyncChunkKeys,
|
|
72
72
|
unknown_async_chunk_keys: recovered.unknownAsyncChunkKeys,
|
|
73
|
-
modules: recovered.modules.sort((left, right) =>
|
|
73
|
+
modules: recovered.modules.sort((left, right) => compareUnicodeCodePoints(left.module_key, right.module_key)),
|
|
74
74
|
location: range(call),
|
|
75
75
|
};
|
|
76
76
|
addFindingOnce(accumulator, `registration\0${registrationKey(registration)}`, () => accumulator.registrations.push(registration));
|
|
@@ -146,7 +146,7 @@ const runtimeMetadata = (node) => {
|
|
|
146
146
|
asyncChunkKeys: [],
|
|
147
147
|
unknownAsyncChunkKeys: 0,
|
|
148
148
|
};
|
|
149
|
-
const entries =
|
|
149
|
+
const entries = collectBundlerCallArgumentValues(node, requireName);
|
|
150
150
|
const asyncChunks = collectBundlerAsyncChunkKeys(node, requireName);
|
|
151
151
|
return {
|
|
152
152
|
requireName,
|
|
@@ -156,7 +156,6 @@ const runtimeMetadata = (node) => {
|
|
|
156
156
|
unknownAsyncChunkKeys: asyncChunks.unknown,
|
|
157
157
|
};
|
|
158
158
|
};
|
|
159
|
-
const collectBundlerEntryModuleKeys = (factory, requireName) => collectBundlerCallArgumentValues(factory, requireName);
|
|
160
159
|
const collectBundlerAsyncChunkKeys = (factory, requireName) => requireName === null
|
|
161
160
|
? { values: [], unknown: 0 }
|
|
162
161
|
: collectBundlerCallArgumentValues(factory, `${requireName}.e`);
|
|
@@ -183,7 +182,7 @@ const isBundlerFunction = (node) => t.isFunctionExpression(node) ||
|
|
|
183
182
|
t.isArrowFunctionExpression(node) ||
|
|
184
183
|
t.isObjectMethod(node);
|
|
185
184
|
const uniqueValues = (values, unknown = 0) => {
|
|
186
|
-
const unique = [...new Set(values)].sort(
|
|
185
|
+
const unique = [...new Set(values)].sort(compareUnicodeCodePoints);
|
|
187
186
|
return {
|
|
188
187
|
values: unique,
|
|
189
188
|
unknown,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { sanitizeEndpointCandidate } from "../browserObservation.js";
|
|
3
3
|
import { addFindingOnce, addLocatedFinding, } from "./javascriptStaticAnalysisFindings.js";
|
|
4
|
-
import { STATIC_ROUTE_CALL_NAMES, argumentValue, calleeName, endpointArgument as endpointArgumentHelper, prefixedArgument,
|
|
4
|
+
import { STATIC_ROUTE_CALL_NAMES, argumentValue, calleeName, endpointArgument as endpointArgumentHelper, prefixedArgument, range, rangeForOffsets, sourceSlice, staticPath, staticPathResolutionContext, storageKind, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
|
+
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
5
6
|
/** Inspect one call or new expression for references, endpoints, storage, and roles. */
|
|
6
7
|
export const inspectCall = (source, node, context) => {
|
|
7
8
|
const { accumulator } = context;
|