rea-agents 3.1.0 → 3.2.1
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 +72 -95
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
- package/dist/application/ArtifactInventory/scanReader.js +69 -51
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +41 -13
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +5 -93
- package/dist/application/BinarySessionStatus.js +5 -16
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +42 -58
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityInventory.js +10 -15
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +3 -8
- package/dist/application/ElectronActiveObservationService.js +3 -6
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +76 -44
- package/dist/application/EvidenceBundleCommands.js +11 -11
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +6 -41
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +6 -32
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +5 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +6 -16
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +52 -17
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -96
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +19 -45
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -93
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +36 -58
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +15 -24
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +26 -50
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +9 -14
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
- package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +14 -30
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +0 -17
- package/dist/browser/V8InspectorCaptureProjection.js +7 -8
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +0 -54
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +5 -270
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +42 -112
- package/dist/cliBrowserAdvancedCommands.js +10 -106
- package/dist/cliBrowserCommands.js +15 -127
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +4 -5
- package/dist/cliElectronCommands.js +8 -72
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +9 -91
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -96
- package/dist/cliPolicyCommands.js +2 -17
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +2 -2
- package/dist/config/environment.js +0 -9
- package/dist/config/parseConfig.js +1 -33
- package/dist/config/parsers.js +6 -27
- package/dist/config/passiveObservation.js +7 -77
- package/dist/config/permissions.js +0 -7
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +56 -109
- package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +20 -67
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +8 -73
- package/dist/contracts/electronToolContracts.js +8 -108
- package/dist/contracts/enhancedInputs.js +23 -54
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +6 -95
- package/dist/contracts/managedWorkflowExamples.js +77 -128
- package/dist/contracts/managedWorkflowToolContracts.js +51 -77
- package/dist/contracts/nativeToolContracts.js +7 -11
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +6 -15
- package/dist/contracts/toolContractExamples.js +11 -11
- package/dist/contracts/toolContractHelpers.js +0 -4
- package/dist/contracts/toolContracts.js +60 -71
- package/dist/contracts/toolEffects.js +5 -13
- package/dist/contracts/toolOutputSchemaGroups.js +37 -91
- package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
- package/dist/contracts/toolSchemaMetadata.js +8 -19
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -54
- package/dist/domain/appleApplication.js +24 -67
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -221
- package/dist/domain/browserCaptureComparison.js +47 -24
- package/dist/domain/browserObservation.js +28 -193
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +20 -19
- package/dist/domain/callPath.js +47 -167
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +36 -8
- package/dist/domain/conformanceTrustGate.js +23 -14
- package/dist/domain/customProtocolCapture.js +1 -1
- package/dist/domain/electronActiveObservation.js +70 -103
- package/dist/domain/electronObservation.js +14 -80
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +10 -17
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +20 -12
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +4 -11
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -156
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +15 -136
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +24 -41
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +42 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +2 -7
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +1 -5
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureValidation.js +1 -7
- package/dist/domain/processComparison.js +3 -12
- package/dist/domain/processReactiveMatching.js +29 -50
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +33 -18
- package/dist/domain/processScenario.js +56 -90
- package/dist/domain/processTraceComparison.js +0 -8
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +3 -3
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +36 -38
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +1 -5
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +41 -41
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +9 -85
- package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
- package/dist/domain/sourceToBundleSignals.js +4 -15
- package/dist/domain/staticRuntimeCorrelation.js +37 -49
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +33 -73
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +4 -12
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +65 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +16 -85
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +15 -22
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +2 -2
- package/dist/hopper/BridgeLauncher.js +112 -36
- package/dist/hopper/HopperAnalysisProfile.js +1 -1
- package/dist/hopper/HopperCleanup.js +6 -3
- package/dist/hopper/HopperClient.js +4 -7
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -16
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +0 -3
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -9
- package/dist/main/transport.js +0 -5
- package/dist/mcpDoctor.js +25 -45
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/ProcessOwnership.js +3 -2
- package/dist/process/ProcessOwnershipObservation.js +0 -1
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +3 -5
- package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +1 -3
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +0 -2
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +6 -44
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +4 -8
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
- package/dist/server/registerApplicationTools/compareVersions.js +5 -10
- package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
- package/dist/server/registerApplicationTools/coverage.js +6 -71
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +5 -9
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +23 -27
- package/dist/server/registerBrowserScenarioTool.js +4 -4
- package/dist/server/registerBrowserTools.js +5 -8
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +2 -16
- package/dist/server/registerElectronTools.js +10 -29
- package/dist/server/registerEnhancedTools.js +10 -11
- package/dist/server/registerEvidenceTools.js +15 -22
- package/dist/server/registerFunctionComparisonTool.js +30 -25
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +20 -116
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
- package/dist/server/registerOfficialTools.js +1 -43
- package/dist/server/registerProcessComparisonTool.js +33 -23
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerSessionRecordTools.js +10 -156
- package/dist/server/registerSessionStatusTool.js +6 -69
- package/dist/server/registerSessionTools.js +10 -51
- package/dist/server/sessionAvailabilityPolicy.js +0 -2
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +0 -8
- package/dist/server/toolResult.js +14 -50
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +11 -7
- package/scripts/electron-active-hook.cjs +23 -55
- package/scripts/hopper-demo-x11.py +13 -32
- package/skills/reverse-engineer-anything/SKILL.md +47 -12
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -129
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -347
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -29
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -50
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
|
|
3
3
|
import { compareCodePoints, propertyName, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
|
|
4
|
-
import {
|
|
4
|
+
import { semanticAmbiguousProvenance, semanticLocalProvenance, semanticOriginsProvenance, semanticUnresolvedProvenance, uniqueSemanticOrigins, } from "./javascriptSemanticProvenance.js";
|
|
5
5
|
import { semanticPrimitiveCandidates as primitiveCandidates, semanticPrimitiveSet as primitiveSet, semanticPrimitiveValue as primitiveValue, } from "./javascriptSemanticPrimitives.js";
|
|
6
6
|
/** Evaluate one binding in the bounded constant-value lattice. */
|
|
7
|
-
export const evaluateSemanticBinding = (binding, state) => evaluateBinding(binding, { state, bindings: new Set()
|
|
7
|
+
export const evaluateSemanticBinding = (binding, state) => evaluateBinding(binding, { state, bindings: new Set() });
|
|
8
8
|
/** Evaluate one arbitrary inert expression in the established lexical state. */
|
|
9
|
-
export const evaluateSemanticExpression = (node, state) => evaluateExpression(node, { state, bindings: new Set()
|
|
9
|
+
export const evaluateSemanticExpression = (node, state) => evaluateExpression(node, { state, bindings: new Set() });
|
|
10
10
|
/** Follow module provenance through destructuring, members, and aliases. */
|
|
11
|
-
export const evaluateSemanticProvenance = (binding, state) => provenanceForBinding(binding, { state, bindings: new Set()
|
|
11
|
+
export const evaluateSemanticProvenance = (binding, state) => provenanceForBinding(binding, { state, bindings: new Set() });
|
|
12
12
|
const evaluateBinding = (binding, context) => {
|
|
13
13
|
if (context.bindings.has(binding.bindingId))
|
|
14
14
|
return { status: "cycle", reason: `Alias cycle at ${binding.name}.` };
|
|
15
|
-
if (context.depth >= context.state.limits.maxValueDepth)
|
|
16
|
-
return limitValue(context.state, "maxValueDepth");
|
|
17
15
|
if (binding.initializers.length === 0)
|
|
18
16
|
return {
|
|
19
17
|
status: "unknown",
|
|
@@ -31,8 +29,6 @@ const evaluateBinding = (binding, context) => {
|
|
|
31
29
|
return projectValue(evaluateExpression(initializer.node, nested), initializer.projection);
|
|
32
30
|
};
|
|
33
31
|
const evaluateExpression = (node, context) => {
|
|
34
|
-
if (context.depth >= context.state.limits.maxValueDepth)
|
|
35
|
-
return limitValue(context.state, "maxValueDepth");
|
|
36
32
|
const literal = primitiveValue(node);
|
|
37
33
|
if (literal.found)
|
|
38
34
|
return { status: "literal", value: literal.value };
|
|
@@ -48,12 +44,12 @@ const evaluateExpression = (node, context) => {
|
|
|
48
44
|
return mergeValues([
|
|
49
45
|
evaluateExpression(node.consequent, nestedContext(context)),
|
|
50
46
|
evaluateExpression(node.alternate, nestedContext(context)),
|
|
51
|
-
]
|
|
47
|
+
]);
|
|
52
48
|
if (t.isLogicalExpression(node))
|
|
53
49
|
return mergeValues([
|
|
54
50
|
evaluateExpression(node.left, nestedContext(context)),
|
|
55
51
|
evaluateExpression(node.right, nestedContext(context)),
|
|
56
|
-
]
|
|
52
|
+
]);
|
|
57
53
|
if (t.isObjectExpression(node))
|
|
58
54
|
return evaluateObject(node, context);
|
|
59
55
|
if (t.isArrayExpression(node))
|
|
@@ -87,10 +83,8 @@ const evaluateTemplate = (node, context) => {
|
|
|
87
83
|
reason: "Template expression is not a bounded primitive.",
|
|
88
84
|
};
|
|
89
85
|
candidates = candidates.flatMap((prefix) => values.map((value) => `${prefix}${String(value)}`));
|
|
90
|
-
if (candidates.length > context.state.limits.maxUnionValues)
|
|
91
|
-
return limitValue(context.state, "maxUnionValues");
|
|
92
86
|
}
|
|
93
|
-
return primitiveSet(candidates
|
|
87
|
+
return primitiveSet(candidates);
|
|
94
88
|
};
|
|
95
89
|
const evaluateObject = (node, context) => {
|
|
96
90
|
const properties = [];
|
|
@@ -115,25 +109,25 @@ const evaluateObject = (node, context) => {
|
|
|
115
109
|
omittedProperties += 1;
|
|
116
110
|
continue;
|
|
117
111
|
}
|
|
118
|
-
if (properties.length >= context.state.limits.maxObjectProperties) {
|
|
119
|
-
reachSemanticValueLimit(context.state, "maxObjectProperties");
|
|
120
|
-
unknownProperties = true;
|
|
121
|
-
if (omittedProperties !== null)
|
|
122
|
-
omittedProperties += 1;
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
112
|
properties.push({
|
|
126
113
|
name,
|
|
127
114
|
value: evaluateExpression(property.value, nestedContext(context)),
|
|
128
115
|
});
|
|
129
116
|
}
|
|
130
117
|
properties.sort((left, right) => compareCodePoints(left.name, right.name));
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
118
|
+
return unknownProperties
|
|
119
|
+
? {
|
|
120
|
+
status: "object",
|
|
121
|
+
properties,
|
|
122
|
+
unknownProperties: true,
|
|
123
|
+
omittedProperties,
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
status: "object",
|
|
127
|
+
properties,
|
|
128
|
+
unknownProperties: false,
|
|
129
|
+
omittedProperties: 0,
|
|
130
|
+
};
|
|
137
131
|
};
|
|
138
132
|
const evaluateArray = (node, context) => {
|
|
139
133
|
const items = [];
|
|
@@ -151,16 +145,11 @@ const evaluateArray = (node, context) => {
|
|
|
151
145
|
omittedItems += 1;
|
|
152
146
|
continue;
|
|
153
147
|
}
|
|
154
|
-
if (items.length >= context.state.limits.maxObjectProperties) {
|
|
155
|
-
reachSemanticValueLimit(context.state, "maxObjectProperties");
|
|
156
|
-
unknownItems = true;
|
|
157
|
-
if (omittedItems !== null)
|
|
158
|
-
omittedItems += 1;
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
148
|
items.push(evaluateExpression(element, nestedContext(context)));
|
|
162
149
|
}
|
|
163
|
-
return
|
|
150
|
+
return unknownItems
|
|
151
|
+
? { status: "array", items, unknownItems: true, omittedItems }
|
|
152
|
+
: { status: "array", items, unknownItems: false, omittedItems: 0 };
|
|
164
153
|
};
|
|
165
154
|
const evaluateMember = (node, context) => {
|
|
166
155
|
if (!t.isNode(node.object))
|
|
@@ -180,18 +169,18 @@ const evaluateAddition = (node, context) => {
|
|
|
180
169
|
const values = left.flatMap((leftValue) => right.map((rightValue) => typeof leftValue === "number" && typeof rightValue === "number"
|
|
181
170
|
? leftValue + rightValue
|
|
182
171
|
: `${String(leftValue)}${String(rightValue)}`));
|
|
183
|
-
return primitiveSet(values
|
|
172
|
+
return primitiveSet(values);
|
|
184
173
|
};
|
|
185
174
|
const evaluateUnary = (node, context) => {
|
|
186
175
|
const argument = primitiveCandidates(evaluateExpression(node.argument, nestedContext(context)));
|
|
187
176
|
if (argument === null)
|
|
188
177
|
return { status: "unknown", reason: "Non-primitive unary operand." };
|
|
189
178
|
if (node.operator === "!")
|
|
190
|
-
return primitiveSet(argument.map((value) => !value)
|
|
179
|
+
return primitiveSet(argument.map((value) => !value));
|
|
191
180
|
if (node.operator === "+")
|
|
192
|
-
return primitiveSet(argument.map((value) => Number(value))
|
|
181
|
+
return primitiveSet(argument.map((value) => Number(value)));
|
|
193
182
|
if (node.operator === "-")
|
|
194
|
-
return primitiveSet(argument.map((value) => -Number(value))
|
|
183
|
+
return primitiveSet(argument.map((value) => -Number(value)));
|
|
195
184
|
return { status: "unknown", reason: `Unsupported unary ${node.operator}.` };
|
|
196
185
|
};
|
|
197
186
|
const projectValue = (value, projection) => {
|
|
@@ -230,20 +219,18 @@ const projectValue = (value, projection) => {
|
|
|
230
219
|
};
|
|
231
220
|
const provenanceForBinding = (binding, context) => {
|
|
232
221
|
if (context.bindings.has(binding.bindingId))
|
|
233
|
-
return
|
|
234
|
-
if (context.depth >= context.state.limits.maxValueDepth)
|
|
235
|
-
return semanticLimitProvenance(context.state, "maxValueDepth");
|
|
222
|
+
return semanticUnresolvedProvenance("cycle", `Alias cycle at ${binding.name}.`);
|
|
236
223
|
if (binding.directOrigins.length > 0)
|
|
237
|
-
return semanticOriginsProvenance(binding.directOrigins
|
|
224
|
+
return semanticOriginsProvenance(binding.directOrigins);
|
|
238
225
|
if (binding.initializers.length === 0)
|
|
239
|
-
return
|
|
226
|
+
return semanticLocalProvenance();
|
|
240
227
|
if (binding.initializers.length > 1)
|
|
241
|
-
return
|
|
228
|
+
return semanticAmbiguousProvenance([], `Binding ${binding.name} has multiple possible assignments.`);
|
|
242
229
|
const initializer = binding.initializers[0];
|
|
243
230
|
if (initializer === undefined)
|
|
244
|
-
return
|
|
231
|
+
return semanticUnresolvedProvenance("unknown", "Missing binding initializer.");
|
|
245
232
|
if (initializer.projection.includes(null))
|
|
246
|
-
return
|
|
233
|
+
return semanticUnresolvedProvenance("unknown", "Dynamic provenance projection.");
|
|
247
234
|
const resolved = provenanceForExpression(initializer.node, nestedContext(context, binding.bindingId));
|
|
248
235
|
if (resolved.status !== "module" || initializer.projection.length === 0)
|
|
249
236
|
return resolved;
|
|
@@ -253,31 +240,31 @@ const provenanceForBinding = (binding, context) => {
|
|
|
253
240
|
...origin.importedPath,
|
|
254
241
|
...initializer.projection.map((segment) => String(segment)),
|
|
255
242
|
],
|
|
256
|
-
}))
|
|
243
|
+
})));
|
|
257
244
|
};
|
|
258
245
|
const provenanceForExpression = (node, context) => {
|
|
259
246
|
const required = requireOrigin(node);
|
|
260
247
|
if (required !== undefined)
|
|
261
|
-
return semanticOriginsProvenance([required]
|
|
248
|
+
return semanticOriginsProvenance([required]);
|
|
262
249
|
if (t.isIdentifier(node)) {
|
|
263
250
|
const binding = resolveSemanticBindingState(context.state, node, node.name);
|
|
264
251
|
return binding === undefined
|
|
265
|
-
?
|
|
252
|
+
? semanticUnresolvedProvenance("unknown", `Unbound identifier ${node.name}.`)
|
|
266
253
|
: provenanceForBinding(binding, nestedContext(context));
|
|
267
254
|
}
|
|
268
255
|
if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
|
|
269
256
|
if (!t.isNode(node.object))
|
|
270
|
-
return
|
|
257
|
+
return semanticUnresolvedProvenance("unknown", "Unsupported member base.");
|
|
271
258
|
const member = memberKey(node);
|
|
272
259
|
if (typeof member !== "string")
|
|
273
|
-
return
|
|
260
|
+
return semanticUnresolvedProvenance("unknown", "Dynamic provenance member.");
|
|
274
261
|
const base = provenanceForExpression(node.object, nestedContext(context));
|
|
275
262
|
return base.status !== "module"
|
|
276
263
|
? base
|
|
277
264
|
: semanticOriginsProvenance(base.origins.map((origin) => ({
|
|
278
265
|
...origin,
|
|
279
266
|
importedPath: [...origin.importedPath, member],
|
|
280
|
-
}))
|
|
267
|
+
})));
|
|
281
268
|
}
|
|
282
269
|
if (t.isConditionalExpression(node) || t.isLogicalExpression(node)) {
|
|
283
270
|
const left = t.isConditionalExpression(node) ? node.consequent : node.left;
|
|
@@ -288,10 +275,10 @@ const provenanceForExpression = (node, context) => {
|
|
|
288
275
|
];
|
|
289
276
|
const origins = candidates.flatMap((candidate) => candidate.origins);
|
|
290
277
|
return origins.length > 0
|
|
291
|
-
?
|
|
292
|
-
:
|
|
278
|
+
? semanticAmbiguousProvenance(uniqueSemanticOrigins(origins), "Multiple module origins.")
|
|
279
|
+
: semanticUnresolvedProvenance("unknown", "Conditional provenance is unresolved.");
|
|
293
280
|
}
|
|
294
|
-
return
|
|
281
|
+
return semanticLocalProvenance();
|
|
295
282
|
};
|
|
296
283
|
const requireOrigin = (node) => {
|
|
297
284
|
if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
|
|
@@ -309,11 +296,11 @@ const requireOrigin = (node) => {
|
|
|
309
296
|
const specifier = stringValue(node.arguments[0]);
|
|
310
297
|
return specifier === undefined ? undefined : { specifier, importedPath: [] };
|
|
311
298
|
};
|
|
312
|
-
const mergeValues = (values
|
|
299
|
+
const mergeValues = (values) => {
|
|
313
300
|
const primitives = values.flatMap((value) => primitiveCandidates(value) ?? []);
|
|
314
301
|
return primitives.length === values.length ||
|
|
315
302
|
values.every((value) => value.status === "union" || value.status === "literal")
|
|
316
|
-
? primitiveSet(primitives
|
|
303
|
+
? primitiveSet(primitives)
|
|
317
304
|
: { status: "ambiguous", reason: "Branches have incompatible values." };
|
|
318
305
|
};
|
|
319
306
|
const memberKey = (node) => {
|
|
@@ -323,13 +310,8 @@ const memberKey = (node) => {
|
|
|
323
310
|
return node.property.value;
|
|
324
311
|
return undefined;
|
|
325
312
|
};
|
|
326
|
-
const limitValue = (state, limit) => {
|
|
327
|
-
reachSemanticValueLimit(state, limit);
|
|
328
|
-
return { status: "limit-reached", reason: `${limit} reached.` };
|
|
329
|
-
};
|
|
330
313
|
const nestedContext = (context, bindingId) => ({
|
|
331
314
|
state: context.state,
|
|
332
|
-
depth: context.depth + 1,
|
|
333
315
|
bindings: bindingId === undefined
|
|
334
316
|
? context.bindings
|
|
335
317
|
: new Set([...context.bindings, bindingId]),
|
|
@@ -6,37 +6,28 @@ import { inspectBundlerRegistration, inspectEsbuildWrapper, } from "./javascript
|
|
|
6
6
|
import { finalizeLocatedFindings } from "./javascriptStaticAnalysisFindings.js";
|
|
7
7
|
import { createJavaScriptAnalysisAccumulator, } from "./javascriptStaticAnalysisState.js";
|
|
8
8
|
import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
|
|
9
|
-
/** Parse one
|
|
10
|
-
export const analyzeJavaScriptStaticSource = (source
|
|
9
|
+
/** Parse one JavaScript artifact and recover static structure only. */
|
|
10
|
+
export const analyzeJavaScriptStaticSource = (source) => {
|
|
11
11
|
const file = parseJavaScriptSource(source);
|
|
12
12
|
return file === null
|
|
13
13
|
? failedJavaScriptStaticAnalysis()
|
|
14
|
-
: analyzeParsedJavaScriptStaticSource(source, file
|
|
14
|
+
: analyzeParsedJavaScriptStaticSource(source, file);
|
|
15
15
|
};
|
|
16
16
|
/** Recover static structure from an already parsed JavaScript artifact. */
|
|
17
|
-
export const analyzeParsedJavaScriptStaticSource = (source, file
|
|
17
|
+
export const analyzeParsedJavaScriptStaticSource = (source, file) => {
|
|
18
18
|
const accumulator = createJavaScriptAnalysisAccumulator();
|
|
19
|
-
traverseStaticSource(source, file, accumulator
|
|
20
|
-
addSourceMapDirectives(source, accumulator
|
|
21
|
-
return finalizeStaticAnalysis(source, file, accumulator
|
|
19
|
+
traverseStaticSource(source, file, accumulator);
|
|
20
|
+
addSourceMapDirectives(source, accumulator);
|
|
21
|
+
return finalizeStaticAnalysis(source, file, accumulator);
|
|
22
22
|
};
|
|
23
|
-
const traverseStaticSource = (source, file, accumulator
|
|
24
|
-
|
|
25
|
-
accumulator.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (accumulator.visitedNodes > limits.maxAstNodes ||
|
|
30
|
-
(accumulator.visitedNodes % 1_024 === 0 &&
|
|
31
|
-
limits.now() > limits.deadline)) {
|
|
32
|
-
accumulator.truncated = true;
|
|
33
|
-
return t.traverseFast.stop;
|
|
34
|
-
}
|
|
35
|
-
inspectNode(source, node, accumulator, limits);
|
|
36
|
-
return undefined;
|
|
37
|
-
});
|
|
23
|
+
const traverseStaticSource = (source, file, accumulator) => {
|
|
24
|
+
t.traverseFast(file, (node) => {
|
|
25
|
+
accumulator.visitedNodes += 1;
|
|
26
|
+
inspectNode(source, node, accumulator);
|
|
27
|
+
return undefined;
|
|
28
|
+
});
|
|
38
29
|
};
|
|
39
|
-
const finalizeStaticAnalysis = (source, file, accumulator
|
|
30
|
+
const finalizeStaticAnalysis = (source, file, accumulator) => {
|
|
40
31
|
const parserErrors = file.errors.length;
|
|
41
32
|
const limitations = [
|
|
42
33
|
...(parserErrors === 0
|
|
@@ -44,15 +35,6 @@ const finalizeStaticAnalysis = (source, file, accumulator, limits) => {
|
|
|
44
35
|
: [
|
|
45
36
|
"The parser recovered from syntax errors; affected facts are partial.",
|
|
46
37
|
]),
|
|
47
|
-
...(accumulator.truncated
|
|
48
|
-
? ["AST analysis stopped at the configured node or time bound."]
|
|
49
|
-
: []),
|
|
50
|
-
...(accumulator.droppedFindings === 0
|
|
51
|
-
? []
|
|
52
|
-
: ["Static findings were truncated at the configured finding bound."]),
|
|
53
|
-
...(accumulator.structuralTruncation
|
|
54
|
-
? ["Bundler metadata reached a per-record structural bound."]
|
|
55
|
-
: []),
|
|
56
38
|
...(accumulator.unknownFindings === 0
|
|
57
39
|
? []
|
|
58
40
|
: [
|
|
@@ -61,14 +43,11 @@ const finalizeStaticAnalysis = (source, file, accumulator, limits) => {
|
|
|
61
43
|
"JavaScript syntax was parsed as data and was never evaluated.",
|
|
62
44
|
];
|
|
63
45
|
return {
|
|
64
|
-
parse_status:
|
|
65
|
-
? "
|
|
66
|
-
:
|
|
67
|
-
? "partial"
|
|
68
|
-
: "complete",
|
|
46
|
+
parse_status: parserErrors > 0 || accumulator.unknownFindings > 0
|
|
47
|
+
? "partial"
|
|
48
|
+
: "complete",
|
|
69
49
|
parse_error_count: parserErrors,
|
|
70
|
-
visited_ast_nodes:
|
|
71
|
-
dropped_findings: accumulator.droppedFindings,
|
|
50
|
+
visited_ast_nodes: accumulator.visitedNodes,
|
|
72
51
|
references: finalizeLocatedFindings(accumulator.references, accumulator.modules),
|
|
73
52
|
endpoints: finalizeLocatedFindings(accumulator.endpoints, accumulator.modules),
|
|
74
53
|
storage: finalizeLocatedFindings(accumulator.storage, accumulator.modules),
|
|
@@ -87,16 +66,15 @@ const finalizeStaticAnalysis = (source, file, accumulator, limits) => {
|
|
|
87
66
|
limitations,
|
|
88
67
|
};
|
|
89
68
|
};
|
|
90
|
-
const inspectNode = (source, node, accumulator
|
|
69
|
+
const inspectNode = (source, node, accumulator) => {
|
|
91
70
|
const findings = {
|
|
92
71
|
source,
|
|
93
72
|
accumulator,
|
|
94
|
-
maximum: limits.maxFindings,
|
|
95
73
|
};
|
|
96
74
|
inspectElectronStaticNode(node, findings);
|
|
97
75
|
if (t.isCallExpression(node)) {
|
|
98
|
-
inspectBundlerRegistration(source, node, accumulator
|
|
99
|
-
inspectEsbuildWrapper(source, node, accumulator
|
|
76
|
+
inspectBundlerRegistration(source, node, accumulator);
|
|
77
|
+
inspectEsbuildWrapper(source, node, accumulator);
|
|
100
78
|
inspectCall(source, node, findings);
|
|
101
79
|
}
|
|
102
80
|
else if (t.isNewExpression(node))
|
|
@@ -1,68 +1,49 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { collectJavaScriptExports, fingerprintJavaScriptAst, } from "./javascriptAstFingerprint.js";
|
|
3
|
-
import {
|
|
3
|
+
import { addFindingOnce } from "./javascriptStaticAnalysisFindings.js";
|
|
4
4
|
import { argumentValue, calleeName, chunkRuntime, compareCodePoints, factoryRequireName, moduleFactory, modulePropertyName, range, registrationKey, sha256Text, sourceSlice, staticArrayValues, } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
5
|
/** Inspect a bundler registration call and recover its module table. */
|
|
6
|
-
export const inspectBundlerRegistration = (source, call, accumulator
|
|
6
|
+
export const inspectBundlerRegistration = (source, call, accumulator) => {
|
|
7
7
|
const runtime = chunkRuntime(call);
|
|
8
8
|
const entry = call.arguments[0];
|
|
9
9
|
if (runtime === undefined || !t.isArrayExpression(entry))
|
|
10
10
|
return;
|
|
11
11
|
const chunkIds = entry.elements[0];
|
|
12
12
|
const table = entry.elements[1];
|
|
13
|
-
const runtimeValue = runtimeMetadata(entry.elements[2]
|
|
13
|
+
const runtimeValue = runtimeMetadata(entry.elements[2]);
|
|
14
14
|
if (!t.isArrayExpression(chunkIds) || !t.isObjectExpression(table))
|
|
15
15
|
return;
|
|
16
|
-
const recovered = recoverBundlerModules(source, table, accumulator
|
|
17
|
-
const chunkKeys = staticArrayValues(chunkIds
|
|
18
|
-
if (chunkKeys.omitted > 0) {
|
|
19
|
-
accumulator.droppedFindings += chunkKeys.omitted;
|
|
20
|
-
accumulator.structuralTruncation = true;
|
|
21
|
-
}
|
|
16
|
+
const recovered = recoverBundlerModules(source, table, accumulator);
|
|
17
|
+
const chunkKeys = staticArrayValues(chunkIds);
|
|
22
18
|
accumulator.unknownFindings += chunkKeys.unknown;
|
|
23
|
-
if (runtimeValue.omittedEntryModuleKeys > 0 ||
|
|
24
|
-
runtimeValue.omittedAsyncChunkKeys > 0 ||
|
|
25
|
-
recovered.omittedAsyncChunkKeys > 0) {
|
|
26
|
-
accumulator.droppedFindings +=
|
|
27
|
-
runtimeValue.omittedEntryModuleKeys +
|
|
28
|
-
runtimeValue.omittedAsyncChunkKeys +
|
|
29
|
-
recovered.omittedAsyncChunkKeys;
|
|
30
|
-
accumulator.structuralTruncation = true;
|
|
31
|
-
}
|
|
32
19
|
accumulator.unknownFindings +=
|
|
33
20
|
runtimeValue.unknownEntryModuleKeys +
|
|
34
21
|
runtimeValue.unknownAsyncChunkKeys +
|
|
35
22
|
recovered.unknownAsyncChunkKeys;
|
|
36
|
-
const asyncChunkKeys =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
23
|
+
const asyncChunkKeys = uniqueValues([
|
|
24
|
+
...runtimeValue.asyncChunkKeys,
|
|
25
|
+
...recovered.asyncChunkKeys,
|
|
26
|
+
]);
|
|
41
27
|
const registration = {
|
|
42
28
|
bundler: runtime.toLowerCase().includes("rspack")
|
|
43
29
|
? "rspack"
|
|
44
30
|
: "webpack",
|
|
45
31
|
runtime,
|
|
46
32
|
chunk_keys: chunkKeys.values,
|
|
47
|
-
omitted_chunk_keys: chunkKeys.omitted,
|
|
48
33
|
unknown_chunk_keys: chunkKeys.unknown,
|
|
49
34
|
runtime_require_name: runtimeValue.requireName,
|
|
50
35
|
runtime_module_cache_status: bundlerModuleCacheStatus(source),
|
|
51
36
|
entry_module_keys: runtimeValue.entryModuleKeys,
|
|
52
|
-
omitted_entry_module_keys: runtimeValue.omittedEntryModuleKeys,
|
|
53
37
|
unknown_entry_module_keys: runtimeValue.unknownEntryModuleKeys,
|
|
54
38
|
async_chunk_keys: asyncChunkKeys.values,
|
|
55
|
-
omitted_async_chunk_keys: runtimeValue.omittedAsyncChunkKeys +
|
|
56
|
-
recovered.omittedAsyncChunkKeys +
|
|
57
|
-
asyncChunkKeys.omitted,
|
|
58
39
|
unknown_async_chunk_keys: runtimeValue.unknownAsyncChunkKeys + recovered.unknownAsyncChunkKeys,
|
|
59
40
|
modules: recovered.modules.sort((left, right) => compareCodePoints(left.module_key, right.module_key)),
|
|
60
41
|
location: range(call),
|
|
61
42
|
};
|
|
62
|
-
|
|
43
|
+
addFindingOnce(accumulator, `registration\0${registrationKey(registration)}`, () => accumulator.registrations.push(registration));
|
|
63
44
|
};
|
|
64
45
|
/** Inspect esbuild helper wrappers and recover their literal module tables. */
|
|
65
|
-
export const inspectEsbuildWrapper = (source, call, accumulator
|
|
46
|
+
export const inspectEsbuildWrapper = (source, call, accumulator) => {
|
|
66
47
|
const name = calleeName(call.callee);
|
|
67
48
|
const wrapperKind = name === "__commonJS" || name.endsWith(".__commonJS")
|
|
68
49
|
? "commonjs"
|
|
@@ -72,74 +53,55 @@ export const inspectEsbuildWrapper = (source, call, accumulator, limits) => {
|
|
|
72
53
|
const table = call.arguments[0];
|
|
73
54
|
if (wrapperKind === null || !t.isObjectExpression(table))
|
|
74
55
|
return;
|
|
75
|
-
const recovered = recoverBundlerModules(source, table, accumulator
|
|
56
|
+
const recovered = recoverBundlerModules(source, table, accumulator);
|
|
76
57
|
if (recovered.modules.length === 0)
|
|
77
58
|
return;
|
|
78
|
-
if (recovered.omittedAsyncChunkKeys > 0) {
|
|
79
|
-
accumulator.droppedFindings += recovered.omittedAsyncChunkKeys;
|
|
80
|
-
accumulator.structuralTruncation = true;
|
|
81
|
-
}
|
|
82
59
|
accumulator.unknownFindings += recovered.unknownAsyncChunkKeys;
|
|
83
60
|
const registration = {
|
|
84
61
|
bundler: "esbuild",
|
|
85
62
|
runtime: `esbuild-${wrapperKind}`,
|
|
86
63
|
chunk_keys: [`${wrapperKind}@${String(call.start ?? 0)}`],
|
|
87
|
-
omitted_chunk_keys: 0,
|
|
88
64
|
unknown_chunk_keys: 0,
|
|
89
65
|
runtime_require_name: null,
|
|
90
66
|
runtime_module_cache_status: "not-observed",
|
|
91
67
|
entry_module_keys: [],
|
|
92
|
-
omitted_entry_module_keys: 0,
|
|
93
68
|
unknown_entry_module_keys: 0,
|
|
94
69
|
async_chunk_keys: recovered.asyncChunkKeys,
|
|
95
|
-
omitted_async_chunk_keys: recovered.omittedAsyncChunkKeys,
|
|
96
70
|
unknown_async_chunk_keys: recovered.unknownAsyncChunkKeys,
|
|
97
71
|
modules: recovered.modules.sort((left, right) => compareCodePoints(left.module_key, right.module_key)),
|
|
98
72
|
location: range(call),
|
|
99
73
|
};
|
|
100
|
-
|
|
74
|
+
addFindingOnce(accumulator, `registration\0${registrationKey(registration)}`, () => accumulator.registrations.push(registration));
|
|
101
75
|
};
|
|
102
|
-
const recoverBundlerModules = (source, table, accumulator
|
|
76
|
+
const recoverBundlerModules = (source, table, accumulator) => {
|
|
103
77
|
const modules = [];
|
|
104
78
|
const asyncChunkKeys = [];
|
|
105
|
-
let omittedAsyncChunkKeys = 0;
|
|
106
79
|
let unknownAsyncChunkKeys = 0;
|
|
107
80
|
for (const property of table.properties) {
|
|
108
|
-
const recovered = recoverBundlerModule(source, property, accumulator
|
|
81
|
+
const recovered = recoverBundlerModule(source, property, accumulator);
|
|
109
82
|
if (recovered === null)
|
|
110
83
|
continue;
|
|
111
84
|
modules.push(recovered.module);
|
|
112
85
|
asyncChunkKeys.push(...recovered.asyncChunkKeys);
|
|
113
|
-
omittedAsyncChunkKeys += recovered.omittedAsyncChunkKeys;
|
|
114
86
|
unknownAsyncChunkKeys += recovered.unknownAsyncChunkKeys;
|
|
115
87
|
}
|
|
116
88
|
return {
|
|
117
89
|
modules,
|
|
118
90
|
asyncChunkKeys,
|
|
119
|
-
omittedAsyncChunkKeys,
|
|
120
91
|
unknownAsyncChunkKeys,
|
|
121
92
|
};
|
|
122
93
|
};
|
|
123
|
-
const recoverBundlerModule = (source, property, accumulator
|
|
94
|
+
const recoverBundlerModule = (source, property, accumulator) => {
|
|
124
95
|
const factory = moduleFactory(property);
|
|
125
96
|
if (factory === undefined)
|
|
126
97
|
return null;
|
|
127
|
-
if (accumulator.moduleCount >= limits.maxModules) {
|
|
128
|
-
accumulator.droppedFindings += 1;
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
accumulator.moduleCount += 1;
|
|
132
98
|
const key = modulePropertyName(property);
|
|
133
99
|
if (key.startsWith("[computed@") || key.startsWith("[unknown@"))
|
|
134
100
|
accumulator.unknownFindings += 1;
|
|
135
|
-
const fingerprint = fingerprintJavaScriptAst(factory
|
|
136
|
-
const exportsValue = collectJavaScriptExports(factory
|
|
101
|
+
const fingerprint = fingerprintJavaScriptAst(factory);
|
|
102
|
+
const exportsValue = collectJavaScriptExports(factory);
|
|
137
103
|
const requireName = factoryRequireName(factory);
|
|
138
|
-
const asyncChunks = collectBundlerAsyncChunkKeys(factory, requireName
|
|
139
|
-
if (fingerprint.truncated || exportsValue.truncated) {
|
|
140
|
-
accumulator.droppedFindings += 1;
|
|
141
|
-
accumulator.structuralTruncation = true;
|
|
142
|
-
}
|
|
104
|
+
const asyncChunks = collectBundlerAsyncChunkKeys(factory, requireName);
|
|
143
105
|
if (typeof factory.start === "number" && typeof factory.end === "number")
|
|
144
106
|
accumulator.modules.push({
|
|
145
107
|
start: factory.start,
|
|
@@ -152,66 +114,49 @@ const recoverBundlerModule = (source, property, accumulator, limits) => {
|
|
|
152
114
|
module_key: key,
|
|
153
115
|
factory_require_name: requireName,
|
|
154
116
|
source_sha256: sha256Text(sourceSlice(source, factory)),
|
|
155
|
-
structural_fingerprint_sha256: fingerprint
|
|
156
|
-
|
|
157
|
-
: fingerprint.sha256,
|
|
158
|
-
structural_fingerprint_algorithm: fingerprint.truncated
|
|
159
|
-
? null
|
|
160
|
-
: "babel-ast-v1",
|
|
161
|
-
structural_fingerprint_status: fingerprint.truncated
|
|
162
|
-
? "truncated"
|
|
163
|
-
: "complete",
|
|
117
|
+
structural_fingerprint_sha256: fingerprint,
|
|
118
|
+
structural_fingerprint_algorithm: "babel-ast-v1",
|
|
164
119
|
exports: exportsValue.values,
|
|
165
|
-
exports_truncated: exportsValue.truncated,
|
|
166
120
|
location: range(factory),
|
|
167
121
|
},
|
|
168
122
|
asyncChunkKeys: asyncChunks.values,
|
|
169
|
-
omittedAsyncChunkKeys: asyncChunks.omitted,
|
|
170
123
|
unknownAsyncChunkKeys: asyncChunks.unknown,
|
|
171
124
|
};
|
|
172
125
|
};
|
|
173
|
-
const runtimeMetadata = (node
|
|
126
|
+
const runtimeMetadata = (node) => {
|
|
174
127
|
if (!isBundlerFunction(node))
|
|
175
128
|
return {
|
|
176
129
|
requireName: null,
|
|
177
130
|
entryModuleKeys: [],
|
|
178
|
-
omittedEntryModuleKeys: 0,
|
|
179
131
|
unknownEntryModuleKeys: node === null || node === undefined ? 0 : 1,
|
|
180
132
|
asyncChunkKeys: [],
|
|
181
|
-
omittedAsyncChunkKeys: 0,
|
|
182
133
|
unknownAsyncChunkKeys: 0,
|
|
183
134
|
};
|
|
184
135
|
const parameter = node.params[0];
|
|
185
|
-
const requireName = t.isIdentifier(parameter)
|
|
186
|
-
? parameter.name.slice(0, 4_096)
|
|
187
|
-
: null;
|
|
136
|
+
const requireName = t.isIdentifier(parameter) ? parameter.name : null;
|
|
188
137
|
if (requireName === null)
|
|
189
138
|
return {
|
|
190
139
|
requireName,
|
|
191
140
|
entryModuleKeys: [],
|
|
192
|
-
omittedEntryModuleKeys: 0,
|
|
193
141
|
unknownEntryModuleKeys: 1,
|
|
194
142
|
asyncChunkKeys: [],
|
|
195
|
-
omittedAsyncChunkKeys: 0,
|
|
196
143
|
unknownAsyncChunkKeys: 0,
|
|
197
144
|
};
|
|
198
|
-
const entries = collectBundlerEntryModuleKeys(node, requireName
|
|
199
|
-
const asyncChunks = collectBundlerAsyncChunkKeys(node, requireName
|
|
145
|
+
const entries = collectBundlerEntryModuleKeys(node, requireName);
|
|
146
|
+
const asyncChunks = collectBundlerAsyncChunkKeys(node, requireName);
|
|
200
147
|
return {
|
|
201
148
|
requireName,
|
|
202
149
|
entryModuleKeys: entries.values,
|
|
203
|
-
omittedEntryModuleKeys: entries.omitted,
|
|
204
150
|
unknownEntryModuleKeys: entries.unknown,
|
|
205
151
|
asyncChunkKeys: asyncChunks.values,
|
|
206
|
-
omittedAsyncChunkKeys: asyncChunks.omitted,
|
|
207
152
|
unknownAsyncChunkKeys: asyncChunks.unknown,
|
|
208
153
|
};
|
|
209
154
|
};
|
|
210
|
-
const collectBundlerEntryModuleKeys = (factory, requireName
|
|
211
|
-
const collectBundlerAsyncChunkKeys = (factory, requireName
|
|
212
|
-
? { values: [],
|
|
213
|
-
: collectBundlerCallArgumentValues(factory, `${requireName}.e
|
|
214
|
-
const collectBundlerCallArgumentValues = (factory, callee
|
|
155
|
+
const collectBundlerEntryModuleKeys = (factory, requireName) => collectBundlerCallArgumentValues(factory, requireName);
|
|
156
|
+
const collectBundlerAsyncChunkKeys = (factory, requireName) => requireName === null
|
|
157
|
+
? { values: [], unknown: 0 }
|
|
158
|
+
: collectBundlerCallArgumentValues(factory, `${requireName}.e`);
|
|
159
|
+
const collectBundlerCallArgumentValues = (factory, callee) => {
|
|
215
160
|
const values = [];
|
|
216
161
|
let unknown = 0;
|
|
217
162
|
t.traverseFast(factory, (node) => {
|
|
@@ -226,19 +171,15 @@ const collectBundlerCallArgumentValues = (factory, callee, maximum) => {
|
|
|
226
171
|
values.push(value);
|
|
227
172
|
return undefined;
|
|
228
173
|
});
|
|
229
|
-
return
|
|
174
|
+
return uniqueValues(values, unknown);
|
|
230
175
|
};
|
|
231
176
|
const isBundlerFunction = (node) => t.isFunctionExpression(node) ||
|
|
232
177
|
t.isArrowFunctionExpression(node) ||
|
|
233
178
|
t.isObjectMethod(node);
|
|
234
|
-
const
|
|
235
|
-
const
|
|
236
|
-
...new Set(values.map((value) => value.slice(0, 4_096))),
|
|
237
|
-
].sort(compareCodePoints);
|
|
238
|
-
const retained = bounded.slice(0, Math.max(0, maximum));
|
|
179
|
+
const uniqueValues = (values, unknown = 0) => {
|
|
180
|
+
const unique = [...new Set(values)].sort(compareCodePoints);
|
|
239
181
|
return {
|
|
240
|
-
values:
|
|
241
|
-
omitted: Math.max(0, bounded.length - retained.length),
|
|
182
|
+
values: unique,
|
|
242
183
|
unknown,
|
|
243
184
|
};
|
|
244
185
|
};
|