rea-agents 6.4.0 → 6.5.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/DISCLAIMER.md +136 -0
- package/README.md +67 -16
- package/THIRD_PARTY_NOTICES.md +134 -0
- package/bridge/android/ReaJadxBridge.java +123 -11
- package/bridge/cutter/rea_bridge.py +816 -0
- package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
- package/bridge/ghidra/ReaGhidraBridge.java +1181 -123
- package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
- package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
- package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
- package/bridge/hopper_bridge.py +103 -69
- package/bridge/mitmproxy/capture.py +189 -13
- package/bridge/native/rea_lldb_tracer.py +40 -6
- package/bridge/process/ProcessRunTokenReader.swift +76 -34
- package/bridge/pwntools/layout_impl.py +5 -0
- package/bridge/pwntools/recorded_crash_impl.py +31 -10
- package/dist/adb/AdbConfiguration.js +15 -3
- package/dist/adb/AdbDeviceOutput.js +59 -37
- package/dist/adb/AdbDirectoryListing.js +80 -0
- package/dist/adb/AdbHostFileName.js +34 -0
- package/dist/adb/AdbProvider.js +416 -173
- package/dist/adb/AdbShellOutput.js +55 -57
- package/dist/android/JadxAnalysis.js +32 -7
- package/dist/android/JadxConfiguration.js +119 -29
- package/dist/android/JadxDoctor.js +115 -0
- package/dist/android/JadxMcpTransport.js +5 -3
- package/dist/android/JadxProtocol.js +14 -0
- package/dist/android/JadxProvider.js +15 -9
- package/dist/android/JadxRelease.js +12 -1
- package/dist/android/JadxWorkspaceRoot.js +157 -0
- package/dist/apktool/ApktoolConfiguration.js +165 -22
- package/dist/apktool/ApktoolDecodeOutput.js +124 -41
- package/dist/apktool/ApktoolProvider.js +70 -33
- package/dist/application/AnalysisContextQueries.js +5 -8
- package/dist/application/AnalysisProvider.js +24 -20
- package/dist/application/AppBundleExecutable.js +5 -5
- package/dist/application/BinaryTargetResolver.js +195 -38
- package/dist/application/BrowserEvidence.js +1 -1
- package/dist/application/BrowserObservationService.js +13 -2
- package/dist/application/BrowserScenarioCaptureService.js +0 -1
- package/dist/application/CallPathTracing.js +52 -13
- package/dist/application/CapabilityInventory.js +168 -28
- package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
- package/dist/application/ClientConfigurationDocument.js +102 -25
- package/dist/application/ClientConfigurationFiles.js +51 -14
- package/dist/application/ClientRegistrationEnvironment.js +10 -4
- package/dist/application/ClientRegistrationIdentity.js +94 -29
- package/dist/application/ClientRegistrationStatus.js +180 -59
- package/dist/application/DirectAnalysis.js +85 -30
- package/dist/application/DirectAnalysisStatus.js +13 -1
- package/dist/application/Doctor.js +113 -32
- package/dist/application/DoctorDiagnostics.js +34 -12
- package/dist/application/DoctorProviderIds.js +2 -0
- package/dist/application/DoctorScope.js +11 -2
- package/dist/application/DshCordisPatch.js +355 -0
- package/dist/application/DshCordisYaml.js +155 -0
- package/dist/application/EnhancedLiteralTracing.js +30 -16
- package/dist/application/EnhancedToolTypes.js +0 -1
- package/dist/application/EnhancedTools.js +164 -54
- package/dist/application/EvidenceBundleCommands.js +30 -7
- package/dist/application/EvidenceBundleFiles.js +29 -7
- package/dist/application/FunctionAnalysisEvidence.js +3 -0
- package/dist/application/GeminiClientSettings.js +25 -13
- package/dist/application/HermesConfigurationYaml.js +272 -0
- package/dist/application/InventoryProjectionEvidence.js +0 -1
- package/dist/application/InvestigationProviders.js +13 -3
- package/dist/application/JsonFiles.js +110 -20
- package/dist/application/JsonInputFile.js +220 -62
- package/dist/application/LinuxHopper.js +126 -48
- package/dist/application/MacHopper.js +21 -17
- package/dist/application/MacHopperPaths.js +40 -0
- package/dist/application/{MipsElfAbiFlags.js → MipsElfMetadata.js} +70 -9
- package/dist/application/MipsElfSharedLoad.js +164 -0
- package/dist/application/MipsGnuAttributes.js +90 -0
- package/dist/application/MsixPackageStorage.js +133 -0
- package/dist/application/ProgressReporter.js +1 -1
- package/dist/application/ProviderOperationExecution.js +11 -3
- package/dist/application/ReconstructionCoverageService.js +0 -1
- package/dist/application/ReconstructionObligationCandidates.js +3 -2
- package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +15 -33
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
- package/dist/application/ReconstructionObligationLedgerService.js +3 -1
- package/dist/application/ReconstructionObligationOriginalCases.js +2 -1
- package/dist/application/ReferenceSourceImport.js +24 -8
- package/dist/application/ReferenceSourceImportEntries.js +22 -21
- package/dist/application/ReferenceSourceImportTypes.js +0 -1
- package/dist/application/ReferenceSourceVcsAdapter.js +33 -16
- package/dist/application/RegularFileRead.js +46 -18
- package/dist/application/Setup.js +36 -10
- package/dist/application/SetupClientConfiguration.js +206 -37
- package/dist/application/SetupClients.js +12 -6
- package/dist/application/SetupHost.js +66 -24
- package/dist/application/SetupInstallFailure.js +42 -2
- package/dist/application/SetupPlan.js +79 -50
- package/dist/application/SetupRecoveryBackup.js +66 -0
- package/dist/application/SetupRegistrationEnvironment.js +2 -1
- package/dist/application/SetupSkill.js +323 -76
- package/dist/application/SupportedClients.js +162 -28
- package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
- package/dist/application/Uninstall.js +273 -82
- package/dist/application/UninstallFailure.js +14 -0
- package/dist/application/Update.js +54 -25
- package/dist/application/UpdateFailure.js +17 -0
- package/dist/application/UpdateMaintenance.js +11 -29
- package/dist/application/UpdateRuntime.js +141 -27
- package/dist/application/WebModuleTraceService.js +7 -0
- package/dist/application/WebNetworkCaptureService.js +16 -7
- package/dist/application/WebSourceLocationService.js +20 -4
- package/dist/application/WindowsCapabilities.js +18 -15
- package/dist/application/WorkflowEvidence.js +24 -1
- package/dist/application/analysisView/AnalysisViewService.js +90 -12
- package/dist/application/android/AndroidPackageInspection.js +25 -0
- package/dist/application/android/AndroidSearchEvidenceSummary.js +100 -0
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -1
- package/dist/application/binary/AnalysisProviderRegistry.js +36 -21
- package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
- package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
- package/dist/application/binary/BinarySession.js +248 -96
- package/dist/application/binary/BinarySessionExecution.js +5 -4
- package/dist/application/binary/BinarySessionOpen.js +13 -6
- package/dist/application/binary/BinarySessionRecords.js +33 -7
- package/dist/application/binary/BinarySessionStatus.js +93 -23
- package/dist/application/binary/BinaryTargetSummary.js +9 -0
- package/dist/application/binary/CompositeProvider.js +71 -28
- package/dist/application/binary/LazyAnalysisProvider.js +3 -1
- package/dist/application/binary/SessionProviderRouter.js +5 -2
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +11 -1
- package/dist/application/binaryDiagnostics/PeResourcesService.js +3 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +14 -3
- package/dist/application/captures/PacketCaptureService.js +83 -0
- package/dist/application/closeOwnedWebResources.js +7 -0
- package/dist/application/electron/ElectronFusePort.js +1 -0
- package/dist/application/electron/ElectronFuseService.js +80 -0
- package/dist/application/evm/EvmInterfaceService.js +1 -0
- package/dist/application/flutter/DartAotInspection.js +26 -0
- package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
- package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
- package/dist/application/frida/FridaInstrumentationPort.js +8 -0
- package/dist/application/frida/FridaInstrumentationService.js +310 -0
- package/dist/application/frida/fridaInputErrors.js +17 -0
- package/dist/application/go/GoBinaryPort.js +1 -0
- package/dist/application/go/GoBinaryService.js +80 -0
- package/dist/application/harmony/HarmonyApplicationService.js +17 -0
- package/dist/application/investigation/EvidenceLedger.js +40 -14
- package/dist/application/investigation/InvestigationRecords.js +12 -21
- package/dist/application/investigation/UnknownEvidence.js +22 -18
- package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
- package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
- package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +26 -7
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +1 -1
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +47 -9
- package/dist/application/javascript/ElectronObservationService.js +0 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +15 -0
- package/dist/application/javascript/JavaScriptApplicationService.js +29 -14
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +86 -34
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -21
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +31 -7
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +25 -4
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +147 -41
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +156 -7
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +892 -181
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +43 -30
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +2 -0
- package/dist/application/javascript/JavaScriptModuleRelationships.js +33 -11
- package/dist/application/javascript/JavaScriptRecoveryService.js +29 -9
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +2 -1
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +42 -26
- package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
- package/dist/application/managed/ManagedApplicationGraphService.js +0 -1
- package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
- package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
- package/dist/application/managed/ManagedReconstructionService.js +0 -1
- package/dist/application/native/NativeCallRoutes.js +54 -34
- package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
- package/dist/application/native/NativeUiActionTrace.js +35 -22
- package/dist/application/native/NativeValueTrace.js +57 -23
- package/dist/application/pcap/PcapAnalysisPort.js +1 -0
- package/dist/application/pcap/PcapAnalysisService.js +24 -0
- package/dist/application/process/ProcessCli.js +33 -13
- package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
- package/dist/application/reverse/ReverseEngineeringService.js +688 -0
- package/dist/application/rust/RustBinaryPort.js +1 -0
- package/dist/application/rust/RustBinaryService.js +80 -0
- package/dist/application/signals/SignalRecordingService.js +83 -0
- package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
- package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
- package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
- package/dist/application/wasm/WasmArtifactPort.js +1 -0
- package/dist/application/wasm/WasmArtifactService.js +77 -0
- package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
- package/dist/artifacts/ArtifactHash.js +13 -2
- package/dist/artifacts/ArtifactPaths.js +4 -7
- package/dist/artifacts/ArtifactProvider.js +8 -4
- package/dist/artifacts/ArtifactReader.js +13 -1
- package/dist/artifacts/ArtifactResourceScope.js +12 -3
- package/dist/artifacts/AsarArtifactReader.js +177 -112
- package/dist/artifacts/AsarListing.js +78 -0
- package/dist/artifacts/DirectoryArtifactReader.js +94 -24
- package/dist/artifacts/MachOSliceArtifactReader.js +83 -10
- package/dist/artifacts/NativeDmgArtifactReader.js +161 -58
- package/dist/artifacts/OrderedReads.js +57 -0
- package/dist/artifacts/SafeOutputTree.js +19 -4
- package/dist/artifacts/ZipArtifactReader.js +117 -12
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +77 -68
- package/dist/artifacts/apple/DylibResolutionReader.js +11 -5
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +57 -21
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +64 -12
- package/dist/artifacts/apple/KeyedArchiveReader.js +3 -2
- package/dist/artifacts/apple/MachoLoadCommandReader.js +62 -61
- package/dist/artifacts/apple/NibArchive.js +11 -4
- package/dist/artifacts/apple/PlistNumberLiterals.js +2 -2
- package/dist/artifacts/extraction/ArtifactExtraction.js +6 -7
- package/dist/artifacts/hostExecutableMarking.js +16 -0
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +134 -34
- package/dist/artifacts/inventory/ArtifactInventory.js +2 -2
- package/dist/artifacts/inventory/classify.js +32 -15
- package/dist/artifacts/inventory/reader.js +36 -21
- package/dist/artifacts/inventory/scanCanonical.js +25 -18
- package/dist/artifacts/inventory/scanReader.js +36 -10
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +163 -7
- package/dist/artifacts/readStableArtifact.js +28 -4
- package/dist/browser/BrowserProcessStartup.js +20 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +60 -44
- package/dist/browser/BrowserScenarioSecrets.js +176 -46
- package/dist/browser/CdpBrowserProvider.js +70 -99
- package/dist/browser/CdpCaptureDocuments.js +231 -69
- package/dist/browser/CdpCaptureDomSvg.js +94 -61
- package/dist/browser/CdpCaptureEventBodyShapes.js +9 -5
- package/dist/browser/CdpCaptureEventHandlers.js +23 -12
- package/dist/browser/CdpCaptureEvents.js +49 -10
- package/dist/browser/CdpCaptureStorage.js +22 -5
- package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
- package/dist/browser/CdpCaptureValues.js +0 -1
- package/dist/browser/CdpConnection.js +3 -4
- package/dist/browser/CdpElectronInspection.js +14 -4
- package/dist/browser/CdpElectronProvider.js +7 -2
- package/dist/browser/CdpElectronScripts.js +2 -1
- package/dist/browser/CdpElectronWorkers.js +7 -2
- package/dist/browser/CdpEndpoint.js +143 -17
- package/dist/browser/CdpObservationSession.js +24 -8
- package/dist/browser/CdpPageCapture.js +66 -16
- package/dist/browser/CdpPageCaptureScripts.js +4 -3
- package/dist/browser/CdpPageCaptureWorkers.js +5 -1
- package/dist/browser/CdpSafeMetadata.js +9 -5
- package/dist/browser/CdpScreenshot.js +5 -14
- package/dist/browser/CdpSnapshotStrings.js +21 -0
- package/dist/browser/CdpTargetSession.js +29 -2
- package/dist/browser/CdpWebMcpDiscovery.js +23 -6
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +4 -4
- package/dist/browser/PlaywrightElectronActiveActions.js +4 -4
- package/dist/browser/PlaywrightElectronActiveProjection.js +16 -4
- package/dist/browser/PlaywrightElectronActiveProvider.js +103 -30
- package/dist/browser/PlaywrightExecutionBoundary.js +2 -2
- package/dist/browser/PlaywrightScenarioBrowser.js +9 -6
- package/dist/browser/PlaywrightScenarioEvents.js +198 -36
- package/dist/browser/PlaywrightScenarioServiceWorkers.js +249 -0
- package/dist/browser/PlaywrightScenarioSession.js +61 -29
- package/dist/browser/WebSourceMapFetcher.js +163 -80
- package/dist/browser/assets/LocalWebScriptArtifacts.js +24 -3
- package/dist/browser/assets/PublishWebScripts.js +13 -2
- package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
- package/dist/browser/assets/WebArtifactReads.js +11 -3
- package/dist/browser/assets/WebSourceLocationArtifacts.js +38 -3
- package/dist/browser/history/CaptureFailures.js +22 -8
- package/dist/browser/history/CaptureFormatError.js +2 -2
- package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
- package/dist/browser/history/CaptureRedaction.js +16 -3
- package/dist/browser/history/CaptureRelease.js +20 -2
- package/dist/browser/history/HarCapture.js +16 -23
- package/dist/browser/history/HarSchema.js +36 -36
- package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
- package/dist/browser/history/NodeCaptureAdapter.js +48 -0
- package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +18 -9
- package/dist/browser/history/QlogCapture.js +385 -0
- package/dist/browser/history/SazCapture.js +130 -0
- package/dist/browser/history/SazHttp.js +61 -0
- package/dist/browser/history/SazMetadata.js +92 -0
- package/dist/browser/history/SazProjection.js +90 -0
- package/dist/browser/modules/NativeModuleResolver.js +177 -110
- package/dist/browser/modules/WebModuleArtifacts.js +40 -3
- package/dist/browser/network/PlaywrightNetworkContent.js +40 -5
- package/dist/browser/network/PlaywrightScenarioNetwork.js +125 -11
- package/dist/captures/TsharkCaptureProvider.js +370 -0
- package/dist/captures/parseFieldDiscovery.js +66 -0
- package/dist/captures/parsePacketOutput.js +21 -0
- package/dist/catalogIdentity.js +46 -35
- package/dist/cli/adbCommands.js +2 -2
- package/dist/cli/analysisViewCommands.js +1 -1
- package/dist/cli/androidCommands.js +11 -2
- package/dist/cli/apktoolCommands.js +10 -11
- package/dist/cli/applicationCommands.js +44 -17
- package/dist/cli/artifactCommands.js +1 -1
- package/dist/cli/binaryDiagnosticsCommands.js +14 -10
- package/dist/cli/browserAdvancedCommands.js +37 -24
- package/dist/cli/browserCommands.js +46 -29
- package/dist/cli/captureCommands.js +72 -0
- package/dist/cli/cliResultOutput.js +188 -0
- package/dist/cli/coreBinaryCommands.js +73 -27
- package/dist/cli/coreNativeCommands.js +53 -31
- package/dist/cli/cutterCommands.js +50 -0
- package/dist/cli/electronCommands.js +45 -3
- package/dist/cli/evmCommands.js +4 -5
- package/dist/cli/finishAnalysisCommand.js +44 -0
- package/dist/cli/firmwareCommands.js +14 -36
- package/dist/cli/flutterCommands.js +69 -0
- package/dist/cli/fridaCommands.js +211 -0
- package/dist/cli/goCommands.js +20 -0
- package/dist/cli/interactiveSetup.js +11 -1
- package/dist/cli/javascriptApplicationAnalysis.js +1 -1
- package/dist/cli/javascriptRecoveryCommands.js +7 -0
- package/dist/cli/jsonOutput.js +2 -2
- package/dist/cli/managedCommands.js +31 -3
- package/dist/cli/options.js +20 -2
- package/dist/cli/pcapCommands.js +47 -0
- package/dist/cli/processCommands.js +1 -1
- package/dist/cli/reverseEngineeringCommands.js +268 -0
- package/dist/cli/rustCommands.js +21 -0
- package/dist/cli/setupCommands.js +40 -12
- package/dist/cli/signalCommands.js +72 -0
- package/dist/cli/sqliteCommands.js +79 -0
- package/dist/cli/utilityCommands.js +116 -74
- package/dist/cli/wasmCommands.js +61 -0
- package/dist/cli/webModuleCommands.js +36 -32
- package/dist/cli/webNetworkCaptureCommands.js +8 -8
- package/dist/cli-runtime/AbortablePromise-BVBemxbD.js +123 -0
- package/dist/cli-runtime/AnalysisProvider-D0Us2OTk.js +27 -0
- package/dist/cli-runtime/AnalysisSnapshotCache-BXS0wRd2.js +710 -0
- package/dist/cli-runtime/ArtifactReader-BXkffc1D.js +55 -0
- package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +114 -0
- package/dist/cli-runtime/AsarHeader-CnzOzYEH.js +31 -0
- package/dist/cli-runtime/BinarySessionStatus-DnMxMk-r.js +211 -0
- package/dist/cli-runtime/BinaryTargetResolver-CVIJ_s1A.js +1308 -0
- package/dist/cli-runtime/BoundedFileBytes-BU30odTm.js +39 -0
- package/dist/cli-runtime/CdpTargetSession-DGX5pV9w.js +650 -0
- package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +36 -0
- package/dist/cli-runtime/ClientConfigurationDocument-ffQ9X0Se.js +1957 -0
- package/dist/cli-runtime/ClientRegistrationStatus-DszCyPEU.js +509 -0
- package/dist/cli-runtime/CurrentEntrypointPath-D5FRNdkq.js +14 -0
- package/dist/cli-runtime/DirectAnalysis-BgvAtpN3.js +528 -0
- package/dist/cli-runtime/Doctor-DIpf_I7N.js +588 -0
- package/dist/cli-runtime/ElectronFileScope-dpHm2nrS.js +1054 -0
- package/dist/cli-runtime/ExecFileOutput-BEQs-lDD.js +117 -0
- package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +1094 -0
- package/dist/cli-runtime/InterfaceBuilderDecodeBudget-D4omRUe4.js +279 -0
- package/dist/cli-runtime/InventoryProjectionEvidence-DIsI4DJ6.js +49 -0
- package/dist/cli-runtime/InvestigationProviders-DoQRIHii.js +117 -0
- package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js +160 -0
- package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js +75 -0
- package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
- package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +428 -0
- package/dist/cli-runtime/JsonFiles-DQa1PRKy.js +708 -0
- package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
- package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +434 -0
- package/dist/cli-runtime/MachoLoadCommandReader-C7e074Ze.js +510 -0
- package/dist/cli-runtime/ManagedSnapshot-rqyBHcdL.js +4185 -0
- package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +112 -0
- package/dist/cli-runtime/PrivateRuntimeRoot-DAy0PiBM.js +263 -0
- package/dist/cli-runtime/ProcessOwnership-DXC5-UWt.js +1378 -0
- package/dist/cli-runtime/ProviderDeadline-8m2pFRDc.js +122 -0
- package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +139 -0
- package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +125 -0
- package/dist/cli-runtime/SafeOutputTree-D6U15GXd.js +524 -0
- package/dist/cli-runtime/SetupHost-FkYWswsq.js +1098 -0
- package/dist/cli-runtime/SupportedClients-DaX6Lt2d.js +1049 -0
- package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
- package/dist/cli-runtime/Update-CbTC_eg1.js +143 -0
- package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
- package/dist/cli-runtime/ZipArtifactReader-B8ZgNe4D.js +248 -0
- package/dist/cli-runtime/analysisErrorCleanup-Do6YeeoD.js +32 -0
- package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +497 -0
- package/dist/cli-runtime/appleArchiveFormat-tVoI2ykA.js +263 -0
- package/dist/cli-runtime/application__DirectAnalysisStatus-DpOejOf0.js +150 -0
- package/dist/cli-runtime/application__EnhancedTools-oFE2bOjs.js +1787 -0
- package/dist/cli-runtime/application__FunctionAnalysisEvidence-B6osuhvW.js +41 -0
- package/dist/cli-runtime/application__ReconstructionCoverageService-DN3wTFQj.js +32 -0
- package/dist/cli-runtime/application__ReconstructionObligationLedgerService-CKcTppX9.js +815 -0
- package/dist/cli-runtime/application__Setup-XpMaRNjy.js +514 -0
- package/dist/cli-runtime/application__Uninstall-_23pU2yB.js +427 -0
- package/dist/cli-runtime/application__UpdateRuntime-DPvY8ohd.js +345 -0
- package/dist/cli-runtime/application__android__AndroidApplicationService-CFgIFPM4.js +31 -0
- package/dist/cli-runtime/application__apple__AppleApplicationService-Db6QCsun.js +31 -0
- package/dist/cli-runtime/application__harmony__HarmonyApplicationService-CFjocHoK.js +31 -0
- package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-CmVDUI_Z.js +118 -0
- package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +63 -0
- package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-CCkp8KBh.js +11450 -0
- package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js +2329 -0
- package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js +88 -0
- package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js +299 -0
- package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +27 -0
- package/dist/cli-runtime/artifacts__ArtifactProvider-zXI0QjSL.js +2187 -0
- package/dist/cli-runtime/binary-BVOr2mgE.js +14206 -0
- package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +40 -0
- package/dist/cli-runtime/catalogIdentity-DLoXgfIR.js +933 -0
- package/dist/cli-runtime/cli.js +41848 -0
- package/dist/cli-runtime/cliOutput-BC1BdAcB.js +122 -0
- package/dist/cli-runtime/cliOutput.js +5 -0
- package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +780 -0
- package/dist/cli-runtime/cliResultOutput.js +5 -0
- package/dist/cli-runtime/composition__browserScenario-DHXC1a8n.js +2927 -0
- package/dist/cli-runtime/composition__electronObservation-GecK2EID.js +555 -0
- package/dist/cli-runtime/composition__electronScenario-CEZnVrAL.js +653 -0
- package/dist/cli-runtime/cutterToolContracts-TZH9EHr5.js +5134 -0
- package/dist/cli-runtime/doctorRuntime-BE5ZX8it.js +258 -0
- package/dist/cli-runtime/dotnet__ManagedStaticProvider-C8_yZCDc.js +5 -0
- package/dist/cli-runtime/errorSchemas-CTRmvMl3.js +601 -0
- package/dist/cli-runtime/javascriptApplicationAnalysis-HgMzVMQw.js +2068 -0
- package/dist/cli-runtime/javascriptExportReturnShapeProjection-Dg00g35t.js +78 -0
- package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-BYnoIqIk.js +1242 -0
- package/dist/cli-runtime/javascriptRuntimeReconciliation-DNjDoL3S.js +1507 -0
- package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-BWpGWNcI.js +247 -0
- package/dist/cli-runtime/javascriptSemanticTraceSchemas-BTCNcvbc.js +126 -0
- package/dist/cli-runtime/lipo-DSWP6fv-.js +396 -0
- package/dist/cli-runtime/logger-CQQCI4a2.js +48 -0
- package/dist/cli-runtime/machoContainer-C8BIkkq3.js +172 -0
- package/dist/cli-runtime/managedApplicationGraph-B08jb3jq.js +1130 -0
- package/dist/cli-runtime/managedToolContracts-D60QmIYj.js +99 -0
- package/dist/cli-runtime/mcpDoctor.js +359 -0
- package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +21 -0
- package/dist/cli-runtime/native__NativeMacOSProvider-YBTvUeJO.js +4875 -0
- package/dist/cli-runtime/officialToolContracts-CCFF0an9.js +1501 -0
- package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +248 -0
- package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +25 -0
- package/dist/cli-runtime/providerCleanupError-Ceq8f0wK.js +27 -0
- package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
- package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
- package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +38 -0
- package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bao0xMr-.js +19478 -0
- package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
- package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
- package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
- package/dist/cli-runtime/scanCanonical-KP4T9jSl.js +2724 -0
- package/dist/cli-runtime/snapshotEnvironment-D_tWyOub.js +813 -0
- package/dist/cli-runtime/toolContracts-D2FOG_Nb.js +3721 -0
- package/dist/cli-runtime/toolOutputSchemaGroups-DRiYs1je.js +12070 -0
- package/dist/cli-runtime/workflowInputError-n8Oo-bLA.js +26 -0
- package/dist/cli.js +38 -5
- package/dist/cliBrowserScenarioCommands.js +39 -4
- package/dist/cliCommandNames.js +48 -0
- package/dist/cliEvidenceCommands.js +0 -1
- package/dist/cliJavaScriptRuntimeCommands.js +16 -14
- package/dist/cliJsonInput.js +12 -4
- package/dist/cliLogging.js +50 -14
- package/dist/cliObservationOptions.js +6 -0
- package/dist/cliOutput.js +38 -5
- package/dist/composition/binary.js +4 -0
- package/dist/composition/captures.js +3 -0
- package/dist/composition/directAnalysis.js +28 -11
- package/dist/composition/electronFuses.js +4 -0
- package/dist/composition/evm.js +12 -0
- package/dist/composition/flutter.js +3 -0
- package/dist/composition/go.js +4 -0
- package/dist/composition/javascriptAnalysisWorkerProcess.js +5 -4
- package/dist/composition/jeb.js +33 -4
- package/dist/composition/pcap.js +3 -0
- package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
- package/dist/composition/reverseEngineering.js +29 -0
- package/dist/composition/rust.js +4 -0
- package/dist/composition/signals.js +3 -0
- package/dist/composition/sqlite.js +4 -0
- package/dist/composition/wasm.js +22 -0
- package/dist/composition/webNetworkCaptures.js +7 -2
- package/dist/config/environment.js +45 -4
- package/dist/config/ghidraDisabledAnalyzers.js +25 -0
- package/dist/config/homeDirectory.js +9 -6
- package/dist/config/mcpInputSchemaProfile.js +4 -0
- package/dist/config/mcpOutputSchemaProfile.js +22 -0
- package/dist/config/parseConfig.js +21 -31
- package/dist/config/parsers.js +4 -3
- package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
- package/dist/contracts/adb/adbToolContracts.js +7 -7
- package/dist/contracts/analysisDetail.js +6 -3
- package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
- package/dist/contracts/analysisViewToolContracts.js +24 -3
- package/dist/contracts/android/androidToolContracts.js +17 -8
- package/dist/contracts/applicationToolContracts.js +17 -2
- package/dist/contracts/artifactToolContracts.js +14 -2
- package/dist/contracts/browserToolContracts.js +1 -0
- package/dist/contracts/captures/captureToolContracts.js +42 -0
- package/dist/contracts/compactInputSchema.js +26 -6
- package/dist/contracts/cutterToolContracts.js +84 -0
- package/dist/contracts/enhancedToolContracts.js +2 -2
- package/dist/contracts/evm/evmToolContracts.js +30 -15
- package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
- package/dist/contracts/flutter/flutterToolContracts.js +47 -0
- package/dist/contracts/fridaRemoteAddress.js +23 -0
- package/dist/contracts/fridaToolContracts.js +273 -0
- package/dist/contracts/functionComparisonExample.js +12 -1
- package/dist/contracts/gdbToolContracts.js +103 -0
- package/dist/contracts/go/goToolContracts.js +20 -0
- package/dist/contracts/hopperMemoryContracts.js +15 -0
- package/dist/contracts/inputSchemaPresentation.js +81 -14
- package/dist/contracts/investigationExamples.js +1 -0
- package/dist/contracts/javascript/electronToolContracts.js +27 -2
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
- package/dist/contracts/managed/managedToolContracts.js +43 -4
- package/dist/contracts/managed/managedWorkflowExamples.js +7 -1
- package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
- package/dist/contracts/mobileApplicationGraphExamples.js +12 -0
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +3 -2
- package/dist/contracts/native/nativeToolContracts.js +10 -6
- package/dist/contracts/officialToolContracts.js +5 -5
- package/dist/contracts/pcap/pcapToolContracts.js +33 -0
- package/dist/contracts/providerSelection.js +1 -0
- package/dist/contracts/reconstructionReadinessExample.js +126 -119
- package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
- package/dist/contracts/rizinDebugToolContracts.js +96 -0
- package/dist/contracts/rust/rustToolContracts.js +20 -0
- package/dist/contracts/sessionLifecycleInputs.js +34 -2
- package/dist/contracts/sessionToolContracts.js +2 -2
- package/dist/contracts/sessionToolSchemas.js +14 -0
- package/dist/contracts/signals/signalToolContracts.js +40 -0
- package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
- package/dist/contracts/toolContractExamples.js +29 -0
- package/dist/contracts/toolContractTypes.js +2 -0
- package/dist/contracts/toolContracts.js +26 -0
- package/dist/contracts/toolEffects.js +247 -8
- package/dist/contracts/toolOutputSchemaGroups.js +75 -32
- package/dist/contracts/toolOutputSchemaPrimitives.js +111 -10
- package/dist/contracts/toolSchemaMetadata.js +16 -2
- package/dist/contracts/unknownContractExamples.js +1 -1
- package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
- package/dist/contracts/wasm/wasmToolContracts.js +33 -0
- package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
- package/dist/cutter/CutterBridgeClient.js +621 -0
- package/dist/cutter/CutterBridgeService.js +139 -0
- package/dist/doctorRuntime.js +20 -8
- package/dist/domain/adb/adbDeviceAnalysis.js +26 -4
- package/dist/domain/analysisErrorBase.js +20 -0
- package/dist/domain/analysisErrorCleanup.js +1 -1
- package/dist/domain/analysisErrorCore.js +19 -0
- package/dist/domain/analysisErrorPresentation.js +58 -17
- package/dist/domain/analysisErrorProjection.js +31 -12
- package/dist/domain/analysisProfile.js +7 -3
- package/dist/domain/analysisSnapshot.js +311 -184
- package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +414 -0
- package/dist/domain/analysisView/analysisView.js +366 -44
- package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
- package/dist/domain/analysisView/analysisViewErrors.js +4 -0
- package/dist/domain/analysisView/analysisViewParent.js +12 -0
- package/dist/domain/analysisView/analysisViewText.js +29 -0
- package/dist/domain/analysisView/androidPackageView.js +102 -0
- package/dist/domain/analysisView/artifactInventoryView.js +140 -0
- package/dist/domain/analysisView/binaryLayoutView.js +11 -4
- package/dist/domain/analysisView/dartAotView.js +93 -0
- package/dist/domain/analysisView/evmInterfaceView.js +105 -0
- package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +29 -28
- package/dist/domain/analysisView/machoView.js +186 -0
- package/dist/domain/analysisView/managedArtifactView.js +108 -0
- package/dist/domain/analysisView/managedMemberView.js +209 -0
- package/dist/domain/analysisView/nativeFunctionView.js +20 -25
- package/dist/domain/analysisView/pcapCaptureView.js +264 -0
- package/dist/domain/analysisView/qlogCaptureView.js +198 -0
- package/dist/domain/analysisView/wasmArtifactView.js +162 -0
- package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
- package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
- package/dist/domain/android/androidAnalysis.js +36 -2
- package/dist/domain/android/androidApplication.js +32 -60
- package/dist/domain/apktool/apktoolResourceAnalysis.js +19 -7
- package/dist/domain/apple/appleApplication.js +31 -29
- package/dist/domain/apple/appleArchiveFormat.js +184 -0
- package/dist/domain/apple/appleAssetCatalog.js +15 -0
- package/dist/domain/apple/appleBundleAnatomy.js +1 -1
- package/dist/domain/apple/dyldPaths.js +9 -2
- package/dist/domain/apple/dylibResolution.js +19 -9
- package/dist/domain/apple/dylibResolutionFindings.js +8 -9
- package/dist/domain/apple/interfaceBuilderGraph.js +50 -26
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +28 -8
- package/dist/domain/apple/machoContainer.js +120 -8
- package/dist/domain/apple/machoCpuIdentity.js +4 -0
- package/dist/domain/apple/plistValue.js +6 -1
- package/dist/domain/artifactComparison.js +109 -32
- package/dist/domain/artifactDecompressionBudget.js +26 -0
- package/dist/domain/artifactGraph.js +23 -6
- package/dist/domain/artifactIdentity.js +4 -1
- package/dist/domain/artifactInspection.js +44 -2
- package/dist/domain/artifactInventoryEvidence.js +137 -39
- package/dist/domain/binaryTarget.js +251 -94
- package/dist/domain/binaryTargetTypes.js +14 -1
- package/dist/domain/browserNetworkEvidence.js +4 -0
- package/dist/domain/browserObservation.js +88 -29
- package/dist/domain/browserObservationSchemas.js +4 -1
- package/dist/domain/browserScenarioCapture.js +2 -1
- package/dist/domain/browserScenarioCaptureValues.js +26 -2
- package/dist/domain/browserScenarioDiff.js +120 -11
- package/dist/domain/browserScenarioDiffEvidence.js +46 -13
- package/dist/domain/browserScenarioDiffValues.js +10 -3
- package/dist/domain/browserScenarioNetworkComparison.js +158 -0
- package/dist/domain/browserScenarioNormalization.js +10 -13
- package/dist/domain/browserScenarioValues.js +2 -12
- package/dist/domain/browserSession.js +2 -2
- package/dist/domain/bundleComparison.js +1 -5
- package/dist/domain/callPath.js +40 -3
- package/dist/domain/captures/packetCapture.js +138 -0
- package/dist/domain/captures/packetFields.js +81 -0
- package/dist/domain/changedBehavior.js +43 -41
- package/dist/domain/comparisonSourceEvidence.js +6 -0
- package/dist/domain/dosCom.js +2 -2
- package/dist/domain/dosMz.js +52 -14
- package/dist/domain/electron/electronFuses.js +360 -0
- package/dist/domain/elfFixedHeader.js +42 -0
- package/dist/domain/evidence.js +103 -38
- package/dist/domain/evidenceBundle.js +58 -20
- package/dist/domain/evidenceErrors.js +5 -0
- package/dist/domain/evm/evmInterface.js +18 -4
- package/dist/domain/evm/solidityMetadata.js +70 -0
- package/dist/domain/explicitSensitiveFailure.js +42 -24
- package/dist/domain/firmware/firmwareAnalysis.js +29 -0
- package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
- package/dist/domain/functionCallCoverage.js +60 -0
- package/dist/domain/functionComparisonDimensions.js +101 -10
- package/dist/domain/functionComparisonNormalization.js +66 -10
- package/dist/domain/functionComparisonResults.js +7 -6
- package/dist/domain/functionComparisonSchemas.js +14 -3
- package/dist/domain/functionDossierEvidence.js +3 -0
- package/dist/domain/go/goBinary.js +96 -0
- package/dist/domain/harmony/harmonyApplication.js +156 -0
- package/dist/domain/hopperErrors.js +15 -16
- package/dist/domain/hopperPublisher.js +12 -0
- package/dist/domain/hopperValues.js +112 -34
- package/dist/domain/javascript/electronObservation.js +4 -1
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +15 -14
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +3 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +19 -5
- package/dist/domain/javascript/electronStaticAnalysisValues.js +14 -8
- package/dist/domain/javascript/electronWrappedCallPaths.js +498 -0
- package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +21 -1
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -0
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +7 -2
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
- package/dist/domain/javascript/javascriptApplicationGraph.js +17 -1
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +8 -0
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +31 -18
- package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
- package/dist/domain/javascript/javascriptAstFingerprint.js +51 -17
- package/dist/domain/javascript/javascriptAstValues.js +52 -3
- package/dist/domain/javascript/javascriptBootstrap.js +94 -0
- package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
- package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
- package/dist/domain/javascript/javascriptBundledRequireOrigin.js +291 -0
- package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +86 -22
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
- package/dist/domain/javascript/javascriptFeatureSeed.js +33 -16
- package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
- package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
- package/dist/domain/javascript/javascriptModuleDeclaration.js +28 -0
- package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
- package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
- package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +0 -1
- package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
- package/dist/domain/javascript/javascriptRecovery.js +12 -5
- package/dist/domain/javascript/javascriptRpcEndpoints.js +119 -41
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +11 -0
- package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +10 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +15 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +113 -11
- package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +251 -0
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +340 -108
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +17 -34
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +6 -11
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +42 -55
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +428 -32
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +14 -20
- package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +11 -14
- package/dist/domain/javascript/javascriptSemanticGraph.js +5 -1
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +0 -1
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +2 -2
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +224 -91
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +199 -3
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +333 -43
- package/dist/domain/javascript/javascriptSemanticObjects.js +20 -16
- package/dist/domain/javascript/javascriptSemanticProjection.js +151 -43
- package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
- package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
- package/dist/domain/javascript/javascriptSemanticQuery.js +7 -2
- package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +331 -8
- package/dist/domain/javascript/javascriptSemanticResources.js +6 -40
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +14 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +37 -30
- package/dist/domain/javascript/javascriptSemanticState.js +39 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -4
- package/dist/domain/javascript/javascriptSemanticValues.js +227 -30
- package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
- package/dist/domain/javascript/javascriptSourceParser.js +72 -3
- package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
- package/dist/domain/javascript/javascriptStaticAnalysis.js +51 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +97 -23
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +224 -44
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +166 -56
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
- package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
- package/dist/domain/javascript/javascriptSymbolicBindings.js +836 -0
- package/dist/domain/javascript/javascriptSymbolicControlFlow.js +40 -0
- package/dist/domain/javascript/javascriptSymbolicValues.js +34 -0
- package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
- package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -13
- package/dist/domain/jsonValue.js +37 -12
- package/dist/domain/localPath.js +6 -3
- package/dist/domain/managed/managedApplicationGraph.js +5 -0
- package/dist/domain/managed/managedApplicationGraphCoverage.js +6 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +0 -1
- package/dist/domain/managed/managedArtifact.js +51 -1
- package/dist/domain/managed/managedInspectionEvidence.js +5 -6
- package/dist/domain/managed/managedMemberComparison.js +3 -0
- package/dist/domain/managed/managedMemberComparisonCoverage.js +23 -3
- package/dist/domain/managed/managedMemberComparisonItems.js +23 -19
- package/dist/domain/managed/managedMemberComparisonMatch.js +209 -18
- package/dist/domain/managed/managedNativeVerificationMatch.js +49 -26
- package/dist/domain/managed/managedNativeVerificationSchemas.js +13 -2
- package/dist/domain/managed/managedReconstruction.js +5 -8
- package/dist/domain/mobileApplicationGraphProjection.js +80 -0
- package/dist/domain/native/addressCoordinate.js +11 -0
- package/dist/domain/native/binaryLayout.js +2 -4
- package/dist/domain/native/bytePattern.js +100 -0
- package/dist/domain/native/nativeAotPe.js +2 -2
- package/dist/domain/native/nativeInspection.js +38 -4
- package/dist/domain/native/nativeInstruction.js +17 -2
- package/dist/domain/native/nativeInvestigationGraph.js +9 -5
- package/dist/domain/native/nativeLoadImage.js +19 -1
- package/dist/domain/native/nativeUiObservation.js +5 -6
- package/dist/domain/native/objcSwiftMetadata.js +4 -1
- package/dist/domain/native/peResources.js +8 -2
- package/dist/domain/native/recordedCrash.js +79 -10
- package/dist/domain/offsetDateTime.js +60 -0
- package/dist/domain/pcap/pcapAnalysis.js +91 -0
- package/dist/domain/pcap/pcapEvidence.js +15 -0
- package/dist/domain/peMachine.js +36 -0
- package/dist/domain/pngHeader.js +18 -0
- package/dist/domain/process/processCaptureCoverage.js +26 -3
- package/dist/domain/process/processCaptureExample.js +2 -0
- package/dist/domain/process/processCaptureValidation.js +33 -8
- package/dist/domain/process/processComparison.js +41 -13
- package/dist/domain/process/processScenario.js +7 -0
- package/dist/domain/process/processTraceEvaluation.js +54 -50
- package/dist/domain/process/processTraceSpecification.js +243 -89
- package/dist/domain/propertyListKeys.js +211 -11
- package/dist/domain/propertyListXmlText.js +20 -4
- package/dist/domain/providerAdapterError.js +0 -5
- package/dist/domain/providerConfigurationRefusal.js +12 -0
- package/dist/domain/providerSelectionError.js +2 -1
- package/dist/domain/qlogCapture.js +62 -0
- package/dist/domain/rawBinary.js +96 -0
- package/dist/domain/reconstructionCoverage.js +5 -1
- package/dist/domain/reconstructionCoverageEvaluation.js +18 -15
- package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
- package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
- package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
- package/dist/domain/reconstructionReadiness.js +4 -8
- package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
- package/dist/domain/reconstructionUnknowns.js +9 -1
- package/dist/domain/reconstructionVerification.js +54 -25
- package/dist/domain/recordedTransportUrl.js +59 -0
- package/dist/domain/referenceSourceClassification.js +27 -23
- package/dist/domain/referenceSourceGraph.js +51 -13
- package/dist/domain/referenceSourceImportParsing.js +23 -13
- package/dist/domain/referenceSourcePathIdentity.js +11 -1
- package/dist/domain/referenceSourceRequireBindings.js +5 -12
- package/dist/domain/referenceSourceSummary.js +92 -0
- package/dist/domain/relationshipCoverage.js +44 -0
- package/dist/domain/residualUnknown.js +93 -26
- package/dist/domain/reverseEngineering.js +31 -0
- package/dist/domain/runtimeVersion.js +8 -0
- package/dist/domain/rust/rustBinary.js +200 -0
- package/dist/domain/signals/annotationTextWindow.js +31 -0
- package/dist/domain/signals/signalDecoders.js +69 -0
- package/dist/domain/signals/signalRecording.js +115 -0
- package/dist/domain/sourceMapContents.js +10 -3
- package/dist/domain/sourceMapEnvelope.js +17 -11
- package/dist/domain/sqlite/sqliteDatabase.js +188 -0
- package/dist/domain/staticRuntimeCorrelation.js +7 -9
- package/dist/domain/swiftSymbolClassification.js +17 -0
- package/dist/domain/symbolAnalysis.js +16 -4
- package/dist/domain/urlComponents.js +6 -0
- package/dist/domain/wasm/wasmArtifact.js +119 -0
- package/dist/domain/wasm/wasmInterface.js +89 -0
- package/dist/domain/webBundleAnalysis.js +14 -3
- package/dist/domain/webBundleAnalyzerAst.js +7 -2
- package/dist/domain/webBundleAnalyzerInspection.js +54 -38
- package/dist/domain/webBundleAnalyzerResult.js +18 -6
- package/dist/domain/webCaptureDiff.js +140 -39
- package/dist/domain/webCaptureFrameComparison.js +49 -0
- package/dist/domain/webMcpDiscovery.js +5 -2
- package/dist/domain/webModuleImports.js +22 -27
- package/dist/domain/webModuleTrace.js +3 -8
- package/dist/domain/webNetworkCapture.js +101 -39
- package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
- package/dist/domain/webRuntime.js +0 -1
- package/dist/domain/webScreenshot.js +2 -2
- package/dist/domain/webScriptArtifacts.js +2 -4
- package/dist/domain/webScriptExport.js +6 -8
- package/dist/domain/webScriptExportPlan.js +2 -2
- package/dist/domain/webSourceLocation.js +20 -9
- package/dist/domain/zipPackageFormat.js +29 -3
- package/dist/dotnet/ManagedArtifactInspector.js +27 -12
- package/dist/dotnet/ManagedDecodeBudget.js +66 -8
- package/dist/dotnet/ManagedMemberInspector.js +101 -21
- package/dist/dotnet/ManagedMemberInspectorCore.js +356 -140
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +109 -37
- package/dist/dotnet/ManagedMemberOwnership.js +65 -0
- package/dist/dotnet/ManagedMemberPointers.js +69 -0
- package/dist/dotnet/ManagedMemberRows.js +179 -46
- package/dist/dotnet/ManagedMetadataHeaps.js +110 -24
- package/dist/dotnet/ManagedMetadataInventory.js +5 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +36 -52
- package/dist/dotnet/ManagedMetadataLayout.js +9 -1
- package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
- package/dist/dotnet/ManagedMethodBodyReader.js +29 -11
- package/dist/dotnet/ManagedMethodSpecs.js +78 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +2 -2
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +6 -13
- package/dist/dotnet/ManagedPeReader.js +55 -27
- package/dist/dotnet/ManagedReaderFailure.js +9 -0
- package/dist/dotnet/ManagedSnapshot.js +88 -0
- package/dist/dotnet/ManagedStaticProvider.js +55 -64
- package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
- package/dist/dotnet/ManagedTypeNames.js +98 -0
- package/dist/dotnet/ManagedUserStrings.js +75 -0
- package/dist/electron/ElectronFusePath.js +247 -0
- package/dist/electron/ElectronFuseProvider.js +113 -0
- package/dist/electron/ElectronFuseReader.js +317 -0
- package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
- package/dist/evaluation/CodexAgentEval.js +19 -40
- package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
- package/dist/evm/EvmoleFailures.js +19 -14
- package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
- package/dist/evm/EvmoleInterfaceProvider.js +141 -31
- package/dist/evm/EvmoleInterfaceWorker.js +2 -0
- package/dist/evm/SolidityMetadata.js +139 -0
- package/dist/filesystem/OwnedStagedOutput.js +138 -0
- package/dist/filesystem/RegularFile.js +48 -4
- package/dist/filesystem/readFileHandleChunks.js +17 -8
- package/dist/firmware/FirmwareCommand.js +2 -2
- package/dist/firmware/FirmwareFiles.js +8 -12
- package/dist/firmware/FirmwareProvider.js +2 -0
- package/dist/firmware/FirmwarePublication.js +218 -1
- package/dist/firmware/FirmwareReports.js +202 -12
- package/dist/flutter/DartElf.js +418 -0
- package/dist/flutter/ElfBuildId.js +137 -0
- package/dist/flutter/ElfLoadMap.js +91 -0
- package/dist/flutter/FlutterBuildProvider.js +826 -0
- package/dist/flutter/FlutterPayloadScan.js +180 -0
- package/dist/frida/FridaInstrumentationManager.js +1104 -0
- package/dist/gdb/GdbSessionManager.js +1451 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +130 -12
- package/dist/ghidra/GhidraClient.js +195 -88
- package/dist/ghidra/GhidraDiagnostics.js +7 -0
- package/dist/ghidra/GhidraDoctor.js +15 -12
- package/dist/ghidra/GhidraFunctionValues.js +49 -2
- package/dist/ghidra/GhidraInstallation.js +215 -19
- package/dist/ghidra/GhidraInstallationPolicy.js +79 -29
- package/dist/ghidra/GhidraInventoryValues.js +30 -0
- package/dist/ghidra/GhidraJavaLaunch.js +91 -10
- package/dist/ghidra/GhidraJavaProperties.js +117 -0
- package/dist/ghidra/GhidraLanguageCatalog.js +74 -4
- package/dist/ghidra/GhidraLauncher.js +234 -57
- package/dist/ghidra/GhidraLoadImageAttest.js +28 -8
- package/dist/ghidra/GhidraLoadImageValues.js +72 -0
- package/dist/ghidra/GhidraMipsProfile.js +250 -14
- package/dist/ghidra/GhidraPeProfile.js +21 -0
- package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
- package/dist/ghidra/GhidraProvider.js +54 -16
- package/dist/ghidra/GhidraProviderCapabilities.js +13 -12
- package/dist/ghidra/GhidraProviderClient.js +260 -57
- package/dist/ghidra/GhidraPspExtension.js +140 -0
- package/dist/ghidra/GhidraPspProfile.js +59 -0
- package/dist/ghidra/GhidraRawBinaryLanguage.js +40 -0
- package/dist/ghidra/GhidraRiscvProfile.js +100 -0
- package/dist/ghidra/GhidraSessionError.js +155 -11
- package/dist/ghidra/GhidraSessionValues.js +66 -0
- package/dist/ghidra/GhidraTransport.js +2 -1
- package/dist/go/GoBinaryContainer.js +140 -0
- package/dist/go/GoBinaryImage.js +210 -0
- package/dist/go/GoBinaryProvider.js +151 -0
- package/dist/go/GoElfImage.js +211 -0
- package/dist/go/GoMachoImage.js +164 -0
- package/dist/go/GoModuleText.js +217 -0
- package/dist/go/GoPeImage.js +124 -0
- package/dist/hopper/BridgeLauncher.js +35 -2
- package/dist/hopper/HopperAnalysisProfile.js +21 -11
- package/dist/hopper/HopperCleanup.js +15 -3
- package/dist/hopper/HopperClient.js +188 -36
- package/dist/hopper/HopperMacPublisher.js +29 -0
- package/dist/hopper/HopperMachOImage.js +61 -29
- package/dist/hopper/HopperProcessDiagnostic.js +27 -0
- package/dist/hopper/HopperProvider.js +59 -28
- package/dist/hopper/HopperProviderCapabilities.js +7 -3
- package/dist/hopper/HopperRequestQueue.js +17 -5
- package/dist/hopper/HopperSessionValues.js +10 -1
- package/dist/hopper/HopperTargetLease.js +66 -19
- package/dist/ida/IdaBusyHealth.js +44 -0
- package/dist/ida/IdaCallGraph.js +134 -0
- package/dist/ida/IdaConfiguration.js +7 -2
- package/dist/ida/IdaDiagnosticRedactor.js +199 -0
- package/dist/ida/IdaDiagnosticWriter.js +62 -0
- package/dist/ida/IdaDoctor.js +7 -5
- package/dist/ida/IdaJsonDiagnostic.js +138 -0
- package/dist/ida/IdaMcpConnection.js +297 -27
- package/dist/ida/IdaNativeProtocol.js +93 -0
- package/dist/ida/IdaOperationRunner.js +246 -43
- package/dist/ida/IdaProtocolValues.js +86 -4
- package/dist/ida/IdaProvider.js +29 -10
- package/dist/ida/IdaProviderCapabilities.js +37 -8
- package/dist/ida/IdaSessionClient.js +331 -54
- package/dist/ida/IdaWorkspace.js +54 -6
- package/dist/inspector/V8InspectorCaptureProjection.js +7 -2
- package/dist/inspector/V8InspectorEndpoint.js +15 -13
- package/dist/inspector/V8InspectorProvider.js +41 -7
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +19 -8
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +103 -29
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +6 -4
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +78 -9
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +15 -5
- package/dist/javascript/recovery/RecoveryFiles.js +51 -6
- package/dist/javascript/recovery/WakaruExecution.js +19 -11
- package/dist/javascript/recovery/WakaruProvider.js +12 -9
- package/dist/javascript/recovery/WakaruPublication.js +24 -10
- package/dist/javascript/recovery/WakaruRelease.js +1 -1
- package/dist/javascript/recovery/WakaruReport.js +3 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
- package/dist/javascript/sourceMaps/SourceMapCommand.js +22 -4
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +22 -4
- package/dist/javascript/sourceMaps/SourceMapFormat.js +25 -38
- package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
- package/dist/jeb/JebMcpConnection.js +19 -12
- package/dist/jeb/JebMcpEndpoint.js +6 -1
- package/dist/jeb/JebProvider.js +5 -7
- package/dist/logger.js +14 -1
- package/dist/main/shutdown.js +3 -0
- package/dist/main/transport.js +48 -4
- package/dist/main.js +14 -3
- package/dist/mcp/AnalysisSnapshotFiles-BAbiJQOc.js +1412 -0
- package/dist/mcp/ArtifactProvider-DViCU_rn.js +2183 -0
- package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +76 -0
- package/dist/mcp/ArtifactReader-OyM03Gjn.js +55 -0
- package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +162 -0
- package/dist/mcp/AsarHeader-WsPgoooH.js +31 -0
- package/dist/mcp/BinarySessionStatus-B4P9gf-S.js +212 -0
- package/dist/mcp/BinaryTargetResolver-BMaE_0H1.js +1427 -0
- package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +68 -0
- package/dist/mcp/CdpCaptureDocuments-HDiF2O7k.js +746 -0
- package/dist/mcp/CdpCaptureValues-M-j6CIh1.js +90 -0
- package/dist/mcp/CdpConnection-BpDfz4MK.js +570 -0
- package/dist/mcp/CdpOptionalCommand-BPjRD9Kz.js +120 -0
- package/dist/mcp/CdpTargetSession-BsPoKhEU.js +86 -0
- package/dist/mcp/DirectAnalysis-DrafbXke.js +409 -0
- package/dist/mcp/DirectAnalysisStatus-CjjeDLzW.js +44 -0
- package/dist/mcp/ElectronFileScope-BPG_YoyU.js +110 -0
- package/dist/mcp/InterfaceBuilderDecodeBudget-5F2AkxJT.js +652 -0
- package/dist/mcp/ManagedStaticProvider-BthZbKyZ.js +5028 -0
- package/dist/mcp/NativeMacOSProvider-Bh79k8dI.js +4867 -0
- package/dist/mcp/NativeMacOSProviderMetadata-N1lPOaY_.js +307 -0
- package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +19 -0
- package/dist/mcp/ProcessOwnership-Bl_3ejLe.js +1502 -0
- package/dist/mcp/ProviderDeadline-DskQ94YD.js +932 -0
- package/dist/mcp/WorkflowEvidence-umWrB_wm.js +111 -0
- package/dist/mcp/analysisErrorCore-DXRTvF_m.js +235 -0
- package/dist/mcp/analysisErrorProjection-BN0EPM-3.js +892 -0
- package/dist/mcp/artifactOperationError-CkHMMaf7.js +27 -0
- package/dist/mcp/artifactToolContracts-Di4qZlEt.js +72 -0
- package/dist/mcp/browserObservation-C0s4i8UI.js +4468 -0
- package/dist/mcp/browserObservationError-CyLugqX4.js +40 -0
- package/dist/mcp/browserObservationSchemas-tgqjH7aA.js +573 -0
- package/dist/mcp/browserScenario-CAQ8Fns9.js +2929 -0
- package/dist/mcp/browserScenarioCapture-CTNFN-FI.js +479 -0
- package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
- package/dist/mcp/digests-BFoWUT_-.js +223 -0
- package/dist/mcp/electronActiveObservation-lDvQTMR0.js +226 -0
- package/dist/mcp/electronObservation-DFOFEood.js +112 -0
- package/dist/mcp/electronObservation-i7LcILQ-.js +562 -0
- package/dist/mcp/electronScenario-nCzE6IfJ.js +653 -0
- package/dist/mcp/emptyArraySchema-tL6Qymyd.js +140 -0
- package/dist/mcp/enhancedInputs-DgdEnzHy.js +56 -0
- package/dist/mcp/javascriptRuntimeObservation-61NhCf7H.js +690 -0
- package/dist/mcp/javascriptRuntimeObservation-PIUoLfX6.js +121 -0
- package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
- package/dist/mcp/lipo-Bnkoq_6W.js +502 -0
- package/dist/mcp/localPath-AxvW9aPe.js +19 -0
- package/dist/mcp/logger-BQY5ulYv.js +48 -0
- package/dist/mcp/main-kBXHZ8S5.js +69390 -0
- package/dist/mcp/main.js +6 -0
- package/dist/mcp/managedToolContracts-CK--I_s7.js +101 -0
- package/dist/mcp/nativeValueTrace-DR9UE62L.js +3439 -0
- package/dist/mcp/officialToolContracts-B67NJ2tC.js +1413 -0
- package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
- package/dist/mcp/propertyListKeys-DD25WsjI.js +553 -0
- package/dist/mcp/providerAdapterError-sDxToNal.js +25 -0
- package/dist/mcp/providerIdentities--ptAh481.js +31 -0
- package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
- package/dist/mcp/providerOperationHealth-CTYa3iLf.js +48 -0
- package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
- package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
- package/dist/mcp/scanCanonical-CRXSpule.js +3982 -0
- package/dist/mcp/serverIdentity-Cio4iFV3.js +1328 -0
- package/dist/mcp/sourceMapEnvelope-C0uJlrOh.js +94 -0
- package/dist/mcp/toolContracts-BW05wpcr.js +12200 -0
- package/dist/mcp/toolOutputSchemaGroups-ColvNZ1r.js +17533 -0
- package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +26 -0
- package/dist/mcp/webContentArtifact-Dzjc1z-R.js +284 -0
- package/dist/mcp/webRuntime-K__NYzXm.js +74 -0
- package/dist/mcp/webSourceLocation-DbMAT2J9.js +11130 -0
- package/dist/mcpDoctor.js +93 -70
- package/dist/mcpStartupPolicy.js +3 -0
- package/dist/native/AppleDispatchCoverage.js +57 -17
- package/dist/native/AppleDispatchMetadata.js +6 -2
- package/dist/native/AppleMachoFixups.js +188 -25
- package/dist/native/AppleMachoSelection.js +30 -23
- package/dist/native/AppleObjcCategories.js +1 -2
- package/dist/native/AppleObjcDispatchFacets.js +76 -7
- package/dist/native/CommandRunner.js +142 -32
- package/dist/native/LldbCallTracer.js +5 -3
- package/dist/native/MachoArchitectureSelection.js +50 -0
- package/dist/native/NativeCallObservation.js +2 -1
- package/dist/native/NativeMacOSProvider.js +90 -29
- package/dist/native/NativeMachoInspection.js +136 -76
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +118 -55
- package/dist/native/parsers/codesign.js +27 -10
- package/dist/native/parsers/demangle.js +7 -1
- package/dist/native/parsers/dyldInfo.js +73 -4
- package/dist/native/parsers/lipo.js +53 -19
- package/dist/native/parsers/machoUuid.js +150 -0
- package/dist/native/parsers/otool.js +232 -29
- package/dist/native/pe/PeResourcesProvider.js +20 -6
- package/dist/native/pwndbg/PwndbgCoreContext.js +20 -20
- package/dist/native/pwntools/PwntoolsDecoder.js +264 -40
- package/dist/native/pwntools/PwntoolsFailures.js +2 -1
- package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
- package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +27 -15
- package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
- package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
- package/dist/objdump/ObjdumpCommand.js +21 -0
- package/dist/pcap/PcapCommand.js +146 -0
- package/dist/pcap/PcapConfiguration.js +93 -0
- package/dist/pcap/PcapNativeBound.js +58 -0
- package/dist/pcap/PcapOutput.js +240 -0
- package/dist/pcap/PcapProvider.js +424 -0
- package/dist/pcap/PcapSnapshot.js +171 -0
- package/dist/process/ArtifactAnalysisResources.js +213 -0
- package/dist/process/CurrentEntrypointPath.js +6 -0
- package/dist/process/DarwinProcessRunTokenReader.js +117 -13
- package/dist/process/ExecFileBoundedOutput.js +44 -0
- package/dist/process/ExecFileOutput.js +30 -6
- package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
- package/dist/process/LinuxResourceLimits.js +80 -0
- package/dist/process/MacCodeSignature.js +3 -0
- package/dist/process/OwnedCommand.js +37 -13
- package/dist/process/PrivateRuntimeRoot.js +9 -19
- package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
- package/dist/process/ProcessOwnership.js +70 -17
- package/dist/process/ProcessOwnershipObservation.js +35 -4
- package/dist/process/ProviderDeadline.js +58 -12
- package/dist/process/ProviderProcess.js +108 -11
- package/dist/process/WindowsAuthority.js +48 -39
- package/dist/process/WindowsBatchCommand.js +46 -0
- package/dist/process/boundedUtf8Text.js +13 -0
- package/dist/process/capture/FilesystemSnapshot.js +60 -9
- package/dist/process/capture/ProcessCaptureClock.js +2 -0
- package/dist/process/capture/ProcessCaptureError.js +22 -3
- package/dist/process/capture/ProcessCaptureJournal.js +2 -1
- package/dist/process/capture/ProcessCaptureLifecycle.js +87 -36
- package/dist/process/capture/ProcessCaptureProgress.js +2 -1
- package/dist/process/capture/ProcessHarness.js +17 -14
- package/dist/process/capture/ProcessNormalization.js +278 -36
- package/dist/process/capture/ProcessSampling.js +3 -2
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +13 -13
- package/dist/process/capture/TerminalRenderer.js +31 -10
- package/dist/process/ownedDebuggerSession.js +203 -0
- package/dist/reference/ReferenceSourceReader.js +0 -1
- package/dist/reference/ReferenceSourceReaderEntries.js +68 -54
- package/dist/reference/ReferenceSourceReaderErrors.js +5 -1
- package/dist/reference/ReferenceSourceReaderFile.js +0 -1
- package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
- package/dist/reference/ReferenceSourceReaderValidate.js +0 -1
- package/dist/rizin/RizinCommand.js +14 -0
- package/dist/rizin/RizinDebugSessionManager.js +1072 -0
- package/dist/rust/RustAuditableReader.js +309 -0
- package/dist/rust/RustBinaryImage.js +116 -0
- package/dist/rust/RustBinaryProvider.js +162 -0
- package/dist/server/EvidenceMcpServer.js +160 -37
- package/dist/server/admittedToolOperation.js +7 -2
- package/dist/server/contractToolHandler.js +8 -1
- package/dist/server/createServer.js +157 -27
- package/dist/server/externalMutationAdmission.js +50 -0
- package/dist/server/mcpProgress.js +4 -2
- package/dist/server/promptCompletion.js +19 -6
- package/dist/server/providerEnvironment.js +3 -0
- package/dist/server/registerAnalysisViewTool.js +6 -2
- package/dist/server/registerAndroidTools.js +22 -4
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +8 -1
- package/dist/server/registerArtifactTools.js +21 -1
- package/dist/server/registerBrowserTools.js +2 -4
- package/dist/server/registerBundleComparisonTool.js +4 -4
- package/dist/server/registerCaptureTools.js +12 -0
- package/dist/server/registerCutterTools.js +33 -0
- package/dist/server/registerElectronTools.js +12 -9
- package/dist/server/registerEnhancedTools.js +7 -6
- package/dist/server/registerEvidenceTools.js +14 -10
- package/dist/server/registerEvmTools.js +22 -4
- package/dist/server/registerFlutterTools.js +17 -0
- package/dist/server/registerFridaTools.js +205 -0
- package/dist/server/registerFunctionComparisonTool.js +29 -9
- package/dist/server/registerGdbTools.js +64 -0
- package/dist/server/registerGoTools.js +9 -0
- package/dist/server/registerInvestigationTools/helpers.js +2 -2
- package/dist/server/registerInvestigationTools.js +12 -8
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +1 -5
- package/dist/server/registerManagedTools.js +11 -1
- package/dist/server/registerNativeTools.js +14 -0
- package/dist/server/registerOfficialTools.js +5 -0
- package/dist/server/registerPcapTools.js +35 -0
- package/dist/server/registerProcessComparisonTool.js +9 -2
- package/dist/server/registerReverseEngineeringTools.js +86 -0
- package/dist/server/registerRizinDebugTools.js +53 -0
- package/dist/server/registerRustTools.js +9 -0
- package/dist/server/registerSessionRecordTools.js +19 -13
- package/dist/server/registerSessionStatusTool.js +22 -4
- package/dist/server/registerSessionTools.js +29 -16
- package/dist/server/registerSignalTools.js +12 -0
- package/dist/server/registerSqliteTools.js +9 -0
- package/dist/server/registerWasmTools.js +46 -0
- package/dist/server/registerWebNetworkCaptureTool.js +24 -10
- package/dist/server/retainedSummaryDelivery.js +28 -0
- package/dist/server/sessionAvailabilityPolicy.js +3 -0
- package/dist/server/toolRegistrationOptions.js +8 -0
- package/dist/server/toolResult.js +52 -19
- package/dist/server/toolResultEncoding.js +36 -3
- package/dist/serverIdentity.js +17 -8
- package/dist/signals/SigrokRecordingProvider.js +339 -0
- package/dist/signals/parseDecoderDiscovery.js +65 -0
- package/dist/sqlite/SqliteDatabaseFailures.js +134 -0
- package/dist/sqlite/SqliteDatabaseInspection.js +421 -0
- package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
- package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
- package/dist/sqlite/SqliteDatabaseSnapshot.js +156 -0
- package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
- package/dist/sqlite/SqliteDatabaseWorkerExecution.js +112 -0
- package/dist/wasm/WabtArtifactProvider.js +336 -0
- package/dist/wasm/WabtFailures.js +101 -0
- package/dist/wasm/WabtInterface.js +309 -0
- package/dist/wasm/WabtOutput.js +60 -0
- package/dist/wasm/WabtRelease.js +12 -0
- package/dist/wasm/WabtString.js +48 -0
- package/dist/wasm/WabtWat.js +147 -0
- package/dist/wasm/WasmGlueAdapter.js +53 -0
- package/dist/wasm/WasmInterfaceBudget.js +11 -0
- package/dist/windows/WindowsNativeLoader.js +37 -7
- package/dist/windows/WindowsOwnedProcess.js +150 -17
- package/dist/windows/WindowsPrivateRuntime.js +22 -1
- package/install.sh +157 -98
- package/licenses/Apache-2.0.txt +202 -0
- package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
- package/licenses/GPL-3.0.txt +674 -0
- package/licenses/LGPL-2.0.txt +480 -0
- package/licenses/MIT-template.txt +18 -0
- package/licenses/MinGW-w64-runtime.txt +240 -0
- package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
- package/licenses/README.md +68 -0
- package/licenses/cfworker-MIT.txt +21 -0
- package/licenses/dotnet-runtime-MIT.txt +23 -0
- package/licenses/frida-17.23.2-COPYING.txt +50 -0
- package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
- package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
- package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
- package/licenses/npm-dependencies.txt +3612 -0
- package/licenses/npm-runtime-notices.txt +8548 -0
- package/licenses/upstream-sources.json +72 -0
- package/licenses/xterm-MIT.txt +21 -0
- package/native/windows/README.md +92 -11
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +89 -22
- package/scripts/electron-active-hook.cjs +4 -1
- package/scripts/hopper-demo-x11.py +53 -3
- package/scripts/prepack.mjs +5 -0
- package/scripts/rea-android-workspace-guardian.mjs +46 -0
- package/scripts/rea.mjs +28 -12
- package/scripts/verify-windows-native-artifact.mjs +2 -2
- package/skills/reverse-engineer-anything/SKILL.md +131 -10
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +10 -10
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +23 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +28 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +125 -15
- package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
- package/third_party/README.md +1 -1
- package/third_party/wabt/README.md +24 -0
- package/dist/browser/history/HarCaptureAdapter.js +0 -20
- package/dist/cli/streamedJsonOutput.js +0 -135
- /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
|
@@ -2,6 +2,12 @@ import { isBuiltin } from "node:module";
|
|
|
2
2
|
import { posix } from "node:path";
|
|
3
3
|
import { normalizeJoinedLogicalPath, logicalPathEscapesRoot, } from "../../domain/artifactIdentity.js";
|
|
4
4
|
import { admitsCanonicalPathSyntax, hasScheme, htmlUrlText, looksExternal, percentDecodeUrlPath, stripQueryAndFragment, } from "../../domain/artifactPathSyntax.js";
|
|
5
|
+
import { classifyPackageImportSpecifier, classifyPackageImportTargetString, lookupExactPackageImport, } from "../../domain/javascript/javascriptPackageImportAliases.js";
|
|
6
|
+
import { typescriptEmittedSourceCandidates, } from "../TypeScriptEmittedSourceCandidates.js";
|
|
7
|
+
import { isRelativeJavaScriptModuleSpecifier } from "../../domain/javascript/javascriptModuleSpecifier.js";
|
|
8
|
+
import { err, ok } from "../../domain/result.js";
|
|
9
|
+
/** Preserve an explicitly retained loader mode on graph relationships. */
|
|
10
|
+
export const moduleResolutionModeProperties = (mode) => mode === undefined ? {} : { resolution_mode: mode };
|
|
5
11
|
const EXTENSIONS = [
|
|
6
12
|
".js",
|
|
7
13
|
".cjs",
|
|
@@ -12,76 +18,332 @@ const EXTENSIONS = [
|
|
|
12
18
|
".html",
|
|
13
19
|
".node",
|
|
14
20
|
];
|
|
21
|
+
// A private URL namespace for logical artifact paths, including root packages.
|
|
22
|
+
// Encode inventory segments so filename punctuation remains literal in the base.
|
|
23
|
+
const PACKAGE_ARTIFACT_ROOT_URL = new URL("file:///rea-artifact/");
|
|
24
|
+
const encodePackageMetadataUrl = (path) => new URL(path.split("/").map(encodeURIComponent).join("/"), PACKAGE_ARTIFACT_ROOT_URL);
|
|
25
|
+
// URL identity cannot represent lone UTF-16 surrogates. Use request-local
|
|
26
|
+
// opaque segments only for structural admission, never inventory lookup. A
|
|
27
|
+
// target cannot spell these identities after URL's tab/newline preprocessing.
|
|
28
|
+
const packageMetadataUrl = (path, relativeTarget) => {
|
|
29
|
+
try {
|
|
30
|
+
return ok(encodePackageMetadataUrl(path));
|
|
31
|
+
}
|
|
32
|
+
catch (cause) {
|
|
33
|
+
if (!(cause instanceof URIError))
|
|
34
|
+
throw cause;
|
|
35
|
+
const reserved = new Set(`${path}\n${relativeTarget.replace(/[\t\n\r]/gu, "")}`.match(/rea-opaque-\d+/gu) ?? []);
|
|
36
|
+
const structuralSegments = new Set();
|
|
37
|
+
let nextIdentity = 0;
|
|
38
|
+
const structuralPath = path
|
|
39
|
+
.split("/")
|
|
40
|
+
.map((segment) => {
|
|
41
|
+
try {
|
|
42
|
+
return encodeURIComponent(segment);
|
|
43
|
+
}
|
|
44
|
+
catch (segmentCause) {
|
|
45
|
+
if (!(segmentCause instanceof URIError))
|
|
46
|
+
throw segmentCause;
|
|
47
|
+
let identity;
|
|
48
|
+
do
|
|
49
|
+
identity = `rea-opaque-${nextIdentity++}`;
|
|
50
|
+
while (reserved.has(identity));
|
|
51
|
+
reserved.add(identity);
|
|
52
|
+
structuralSegments.add(identity);
|
|
53
|
+
return identity;
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
.join("/");
|
|
57
|
+
return err({
|
|
58
|
+
structuralUrl: new URL(structuralPath, PACKAGE_ARTIFACT_ROOT_URL),
|
|
59
|
+
structuralSegments,
|
|
60
|
+
limitation: `Package metadata path ${JSON.stringify(path)} contains an unpaired UTF-16 surrogate and cannot be represented as a URL.`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
15
64
|
/** Resolve one declaration while preserving its original input identity. */
|
|
16
65
|
export const resolveArtifactPathByContext = (input) => {
|
|
17
66
|
const resolution = resolvePath(input);
|
|
67
|
+
const facts = {
|
|
68
|
+
declared_path: input.declaredPath,
|
|
69
|
+
resolution_context: input.context,
|
|
70
|
+
limitations: resolution.limitations,
|
|
71
|
+
...(resolution.candidatePath === undefined
|
|
72
|
+
? {}
|
|
73
|
+
: { candidate_path: resolution.candidatePath }),
|
|
74
|
+
...(resolution.conditionalResolutions === undefined
|
|
75
|
+
? {}
|
|
76
|
+
: { conditional_resolutions: resolution.conditionalResolutions }),
|
|
77
|
+
};
|
|
18
78
|
return resolution.status === "resolved"
|
|
19
79
|
? {
|
|
20
|
-
|
|
21
|
-
resolution_context: input.context,
|
|
80
|
+
...facts,
|
|
22
81
|
resolved_path: resolution.resolvedPath,
|
|
23
82
|
resolution_status: resolution.status,
|
|
24
|
-
limitations: resolution.limitations,
|
|
25
83
|
}
|
|
26
|
-
: {
|
|
27
|
-
declared_path: input.declaredPath,
|
|
28
|
-
resolution_context: input.context,
|
|
29
|
-
resolved_path: null,
|
|
30
|
-
resolution_status: resolution.status,
|
|
31
|
-
limitations: resolution.limitations,
|
|
32
|
-
};
|
|
84
|
+
: { ...facts, resolved_path: null, resolution_status: resolution.status };
|
|
33
85
|
};
|
|
86
|
+
/** Project retained conditional identities without flattening them into display text. */
|
|
87
|
+
export const artifactPathResolutionProperties = (resolution) => ({
|
|
88
|
+
...(resolution?.candidate_path === undefined
|
|
89
|
+
? {}
|
|
90
|
+
: { candidate_path: resolution.candidate_path }),
|
|
91
|
+
...(resolution?.conditional_resolutions === undefined
|
|
92
|
+
? {}
|
|
93
|
+
: {
|
|
94
|
+
conditional_resolutions: resolution.conditional_resolutions.map((branch) => ({
|
|
95
|
+
mode: branch.mode,
|
|
96
|
+
resolution_status: branch.resolution_status,
|
|
97
|
+
resolved_path: branch.resolved_path,
|
|
98
|
+
limitations: [...branch.limitations],
|
|
99
|
+
...(branch.candidate_path === undefined
|
|
100
|
+
? {}
|
|
101
|
+
: { candidate_path: branch.candidate_path }),
|
|
102
|
+
})),
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
const conditionalResolution = (mode, result) => ({
|
|
106
|
+
mode,
|
|
107
|
+
resolution_status: result.status,
|
|
108
|
+
resolved_path: result.resolvedPath,
|
|
109
|
+
limitations: result.limitations,
|
|
110
|
+
...(result.candidatePath === undefined
|
|
111
|
+
? {}
|
|
112
|
+
: { candidate_path: result.candidatePath }),
|
|
113
|
+
});
|
|
34
114
|
const resolvePath = (input) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
115
|
+
if (input.runtimePathKind === "node-entrypoint")
|
|
116
|
+
return resolveNodeRuntimeEntrypoint(input);
|
|
117
|
+
if (input.moduleKind === "compiler-dependent") {
|
|
118
|
+
const imported = resolvePath({ ...input, moduleKind: "import" });
|
|
119
|
+
const required = resolvePath({ ...input, moduleKind: "require" });
|
|
120
|
+
const sameOutcome = imported.status === required.status &&
|
|
121
|
+
imported.resolvedPath === required.resolvedPath &&
|
|
122
|
+
imported.candidatePath === required.candidatePath;
|
|
123
|
+
const limitation = "Static TypeScript loader mode is compiler-dependent without retained compiler options. " +
|
|
124
|
+
(sameOutcome
|
|
125
|
+
? "Node import and require resolution agree on this outcome."
|
|
126
|
+
: "Node import and require resolution disagree; neither branch is an established target.");
|
|
127
|
+
return sameOutcome
|
|
128
|
+
? {
|
|
129
|
+
...imported,
|
|
130
|
+
limitations: [
|
|
131
|
+
...new Set([
|
|
132
|
+
...imported.limitations,
|
|
133
|
+
...required.limitations,
|
|
134
|
+
limitation,
|
|
135
|
+
]),
|
|
136
|
+
],
|
|
137
|
+
}
|
|
138
|
+
: {
|
|
139
|
+
resolvedPath: null,
|
|
140
|
+
status: "unavailable",
|
|
141
|
+
limitations: [limitation],
|
|
142
|
+
conditionalResolutions: [
|
|
143
|
+
conditionalResolution("import", imported),
|
|
144
|
+
conditionalResolution("require", required),
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (input.runtimePathKind === "url-resource")
|
|
149
|
+
return resolveExactUrlResource(input);
|
|
150
|
+
if (input.runtimePathKind === "exact-file" && isRuntimePathDeclaration(input))
|
|
151
|
+
return resolveRuntimeEntrypoint(input);
|
|
152
|
+
// Package import keys are literal lookup identities, not artifact paths.
|
|
153
|
+
// The selected target is admitted separately by resolveExportTarget.
|
|
154
|
+
if (input.context === "module-specifier" &&
|
|
155
|
+
input.declaredPath.startsWith("#"))
|
|
156
|
+
return resolvePackageImportAlias(input, input.declaredPath);
|
|
38
157
|
const candidate = contextualCandidate(input);
|
|
39
158
|
if (typeof candidate !== "string")
|
|
40
159
|
return candidate;
|
|
41
160
|
const confined = confineCandidate(candidate);
|
|
42
161
|
if (typeof confined !== "string")
|
|
43
162
|
return confined;
|
|
44
|
-
if (input.context === "html-reference")
|
|
163
|
+
if (input.context === "html-reference" || input.context === "url-reference")
|
|
45
164
|
return (resolveFileCandidates(input, [confined]) ??
|
|
46
165
|
unresolvedCandidate("not-found", [
|
|
47
|
-
`The exact HTML resource ${confined} was not found among the selected application files.`,
|
|
166
|
+
`The exact ${input.context === "html-reference" ? "HTML" : "URL"} resource ${confined} was not found among the selected application files.`,
|
|
48
167
|
]));
|
|
49
|
-
|
|
168
|
+
const isModuleUrlPath = input.context === "module-specifier" &&
|
|
169
|
+
(isRelativeJavaScriptModuleSpecifier(input.declaredPath) ||
|
|
170
|
+
input.declaredPath.startsWith("/") ||
|
|
171
|
+
fileUrlPath(input.declaredPath) !== undefined);
|
|
172
|
+
const emittedSourceCandidates = isModuleUrlPath && input.moduleKind !== undefined
|
|
173
|
+
? typescriptEmittedSourceCandidates(input.sourcePath, confined)
|
|
174
|
+
: [];
|
|
175
|
+
if (isModuleUrlPath && input.moduleKind === "import")
|
|
176
|
+
return (resolveRuntimeSourceCandidates(input, confined, emittedSourceCandidates) ?? notFoundCandidate());
|
|
177
|
+
return resolveCandidate(input, confined, new Set(), emittedSourceCandidates);
|
|
178
|
+
};
|
|
179
|
+
const resolveExactUrlResource = (input) => {
|
|
180
|
+
// Electron loadURL requires a protocol. A scheme-less string is not relative
|
|
181
|
+
// to the calling script; filesystem paths belong to loadFile.
|
|
182
|
+
if (!hasScheme(input.declaredPath))
|
|
183
|
+
return unresolvedCandidate("unavailable", [
|
|
184
|
+
"Electron loadURL requires a URL protocol; relative filesystem paths belong to loadFile.",
|
|
185
|
+
]);
|
|
186
|
+
if (!/^file:/iu.test(input.declaredPath))
|
|
187
|
+
return unresolvedCandidate("external", [
|
|
188
|
+
"Only file URLs can be mapped to selected local application artifacts.",
|
|
189
|
+
]);
|
|
190
|
+
const urlContextCandidate = contextualCandidate(input);
|
|
191
|
+
if (typeof urlContextCandidate !== "string")
|
|
192
|
+
return urlContextCandidate;
|
|
193
|
+
const confined = confineCandidate(urlContextCandidate);
|
|
194
|
+
if (typeof confined !== "string")
|
|
195
|
+
return confined;
|
|
196
|
+
return (resolveFileCandidates(input, [confined]) ?? {
|
|
197
|
+
resolvedPath: null,
|
|
198
|
+
status: "not-found",
|
|
199
|
+
candidatePath: confined,
|
|
200
|
+
limitations: [
|
|
201
|
+
`The exact URL resource ${confined} was not found among the selected application files.`,
|
|
202
|
+
],
|
|
203
|
+
});
|
|
50
204
|
};
|
|
51
|
-
const
|
|
52
|
-
|
|
205
|
+
const isRuntimePathDeclaration = (input) => input.context === "filesystem-expression" ||
|
|
206
|
+
(input.context === "module-specifier" &&
|
|
207
|
+
(isRelativeJavaScriptModuleSpecifier(input.declaredPath) ||
|
|
208
|
+
input.declaredPath.startsWith("/") ||
|
|
209
|
+
fileUrlPath(input.declaredPath) !== undefined));
|
|
210
|
+
const resolveNodeRuntimeEntrypoint = (input) => {
|
|
211
|
+
const { runtimePathKind: _runtimePathKind, ...sourceInput } = input;
|
|
212
|
+
const runtimeInput = { ...sourceInput, moduleKind: "require" };
|
|
213
|
+
if (!isRuntimePathDeclaration(runtimeInput))
|
|
214
|
+
return resolvePath(runtimeInput);
|
|
215
|
+
const candidate = contextualCandidate(runtimeInput);
|
|
216
|
+
if (typeof candidate !== "string")
|
|
217
|
+
return candidate;
|
|
218
|
+
const confined = confineCandidate(candidate);
|
|
219
|
+
if (typeof confined !== "string")
|
|
220
|
+
return confined;
|
|
221
|
+
// Node entrypoints use runtime file/directory probes. They do not originate
|
|
222
|
+
// in emitted TypeScript import syntax and cannot select a source substitute.
|
|
223
|
+
const resolution = resolveCandidate(runtimeInput, confined, new Set());
|
|
224
|
+
// Runtime entrypoint analysis has no extension or directory fallback, but
|
|
225
|
+
// retain the normalized loader path when that exact target is absent.
|
|
226
|
+
return resolution.status === "not-found" &&
|
|
227
|
+
resolution.candidatePath === undefined
|
|
228
|
+
? { ...resolution, candidatePath: confined }
|
|
229
|
+
: resolution;
|
|
230
|
+
};
|
|
231
|
+
const resolveRuntimeEntrypoint = (input) => {
|
|
232
|
+
const rejected = rejectDeclaration(input.declaredPath);
|
|
233
|
+
if (rejected !== null)
|
|
234
|
+
return rejected;
|
|
235
|
+
if (hasScheme(input.declaredPath) || looksExternal(input.declaredPath))
|
|
236
|
+
return unresolvedCandidate("external", [
|
|
237
|
+
"Electron runtime entrypoints must identify local paths, not external URLs.",
|
|
238
|
+
]);
|
|
239
|
+
const candidate = confineCandidate(relativeCandidate(input.sourcePath, input.declaredPath));
|
|
240
|
+
if (typeof candidate !== "string")
|
|
241
|
+
return candidate;
|
|
242
|
+
return (resolveFileCandidates(input, [candidate]) ?? {
|
|
243
|
+
resolvedPath: null,
|
|
244
|
+
status: "not-found",
|
|
245
|
+
candidatePath: candidate,
|
|
246
|
+
limitations: [
|
|
247
|
+
`The declared Electron runtime entrypoint ${candidate} was not found as an exact file among the selected application files; extension and directory fallback were not attempted.`,
|
|
248
|
+
],
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
const resolveRuntimeSourceCandidates = (input, exactPath, sourceCandidates) => {
|
|
252
|
+
const exactCandidate = {
|
|
253
|
+
path: exactPath,
|
|
254
|
+
kind: "implementation",
|
|
255
|
+
};
|
|
256
|
+
for (const candidate of [exactCandidate, ...sourceCandidates]) {
|
|
257
|
+
const selected = findFileCandidate(input, candidate.path);
|
|
258
|
+
if (selected === null)
|
|
259
|
+
continue;
|
|
260
|
+
return candidate.kind === "declaration"
|
|
261
|
+
? {
|
|
262
|
+
resolvedPath: null,
|
|
263
|
+
status: "unavailable",
|
|
264
|
+
candidatePath: candidate.path,
|
|
265
|
+
limitations: [
|
|
266
|
+
"Only a TypeScript declaration fallback was found; it does not establish the requested runtime module.",
|
|
267
|
+
],
|
|
268
|
+
}
|
|
269
|
+
: selected;
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
272
|
+
};
|
|
273
|
+
const rejectDeclaration = (declared, literalPercent = false, allowEmptyPath = false) => {
|
|
274
|
+
if (declared.length === 0 && !allowEmptyPath)
|
|
53
275
|
return unresolvedCandidate("rejected", ["The declared path is empty."]);
|
|
54
276
|
if (declared.includes("\0") || declared.includes("\\"))
|
|
55
277
|
return unresolvedCandidate("rejected", [
|
|
56
278
|
"NUL and backslash path syntax are not admitted for canonical artifact paths.",
|
|
57
279
|
]);
|
|
58
|
-
if (!admitsCanonicalPathSyntax(declared))
|
|
280
|
+
if (!literalPercent && !admitsCanonicalPathSyntax(declared))
|
|
59
281
|
return unresolvedCandidate("rejected", [
|
|
60
282
|
"Encoded dot or separator bytes are rejected before artifact path resolution.",
|
|
61
283
|
]);
|
|
62
284
|
return null;
|
|
63
285
|
};
|
|
286
|
+
/**
|
|
287
|
+
* Node's CommonJS loader never percent-decodes a request or a legacy package
|
|
288
|
+
* main, so `%2e` and `%2f` there are literal filename bytes, not encoded dots
|
|
289
|
+
* or separators. Root confinement still applies to the joined candidate.
|
|
290
|
+
*/
|
|
291
|
+
const declaresLiteralPercent = (input) => input.moduleKind === "require" &&
|
|
292
|
+
(input.context === "module-specifier" ||
|
|
293
|
+
input.context === "package-entrypoint");
|
|
64
294
|
const contextualCandidate = (input) => {
|
|
65
295
|
const { context } = input;
|
|
66
|
-
let declared = context === "html-reference" ||
|
|
67
|
-
context === "url-reference" ||
|
|
68
|
-
(context === "module-specifier" && input.moduleKind !== "require")
|
|
69
|
-
? stripQueryAndFragment(input.declaredPath)
|
|
70
|
-
: input.declaredPath;
|
|
71
296
|
if (context === "html-reference")
|
|
72
297
|
return htmlCandidate(input);
|
|
73
|
-
|
|
298
|
+
// URL suffixes are evidence, not pathname bytes. Admit only the path while
|
|
299
|
+
// retaining the complete declaration on the resolution result.
|
|
300
|
+
let declared = context === "url-reference"
|
|
301
|
+
? stripQueryAndFragment(input.declaredPath)
|
|
302
|
+
: input.declaredPath;
|
|
303
|
+
if (context === "url-reference" && declared.length === 0)
|
|
304
|
+
return input.runtimePathKind === "url-resource"
|
|
305
|
+
? unresolvedCandidate("unavailable", [
|
|
306
|
+
"A suffix-only runtime URL requires the window's current document URL; the calling script does not establish that base.",
|
|
307
|
+
])
|
|
308
|
+
: unresolvedCandidate("rejected", [
|
|
309
|
+
"The URL reference contains no pathname, and its base document is not established by this analysis.",
|
|
310
|
+
]);
|
|
311
|
+
if (context === "module-specifier" && /^file:/iu.test(declared)) {
|
|
74
312
|
const fileUrl = fileUrlPath(declared);
|
|
313
|
+
if (fileUrl === null)
|
|
314
|
+
return unresolvedCandidate("rejected", [
|
|
315
|
+
"The file URL path contains syntax that cannot identify a canonical artifact path.",
|
|
316
|
+
]);
|
|
75
317
|
if (fileUrl !== undefined)
|
|
76
|
-
return
|
|
318
|
+
return input.moduleKind === "require"
|
|
319
|
+
? unresolvedCandidate("external", [
|
|
320
|
+
"Node CommonJS require specifiers do not resolve file URLs as local artifacts.",
|
|
321
|
+
])
|
|
322
|
+
: fileUrl;
|
|
323
|
+
return unresolvedCandidate("external", [
|
|
324
|
+
"File URL authorities or invalid file URL forms cannot be mapped to artifact-local paths.",
|
|
325
|
+
]);
|
|
326
|
+
}
|
|
327
|
+
const hasUrlPathSemantics = context === "module-specifier" && input.moduleKind === "import";
|
|
328
|
+
if (hasUrlPathSemantics)
|
|
329
|
+
declared = htmlUrlText(declared);
|
|
330
|
+
const rejected = rejectDeclaration(declared, declaresLiteralPercent(input) || hasUrlPathSemantics);
|
|
331
|
+
if (rejected !== null)
|
|
332
|
+
return rejected;
|
|
333
|
+
if (context === "module-specifier") {
|
|
77
334
|
if (hasScheme(declared))
|
|
78
335
|
return unresolvedCandidate("external", [
|
|
79
336
|
"URL and Node builtin schemes are outside static artifact module resolution.",
|
|
80
337
|
]);
|
|
81
|
-
if (!declared
|
|
82
|
-
|
|
338
|
+
if (!isRelativeJavaScriptModuleSpecifier(declared) &&
|
|
339
|
+
!declared.startsWith("/"))
|
|
340
|
+
return bareModuleCandidate(input);
|
|
83
341
|
if (input.moduleKind !== "require") {
|
|
84
|
-
|
|
342
|
+
if (/%(?:2f|5c)/iu.test(stripQueryAndFragment(declared)))
|
|
343
|
+
return unresolvedCandidate("rejected", [
|
|
344
|
+
"ES module URL paths cannot contain percent-encoded slash or backslash bytes.",
|
|
345
|
+
]);
|
|
346
|
+
const decoded = decodeModuleUrlPath(stripQueryAndFragment(declared));
|
|
85
347
|
if (typeof decoded !== "string")
|
|
86
348
|
return decoded;
|
|
87
349
|
declared = decoded;
|
|
@@ -91,7 +353,41 @@ const contextualCandidate = (input) => {
|
|
|
91
353
|
return unresolvedCandidate("external", [
|
|
92
354
|
"URL schemes and protocol-relative URLs are outside this local artifact path context.",
|
|
93
355
|
]);
|
|
94
|
-
|
|
356
|
+
if (context === "url-reference") {
|
|
357
|
+
// A file base gives raw drive-letter segments special meaning, including
|
|
358
|
+
// after dot segments reach the root. Parse before percent decoding so an
|
|
359
|
+
// encoded drive-like filename stays literal. The synthetic base establishes
|
|
360
|
+
// only this ambiguity; it does not establish the source's runtime scheme.
|
|
361
|
+
const sourceUrlPath = input.sourcePath
|
|
362
|
+
.split("/")
|
|
363
|
+
.map(encodeURIComponent)
|
|
364
|
+
.join("/");
|
|
365
|
+
const fileReference = URL.parse(declared, `file:///${sourceUrlPath}`);
|
|
366
|
+
if (fileReference === null)
|
|
367
|
+
return unresolvedCandidate("rejected", [
|
|
368
|
+
"The URL reference cannot be parsed as a URL.",
|
|
369
|
+
]);
|
|
370
|
+
if (/^\/[A-Za-z]:(?:\/|$)/u.test(fileReference.pathname))
|
|
371
|
+
return unresolvedCandidate("unavailable", [
|
|
372
|
+
"Drive-letter URL paths cannot be mapped without the source URL scheme and filesystem root.",
|
|
373
|
+
]);
|
|
374
|
+
const decoded = percentDecodeUrlPath(declared);
|
|
375
|
+
if (decoded === null)
|
|
376
|
+
return unresolvedCandidate("rejected", [
|
|
377
|
+
"The URL reference path percent-decodes to NUL or to bytes that are not UTF-8.",
|
|
378
|
+
]);
|
|
379
|
+
// Empty URL segments are significant; canonical filesystem paths cannot
|
|
380
|
+
// preserve them, including their interaction with following dot segments.
|
|
381
|
+
if (decoded.includes("//"))
|
|
382
|
+
return unresolvedCandidate("unavailable", [
|
|
383
|
+
"Repeated URL path separators cannot be mapped to an exact canonical artifact file.",
|
|
384
|
+
]);
|
|
385
|
+
return exactUrlPathCandidate(decoded, relativeCandidate(input.sourcePath, decoded), "URL");
|
|
386
|
+
}
|
|
387
|
+
const candidate = relativeCandidate(input.sourcePath, declared);
|
|
388
|
+
return context === "module-specifier" && input.moduleKind === "import"
|
|
389
|
+
? exactUrlPathCandidate(declared, candidate, "module URL")
|
|
390
|
+
: candidate;
|
|
95
391
|
};
|
|
96
392
|
const decodeModuleUrlPath = (declared) => {
|
|
97
393
|
let decoded;
|
|
@@ -113,51 +409,247 @@ const decodeModuleUrlPath = (declared) => {
|
|
|
113
409
|
const relativeCandidate = (sourcePath, declared) => declared.startsWith("/")
|
|
114
410
|
? declared.slice(1)
|
|
115
411
|
: posix.join(posix.dirname(sourcePath), declared);
|
|
116
|
-
const bareModuleCandidate = (input
|
|
117
|
-
const
|
|
118
|
-
if (
|
|
412
|
+
const bareModuleCandidate = (input) => {
|
|
413
|
+
const request = parseBarePackageRequest(input.declaredPath, input.moduleKind);
|
|
414
|
+
if (request === null || isBuiltin(input.declaredPath))
|
|
119
415
|
return unresolvedCandidate("external", [
|
|
120
|
-
"The bare specifier is a Node builtin
|
|
416
|
+
"The bare specifier is a Node builtin or invalid package name.",
|
|
417
|
+
]);
|
|
418
|
+
if (input.moduleKind === "import" &&
|
|
419
|
+
(request.packageName.startsWith(".") || request.packageName.includes("%")))
|
|
420
|
+
return unresolvedCandidate("rejected", [
|
|
421
|
+
"ES module package names cannot start with a dot or contain percent signs.",
|
|
121
422
|
]);
|
|
122
|
-
const
|
|
423
|
+
const self = packageSelfCandidate(input, request);
|
|
424
|
+
if (self !== null)
|
|
425
|
+
return self;
|
|
426
|
+
// ESM constructs a package.json URL; its parsed identity is not a literal
|
|
427
|
+
// dependency directory. Self resolution above still uses the exact name.
|
|
428
|
+
let dependencyDirectory = posix.join("node_modules", request.packageName);
|
|
429
|
+
if (input.moduleKind === "import") {
|
|
430
|
+
const metadataUrl = new URL(`./node_modules/${request.packageName}/package.json`, PACKAGE_ARTIFACT_ROOT_URL);
|
|
431
|
+
if (!metadataUrl.pathname.endsWith("/package.json"))
|
|
432
|
+
return unresolvedCandidate("external", [
|
|
433
|
+
`ESM package name ${JSON.stringify(request.packageName)} produces a dependency URL whose pathname does not name package.json; no literal or suffix-stripped package directory was searched.`,
|
|
434
|
+
]);
|
|
435
|
+
const decoded = decodeModuleUrlPath(metadataUrl.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length));
|
|
436
|
+
if (typeof decoded !== "string")
|
|
437
|
+
return decoded;
|
|
438
|
+
const confined = confineCandidate(decoded);
|
|
439
|
+
if (typeof confined !== "string")
|
|
440
|
+
return confined;
|
|
441
|
+
dependencyDirectory = posix.dirname(confined);
|
|
442
|
+
}
|
|
123
443
|
const source = input.files.get(input.sourcePath);
|
|
444
|
+
let nearestNotFound = null;
|
|
445
|
+
for (const directory of packageLookupDirectories(input)) {
|
|
446
|
+
const candidate = posix.join(directory, dependencyDirectory);
|
|
447
|
+
const metadata = readPackageMetadata(input, candidate);
|
|
448
|
+
const continueCommonJsLookup = input.moduleKind === "require" &&
|
|
449
|
+
(metadata.kind === "absent" ||
|
|
450
|
+
(metadata.kind === "available" &&
|
|
451
|
+
(!request.dependencyExportsEligible ||
|
|
452
|
+
metadata.exports === undefined)));
|
|
453
|
+
const packageResolution = metadata.kind !== "absent" ||
|
|
454
|
+
hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles)
|
|
455
|
+
? resolvePackageDependency(input, candidate, request, metadata)
|
|
456
|
+
: request.packageSubpath === "." && input.moduleKind !== "import"
|
|
457
|
+
? resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind))
|
|
458
|
+
: null;
|
|
459
|
+
if (packageResolution !== null) {
|
|
460
|
+
if (continueCommonJsLookup &&
|
|
461
|
+
packageResolution.status === "not-found" &&
|
|
462
|
+
packageResolution.stopsAncestorLookup !== true) {
|
|
463
|
+
nearestNotFound ??= packageResolution;
|
|
464
|
+
}
|
|
465
|
+
else
|
|
466
|
+
return packageResolution;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (nearestNotFound !== null)
|
|
470
|
+
return nearestNotFound;
|
|
471
|
+
return unresolvedCandidate("external", [
|
|
472
|
+
"No matching bare package was inventoried in an enclosing node_modules directory.",
|
|
473
|
+
]);
|
|
474
|
+
};
|
|
475
|
+
function* packageLookupDirectories(input) {
|
|
124
476
|
let directory = posix.dirname(input.sourcePath);
|
|
125
477
|
while (true) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
478
|
+
if (input.moduleKind !== "require" ||
|
|
479
|
+
posix.basename(directory) !== "node_modules")
|
|
480
|
+
yield directory;
|
|
481
|
+
if (directory === "." || directory === "")
|
|
482
|
+
return;
|
|
483
|
+
directory = posix.dirname(directory);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Nearest same-container package.json, stopping at a `node_modules` directory
|
|
488
|
+
* so a nested package cannot inherit an ancestor's map.
|
|
489
|
+
*/
|
|
490
|
+
const enclosingPackageMetadata = (input) => {
|
|
491
|
+
let directory = posix.dirname(input.sourcePath);
|
|
492
|
+
while (posix.basename(directory) !== "node_modules") {
|
|
493
|
+
const metadata = readPackageMetadata(input, directory);
|
|
494
|
+
if (metadata.kind !== "absent")
|
|
495
|
+
return metadata;
|
|
134
496
|
if (directory === "." || directory === "")
|
|
135
497
|
break;
|
|
136
498
|
directory = posix.dirname(directory);
|
|
137
499
|
}
|
|
138
|
-
return
|
|
139
|
-
"No matching bare package was inventoried in an enclosing node_modules directory.",
|
|
140
|
-
]);
|
|
500
|
+
return { kind: "none" };
|
|
141
501
|
};
|
|
142
|
-
/**
|
|
143
|
-
|
|
144
|
-
|
|
502
|
+
/**
|
|
503
|
+
* Resolve an exact `#alias` against the importer's enclosing `imports` map.
|
|
504
|
+
* Selected relative targets are exact files; patterns, recursive aliases, and
|
|
505
|
+
* external-package targets stay unresolved without falling through.
|
|
506
|
+
*/
|
|
507
|
+
const resolvePackageImportAlias = (input, specifier) => {
|
|
508
|
+
const classified = classifyPackageImportSpecifier(specifier);
|
|
509
|
+
if (classified.kind === "invalid")
|
|
510
|
+
return unresolvedCandidate("rejected", [
|
|
511
|
+
`The package import specifier ${JSON.stringify(specifier)} is invalid; "#" and specifiers that end with "/" are not valid import aliases.`,
|
|
512
|
+
]);
|
|
513
|
+
if (classified.kind === "pattern")
|
|
514
|
+
return unresolvedCandidate("external", [
|
|
515
|
+
`Wildcard and directory package import aliases remain unresolved; ${JSON.stringify(specifier)} is not an exact imports key.`,
|
|
516
|
+
]);
|
|
517
|
+
const metadata = enclosingPackageMetadata(input);
|
|
518
|
+
if (metadata.kind === "none")
|
|
519
|
+
return unresolvedCandidate("external", [
|
|
520
|
+
`No enclosing package.json defines package import alias ${specifier}; package import maps do not cross package scopes.`,
|
|
521
|
+
]);
|
|
145
522
|
if (metadata.kind === "unavailable")
|
|
146
523
|
return unresolvedCandidate("unavailable", [metadata.limitation]);
|
|
147
|
-
const
|
|
148
|
-
|
|
524
|
+
const lookup = lookupExactPackageImport(metadata.imports, specifier);
|
|
525
|
+
if (lookup.kind === "undefined-map")
|
|
526
|
+
return unresolvedCandidate("external", [
|
|
527
|
+
`Package metadata ${metadata.path} does not define package import alias ${specifier}.`,
|
|
528
|
+
]);
|
|
529
|
+
if (lookup.kind === "missing-key")
|
|
530
|
+
return unresolvedCandidate("external", [
|
|
531
|
+
`Package metadata ${metadata.path} does not define package import alias ${specifier}; it declares ${lookup.declared.join(", ") || "no imports keys"}.`,
|
|
532
|
+
]);
|
|
533
|
+
if (lookup.kind === "pattern-unresolved")
|
|
534
|
+
return unresolvedCandidate("external", [
|
|
535
|
+
`Wildcard package import aliases remain unresolved; package metadata ${metadata.path} has no exact imports key ${specifier}.`,
|
|
536
|
+
]);
|
|
537
|
+
const selected = selectExportTarget(lookup.target, packageExportConditions(input.moduleKind), metadata.path, "imports");
|
|
538
|
+
if (selected.kind === "invalid" || selected.kind === "invalid-config")
|
|
539
|
+
return unresolvedCandidate("rejected", [
|
|
540
|
+
`Package metadata ${metadata.path}: ${selected.limitation}`,
|
|
541
|
+
]);
|
|
542
|
+
if (selected.kind === "unmatched")
|
|
543
|
+
return unresolvedCandidate("external", [
|
|
544
|
+
`Package metadata ${metadata.path} declares no imports target for alias ${specifier} under the active conditions; it declares ${selected.declared.join(", ") || "no conditions"}.`,
|
|
545
|
+
]);
|
|
546
|
+
if (selected.kind === "blocked")
|
|
547
|
+
return unresolvedCandidate("external", [
|
|
548
|
+
`Package metadata ${metadata.path} blocks import alias ${specifier} with ${selected.cause === "null" ? "an explicit null imports target" : "an empty imports target array"}.`,
|
|
549
|
+
]);
|
|
550
|
+
if (selected.kind === "non-relative") {
|
|
551
|
+
const target = classifyPackageImportTargetString(selected.value);
|
|
552
|
+
return unresolvedCandidate("external", [
|
|
553
|
+
target.kind === "recursive"
|
|
554
|
+
? `Recursive package import aliases remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`
|
|
555
|
+
: `External-package import targets remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`,
|
|
556
|
+
]);
|
|
557
|
+
}
|
|
558
|
+
return resolveExportTarget(input, metadata.path, selected, "imports");
|
|
559
|
+
};
|
|
560
|
+
/** Self references use the nearest package scope before dependency lookup. */
|
|
561
|
+
const packageSelfCandidate = (input, request) => {
|
|
562
|
+
if (input.moduleKind === undefined || !input.files.has(input.sourcePath))
|
|
563
|
+
return null;
|
|
564
|
+
const metadata = enclosingPackageMetadata(input);
|
|
565
|
+
if (metadata.kind === "none")
|
|
566
|
+
return null;
|
|
567
|
+
if (metadata.kind === "unavailable")
|
|
568
|
+
return unresolvedCandidate("unavailable", [metadata.limitation]);
|
|
569
|
+
if (metadata.name === undefined || metadata.exports === undefined)
|
|
570
|
+
return null;
|
|
571
|
+
let subpath;
|
|
572
|
+
if (input.moduleKind === "import") {
|
|
573
|
+
if (metadata.name !== request.packageName)
|
|
574
|
+
return null;
|
|
575
|
+
subpath = request.packageSubpath;
|
|
576
|
+
}
|
|
577
|
+
else if (input.declaredPath === metadata.name) {
|
|
578
|
+
subpath = ".";
|
|
579
|
+
}
|
|
580
|
+
else if (input.declaredPath.startsWith(`${metadata.name}/`)) {
|
|
581
|
+
subpath = `.${input.declaredPath.slice(metadata.name.length)}`;
|
|
582
|
+
}
|
|
583
|
+
else
|
|
584
|
+
return null;
|
|
585
|
+
// Self resolution does not apply the CommonJS dependency-name matcher.
|
|
586
|
+
return resolvePackageExports(input, metadata.path, subpath, metadata.exports);
|
|
587
|
+
};
|
|
588
|
+
/** Resolve an installed dependency using one parsed request and its metadata. */
|
|
589
|
+
const resolvePackageDependency = (input, directory, request, metadata) => {
|
|
590
|
+
const subpath = request.packageSubpath;
|
|
591
|
+
if (request.dependencyExportsEligible && metadata.kind === "unavailable")
|
|
592
|
+
return unresolvedCandidate("unavailable", [metadata.limitation]);
|
|
593
|
+
const rawExports = request.dependencyExportsEligible && metadata.kind === "available"
|
|
594
|
+
? metadata.exports
|
|
149
595
|
: undefined;
|
|
150
|
-
if (rawExports === undefined
|
|
596
|
+
if (rawExports === undefined) {
|
|
151
597
|
if (subpath === ".")
|
|
152
|
-
return
|
|
153
|
-
|
|
598
|
+
return ((input.moduleKind === "import"
|
|
599
|
+
? null
|
|
600
|
+
: resolveFileCandidates(input, fileCandidates(directory, input.moduleKind))) ?? resolveDirectory(input, directory, metadata, new Set()));
|
|
601
|
+
if (input.moduleKind === "import")
|
|
602
|
+
return resolveLegacyEsmSubpath(input, directory, subpath);
|
|
154
603
|
const candidate = confineCandidate(`${directory}/${subpath.slice(2)}`);
|
|
155
604
|
return typeof candidate === "string"
|
|
156
605
|
? resolveCandidate(input, candidate, new Set())
|
|
157
606
|
: candidate;
|
|
158
607
|
}
|
|
159
|
-
|
|
160
|
-
|
|
608
|
+
return resolvePackageExports(input, posix.join(directory, "package.json"), subpath, rawExports);
|
|
609
|
+
};
|
|
610
|
+
/** Legacy ESM package subpaths are exact URLs, never extension or directory lookups. */
|
|
611
|
+
const resolveLegacyEsmSubpath = (input, directory, subpath) => {
|
|
612
|
+
const declarationRejection = rejectDeclaration(stripQueryAndFragment(htmlUrlText(subpath)));
|
|
613
|
+
if (declarationRejection !== null)
|
|
614
|
+
return declarationRejection;
|
|
615
|
+
const metadataUrl = packageMetadataUrl(posix.join(directory, "package.json"), subpath);
|
|
616
|
+
const url = new URL(subpath, metadataUrl.ok ? metadataUrl.value : metadataUrl.error.structuralUrl);
|
|
617
|
+
if (!url.pathname.startsWith(PACKAGE_ARTIFACT_ROOT_URL.pathname))
|
|
618
|
+
return unresolvedCandidate("rejected", [
|
|
619
|
+
"The resolved candidate escapes the canonical artifact root.",
|
|
620
|
+
]);
|
|
621
|
+
const encodedPath = url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
|
|
622
|
+
const rejected = rejectDeclaration(encodedPath);
|
|
623
|
+
if (rejected !== null)
|
|
624
|
+
return rejected;
|
|
625
|
+
const decoded = decodeModuleUrlPath(encodedPath);
|
|
626
|
+
if (typeof decoded !== "string")
|
|
627
|
+
return decoded;
|
|
628
|
+
const candidate = confineCandidate(decoded);
|
|
629
|
+
if (typeof candidate !== "string")
|
|
630
|
+
return candidate;
|
|
631
|
+
if (urlPathIsDirectory(url.pathname))
|
|
632
|
+
return unresolvedCandidate("rejected", [
|
|
633
|
+
`ESM package subpath ${JSON.stringify(input.declaredPath)} has URL directory form; directory imports are unsupported and no exact-file, package main or index lookup was attempted.`,
|
|
634
|
+
]);
|
|
635
|
+
const unrepresentableBase = metadataUrl.ok ? undefined : metadataUrl.error;
|
|
636
|
+
if (unrepresentableBase !== undefined &&
|
|
637
|
+
url.pathname
|
|
638
|
+
.split("/")
|
|
639
|
+
.some((segment) => unrepresentableBase.structuralSegments.has(segment)))
|
|
640
|
+
return unresolvedCandidate("unavailable", [unrepresentableBase.limitation]);
|
|
641
|
+
const file = resolveFileCandidates(input, [candidate]);
|
|
642
|
+
if (file !== null)
|
|
643
|
+
return file;
|
|
644
|
+
const source = input.files.get(input.sourcePath);
|
|
645
|
+
if (hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
|
|
646
|
+
return unresolvedCandidate("rejected", [
|
|
647
|
+
`ESM package subpath ${candidate} names a directory; directory imports are unsupported and package main or index lookup was not attempted.`,
|
|
648
|
+
]);
|
|
649
|
+
return exactPackageTargetNotFound(candidate, "ESM subpath");
|
|
650
|
+
};
|
|
651
|
+
const resolvePackageExports = (input, packagePath, subpath, rawExports) => {
|
|
652
|
+
const exported = selectPackageExport(rawExports, subpath, input.moduleKind, packagePath);
|
|
161
653
|
if (exported.status === "rejected")
|
|
162
654
|
return unresolvedCandidate("rejected", [
|
|
163
655
|
`Package metadata ${packagePath}: ${exported.limitation}`,
|
|
@@ -168,33 +660,63 @@ const resolvePackageSpecifier = (input, directory, subpath) => {
|
|
|
168
660
|
]);
|
|
169
661
|
if (exported.status === "blocked")
|
|
170
662
|
return unresolvedCandidate("external", [
|
|
171
|
-
`Directory package metadata ${packagePath} blocks subpath ${subpath} with an explicit null exports target.`,
|
|
663
|
+
`Directory package metadata ${packagePath} blocks subpath ${subpath} with ${exported.cause === "null" ? "an explicit null exports target" : "an empty exports target array"}.`,
|
|
172
664
|
]);
|
|
173
|
-
return resolveExportTarget(input, packagePath, exported
|
|
665
|
+
return resolveExportTarget(input, packagePath, exported);
|
|
174
666
|
};
|
|
175
|
-
/** An exports target is a URL naming one exact file for both Node loaders. */
|
|
176
|
-
const resolveExportTarget = (input, packagePath, target) => {
|
|
177
|
-
const
|
|
667
|
+
/** An exports or import target is a URL naming one exact file for both Node loaders. */
|
|
668
|
+
const resolveExportTarget = (input, packagePath, target, mapKind = "exports") => {
|
|
669
|
+
const withTargetSource = (outcome) => ({
|
|
670
|
+
...outcome,
|
|
671
|
+
limitations: outcome.limitations.map((reason) => `Package metadata ${packagePath}, ${mapKind} target ${JSON.stringify(target.value)}: ${reason}`),
|
|
672
|
+
});
|
|
673
|
+
// Node's CommonJS finalizer checks the serialized URL, including suffixes;
|
|
674
|
+
// its ESM finalizer checks only the pathname. Neither error retries arrays.
|
|
675
|
+
if (input.moduleKind === "require" && /%(?:2f|5c)/iu.test(target.url.href))
|
|
676
|
+
return withTargetSource(unresolvedCandidate("rejected", [
|
|
677
|
+
"The selected package URL contains encoded separator bytes.",
|
|
678
|
+
]));
|
|
679
|
+
const encodedPath = target.url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
|
|
680
|
+
// Package targets are URLs for both loaders, so their percent bytes encode.
|
|
681
|
+
const rejected = rejectDeclaration(encodedPath, false);
|
|
178
682
|
if (rejected !== null)
|
|
179
|
-
return rejected;
|
|
180
|
-
const decoded = decodeModuleUrlPath(
|
|
683
|
+
return withTargetSource(rejected);
|
|
684
|
+
const decoded = decodeModuleUrlPath(encodedPath);
|
|
181
685
|
if (typeof decoded !== "string")
|
|
182
|
-
return decoded;
|
|
183
|
-
const candidate = confineCandidate(
|
|
686
|
+
return withTargetSource(decoded);
|
|
687
|
+
const candidate = confineCandidate(decoded);
|
|
184
688
|
if (typeof candidate !== "string")
|
|
185
|
-
return candidate;
|
|
689
|
+
return withTargetSource(candidate);
|
|
690
|
+
if (target.lookupLimitation !== undefined)
|
|
691
|
+
return unresolvedCandidate("unavailable", [target.lookupLimitation]);
|
|
186
692
|
return (resolveFileCandidates(input, [candidate]) ??
|
|
187
|
-
|
|
693
|
+
withTargetSource(exactPackageTargetNotFound(candidate, mapKind)));
|
|
188
694
|
};
|
|
189
|
-
const
|
|
695
|
+
const parseBarePackageRequest = (specifier, moduleKind) => {
|
|
190
696
|
const segments = specifier.split("/");
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
697
|
+
let packageName = segments[0] ?? "";
|
|
698
|
+
if (packageName === "")
|
|
699
|
+
return null;
|
|
700
|
+
if (specifier.startsWith("@")) {
|
|
701
|
+
const packageSegment = segments[1];
|
|
702
|
+
if (packageSegment === undefined || packageSegment === "")
|
|
703
|
+
return null;
|
|
704
|
+
packageName = `${packageName}/${packageSegment}`;
|
|
705
|
+
}
|
|
706
|
+
// Node's CommonJS exports matcher excludes percent-containing package names.
|
|
707
|
+
// Compare the captured name so a scoped name cannot fall back to its scope.
|
|
708
|
+
const dependencyExportsEligible = moduleKind !== "require" ||
|
|
709
|
+
/^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/.exec(specifier)?.[1] ===
|
|
710
|
+
packageName;
|
|
711
|
+
return {
|
|
712
|
+
packageName,
|
|
713
|
+
packageSubpath: `.${specifier.slice(packageName.length)}`,
|
|
714
|
+
dependencyExportsEligible,
|
|
715
|
+
};
|
|
196
716
|
};
|
|
197
|
-
const hasContainerDirectory = (files, candidate, containerSha256) => {
|
|
717
|
+
const hasContainerDirectory = (files, candidate, containerSha256, directoryPaths, unanalyzedFiles) => {
|
|
718
|
+
if (directoryPaths?.has(candidate) === true)
|
|
719
|
+
return true;
|
|
198
720
|
if ([...indexCandidates(candidate), posix.join(candidate, "package.json")].some((path) => {
|
|
199
721
|
const file = files.get(path);
|
|
200
722
|
return (file !== undefined &&
|
|
@@ -210,10 +732,16 @@ const hasContainerDirectory = (files, candidate, containerSha256) => {
|
|
|
210
732
|
(containerSha256 === undefined ||
|
|
211
733
|
file.container_sha256 === containerSha256))
|
|
212
734
|
return true;
|
|
213
|
-
return false;
|
|
735
|
+
return unanalyzedFiles?.hasDirectory(candidate, containerSha256) ?? false;
|
|
214
736
|
};
|
|
215
737
|
const htmlCandidate = (input) => {
|
|
216
738
|
const declared = stripQueryAndFragment(htmlUrlText(input.declaredPath));
|
|
739
|
+
// HTML owns URL-text normalization and pathname admission. A nonempty URL
|
|
740
|
+
// reference may have no pathname; suffix bytes remain declaration evidence.
|
|
741
|
+
// HTML references are URL text, so percent bytes still encode.
|
|
742
|
+
const rejected = rejectDeclaration(declared, false, input.declaredPath !== "");
|
|
743
|
+
if (rejected !== null)
|
|
744
|
+
return rejected;
|
|
217
745
|
if (looksExternal(declared))
|
|
218
746
|
return unresolvedCandidate("external", [
|
|
219
747
|
"External HTML references are not mapped to local artifact assets.",
|
|
@@ -226,12 +754,6 @@ const htmlCandidate = (input) => {
|
|
|
226
754
|
return unresolvedCandidate("external", [
|
|
227
755
|
"The document base href is external, so its script reference is not a local artifact path.",
|
|
228
756
|
]);
|
|
229
|
-
// Removing URL tabs and newlines can join an encoded dot or separator that
|
|
230
|
-
// the raw declaration split, so admit the parsed URL text again.
|
|
231
|
-
if (!admitsCanonicalPathSyntax(declared))
|
|
232
|
-
return unresolvedCandidate("rejected", [
|
|
233
|
-
"Encoded dot or separator bytes are rejected before artifact path resolution.",
|
|
234
|
-
]);
|
|
235
757
|
const declaredPath = percentDecodeUrlPath(declared);
|
|
236
758
|
if (declaredPath === null)
|
|
237
759
|
return unresolvedCandidate("rejected", [
|
|
@@ -259,31 +781,26 @@ const htmlCandidate = (input) => {
|
|
|
259
781
|
? decodedBase.slice(1)
|
|
260
782
|
: posix.join(posix.dirname(input.sourcePath), decodedBase);
|
|
261
783
|
if (declaredPath === "")
|
|
262
|
-
return
|
|
784
|
+
return exactUrlPathCandidate(decodedBase, basePath, "HTML");
|
|
263
785
|
return posix.join(htmlBaseDirectory(decodedBase, basePath), declaredPath);
|
|
264
786
|
};
|
|
265
|
-
const
|
|
266
|
-
if (!
|
|
267
|
-
return
|
|
268
|
-
const confined = confineCandidate(
|
|
787
|
+
const exactUrlPathCandidate = (declared, candidate, kind) => {
|
|
788
|
+
if (!urlPathIsDirectory(declared))
|
|
789
|
+
return candidate;
|
|
790
|
+
const confined = confineCandidate(candidate);
|
|
269
791
|
if (typeof confined !== "string")
|
|
270
792
|
return confined;
|
|
271
793
|
return unresolvedCandidate("not-found", [
|
|
272
|
-
`The
|
|
794
|
+
`The ${kind} reference resolves to directory ${confined || "."}, not an exact selected application file.`,
|
|
273
795
|
]);
|
|
274
796
|
};
|
|
275
|
-
/**
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
base.endsWith("/.") ||
|
|
283
|
-
base.endsWith("/..") ||
|
|
284
|
-
base === "." ||
|
|
285
|
-
base === "..";
|
|
286
|
-
const htmlBaseDirectory = (base, basePath) => htmlBaseIsDirectory(base) ? basePath : posix.dirname(basePath);
|
|
797
|
+
/** Whether a URL path retains directory form after dot-segment normalization. */
|
|
798
|
+
const urlPathIsDirectory = (path) => path.endsWith("/") ||
|
|
799
|
+
path.endsWith("/.") ||
|
|
800
|
+
path.endsWith("/..") ||
|
|
801
|
+
path === "." ||
|
|
802
|
+
path === "..";
|
|
803
|
+
const htmlBaseDirectory = (base, basePath) => urlPathIsDirectory(base) ? basePath : posix.dirname(basePath);
|
|
287
804
|
const confineCandidate = (candidate) => {
|
|
288
805
|
const normalized = normalizeJoinedLogicalPath(candidate);
|
|
289
806
|
if (logicalPathEscapesRoot(normalized))
|
|
@@ -296,8 +813,18 @@ const readPackageMetadata = (input, directory) => {
|
|
|
296
813
|
const path = posix.join(directory, "package.json");
|
|
297
814
|
const file = input.files.get(path);
|
|
298
815
|
const source = input.files.get(input.sourcePath);
|
|
299
|
-
if (file === undefined
|
|
300
|
-
|
|
816
|
+
if (file === undefined) {
|
|
817
|
+
const unavailable = input.unanalyzedFiles?.get(path);
|
|
818
|
+
if (source !== undefined &&
|
|
819
|
+
unavailable?.container_sha256 === source.container_sha256)
|
|
820
|
+
return {
|
|
821
|
+
kind: "unavailable",
|
|
822
|
+
limitation: unavailable.limitations?.[0] ??
|
|
823
|
+
`Directory package metadata ${path} was inventoried but its bytes are unavailable.`,
|
|
824
|
+
};
|
|
825
|
+
return { kind: "absent" };
|
|
826
|
+
}
|
|
827
|
+
if (source !== undefined && file.container_sha256 !== source.container_sha256)
|
|
301
828
|
return { kind: "absent" };
|
|
302
829
|
if (!file.text.included)
|
|
303
830
|
return {
|
|
@@ -315,36 +842,67 @@ const readPackageMetadata = (input, directory) => {
|
|
|
315
842
|
limitation: `Directory package metadata ${path} is not valid package JSON.`,
|
|
316
843
|
};
|
|
317
844
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
: {
|
|
845
|
+
if (typeof value !== "object" || value === null)
|
|
846
|
+
return {
|
|
321
847
|
kind: "unavailable",
|
|
322
848
|
limitation: `Directory package metadata ${path} is not valid package JSON.`,
|
|
323
849
|
};
|
|
850
|
+
const name = Reflect.get(value, "name");
|
|
851
|
+
const exports = Reflect.get(value, "exports");
|
|
852
|
+
const imports = Reflect.get(value, "imports");
|
|
853
|
+
const main = Reflect.get(value, "main");
|
|
854
|
+
return {
|
|
855
|
+
kind: "available",
|
|
856
|
+
path,
|
|
857
|
+
name: typeof name === "string" ? name : undefined,
|
|
858
|
+
// Node's package reader ignores scalar root exports other than strings.
|
|
859
|
+
// Nested targets retain their raw values for exports validation.
|
|
860
|
+
exports: typeof exports === "string" ||
|
|
861
|
+
(typeof exports === "object" && exports !== null)
|
|
862
|
+
? exports
|
|
863
|
+
: undefined,
|
|
864
|
+
// Import maps must be non-array objects; other shapes are not a map.
|
|
865
|
+
imports: typeof imports === "object" && imports !== null && !Array.isArray(imports)
|
|
866
|
+
? imports
|
|
867
|
+
: undefined,
|
|
868
|
+
main: input.moduleKind !== undefined && typeof main !== "string"
|
|
869
|
+
? undefined
|
|
870
|
+
: main,
|
|
871
|
+
module: Reflect.get(value, "module"),
|
|
872
|
+
};
|
|
324
873
|
};
|
|
325
874
|
/** File and directory lookup never interprets a nested directory's exports. */
|
|
326
|
-
const resolveCandidate = (input, candidate, packageChain
|
|
327
|
-
|
|
875
|
+
const resolveCandidate = (input, candidate, packageChain, emittedSourceCandidates = []) => {
|
|
876
|
+
if (!commonJsDirectoryRequest(input)) {
|
|
877
|
+
const file = resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind)) ??
|
|
878
|
+
resolveRuntimeSourceCandidates(input, candidate, emittedSourceCandidates);
|
|
879
|
+
if (file !== null)
|
|
880
|
+
return file;
|
|
881
|
+
}
|
|
882
|
+
return resolveDirectory(input, candidate, readPackageMetadata(input, candidate), packageChain);
|
|
883
|
+
};
|
|
884
|
+
const commonJsDirectoryRequest = (input) => input.context === "module-specifier" &&
|
|
885
|
+
input.moduleKind === "require" &&
|
|
886
|
+
(input.declaredPath.endsWith("/") ||
|
|
887
|
+
/(?:^|\/)\.{1,2}$/u.test(input.declaredPath));
|
|
328
888
|
const resolveDirectory = (input, directory, metadata, packageChain) => {
|
|
329
889
|
if (metadata.kind === "absent")
|
|
330
|
-
return (resolveFileCandidates(input, indexCandidates(directory)) ??
|
|
331
|
-
notFoundCandidate());
|
|
890
|
+
return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
|
|
332
891
|
if (metadata.kind === "unavailable")
|
|
333
892
|
return unresolvedCandidate("unavailable", [metadata.limitation]);
|
|
334
893
|
if (packageChain.has(metadata.path))
|
|
335
894
|
return unresolvedCandidate("unavailable", [
|
|
336
895
|
`Directory package entrypoint cycle includes ${metadata.path}.`,
|
|
337
896
|
]);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
?
|
|
342
|
-
:
|
|
343
|
-
|
|
344
|
-
|
|
897
|
+
const entry = metadata.main === ""
|
|
898
|
+
? undefined
|
|
899
|
+
: metadata.main !== undefined
|
|
900
|
+
? metadata.main
|
|
901
|
+
: input.moduleKind === undefined
|
|
902
|
+
? metadata.module
|
|
903
|
+
: undefined;
|
|
345
904
|
if (entry === undefined)
|
|
346
|
-
return (resolveFileCandidates(input, indexCandidates(directory)) ??
|
|
347
|
-
notFoundCandidate());
|
|
905
|
+
return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
|
|
348
906
|
if (typeof entry !== "string" || entry.length === 0)
|
|
349
907
|
return unresolvedCandidate("unavailable", [
|
|
350
908
|
`Directory package metadata ${metadata.path} is not valid package JSON.`,
|
|
@@ -354,43 +912,133 @@ const resolveDirectory = (input, directory, metadata, packageChain) => {
|
|
|
354
912
|
sourcePath: metadata.path,
|
|
355
913
|
context: "package-entrypoint",
|
|
356
914
|
files: input.files,
|
|
915
|
+
...(input.directoryPaths === undefined
|
|
916
|
+
? {}
|
|
917
|
+
: { directoryPaths: input.directoryPaths }),
|
|
918
|
+
...(input.unanalyzedFiles === undefined
|
|
919
|
+
? {}
|
|
920
|
+
: { unanalyzedFiles: input.unanalyzedFiles }),
|
|
357
921
|
...(input.moduleKind === undefined ? {} : { moduleKind: input.moduleKind }),
|
|
358
922
|
};
|
|
359
|
-
const rejected = rejectDeclaration(entryInput.declaredPath);
|
|
360
|
-
if (rejected !== null)
|
|
361
|
-
return rejected;
|
|
362
923
|
const candidate = contextualCandidate(entryInput);
|
|
363
924
|
if (typeof candidate !== "string")
|
|
364
925
|
return candidate;
|
|
365
926
|
const confined = confineCandidate(candidate);
|
|
366
927
|
if (typeof confined !== "string")
|
|
367
928
|
return confined;
|
|
929
|
+
if (input.moduleKind !== undefined)
|
|
930
|
+
return resolveNodePackageMain(entryInput, directory, confined);
|
|
368
931
|
const selected = resolveFileCandidates(entryInput, [
|
|
369
|
-
...fileCandidates(confined),
|
|
370
|
-
...indexCandidates(confined),
|
|
371
|
-
]) ??
|
|
932
|
+
...fileCandidates(confined, entryInput.moduleKind),
|
|
933
|
+
...indexCandidates(confined, entryInput.moduleKind),
|
|
934
|
+
]) ??
|
|
935
|
+
resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
|
|
372
936
|
if (selected !== null)
|
|
373
937
|
return selected;
|
|
374
938
|
return resolveCandidate(entryInput, confined, new Set([...packageChain, metadata.path]));
|
|
375
939
|
};
|
|
940
|
+
const resolveNodePackageMain = (input, directory, mainPath) => {
|
|
941
|
+
const normalizedMain = mainPath.replace(/\/$/u, "");
|
|
942
|
+
for (const suffix of NODE_PACKAGE_MAIN_SUFFIXES) {
|
|
943
|
+
const isDirectoryIndex = suffix.startsWith("/");
|
|
944
|
+
if (normalizedMain === "" && !isDirectoryIndex)
|
|
945
|
+
continue;
|
|
946
|
+
const selected = resolveFileCandidates(input, [
|
|
947
|
+
isDirectoryIndex
|
|
948
|
+
? posix.join(normalizedMain, suffix.slice(1))
|
|
949
|
+
: posix.normalize(`${normalizedMain}${suffix}`),
|
|
950
|
+
]);
|
|
951
|
+
if (selected === null)
|
|
952
|
+
continue;
|
|
953
|
+
if (input.moduleKind === "require")
|
|
954
|
+
return selected;
|
|
955
|
+
// ESM probes the normalized main, then appends the selected suffix to
|
|
956
|
+
// the original declaration before finalizing the resulting file path.
|
|
957
|
+
const finalized = confineCandidate(relativeCandidate(input.sourcePath, `${input.declaredPath}${suffix}`));
|
|
958
|
+
if (typeof finalized !== "string")
|
|
959
|
+
return finalized;
|
|
960
|
+
const finalizedFile = resolveFileCandidates(input, [
|
|
961
|
+
finalized.replace(/\/$/u, ""),
|
|
962
|
+
]);
|
|
963
|
+
if (finalizedFile !== null)
|
|
964
|
+
return finalizedFile;
|
|
965
|
+
const source = input.files.get(input.sourcePath);
|
|
966
|
+
if (hasContainerDirectory(input.files, finalized, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
|
|
967
|
+
return {
|
|
968
|
+
...unresolvedCandidate("rejected", [
|
|
969
|
+
`The selected legacy ESM package main finalizes to directory ${finalized}; directory imports are unsupported and no later main or index candidate was tried.`,
|
|
970
|
+
]),
|
|
971
|
+
candidatePath: finalized,
|
|
972
|
+
};
|
|
973
|
+
return unresolvedCandidate("not-found", [
|
|
974
|
+
`The selected legacy ESM package main finalizes to ${finalized}, which is not an inventoried file; no later main or index candidate was tried.`,
|
|
975
|
+
]);
|
|
976
|
+
}
|
|
977
|
+
const fallback = resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
|
|
978
|
+
if (fallback !== null)
|
|
979
|
+
return fallback;
|
|
980
|
+
return input.moduleKind === "require"
|
|
981
|
+
? { ...notFoundCandidate(), stopsAncestorLookup: true }
|
|
982
|
+
: notFoundCandidate();
|
|
983
|
+
};
|
|
376
984
|
const resolveFileCandidates = (input, candidates) => {
|
|
377
|
-
const source = input.files.get(input.sourcePath);
|
|
378
985
|
for (const path of candidates) {
|
|
379
|
-
const
|
|
380
|
-
if (
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
986
|
+
const selected = findFileCandidate(input, path);
|
|
987
|
+
if (selected === null)
|
|
988
|
+
continue;
|
|
989
|
+
return selected.status === "resolved" &&
|
|
990
|
+
isRuntimeDeclarationPath(input, path)
|
|
991
|
+
? {
|
|
992
|
+
resolvedPath: null,
|
|
993
|
+
status: "unavailable",
|
|
994
|
+
candidatePath: path,
|
|
995
|
+
limitations: [
|
|
996
|
+
`The TypeScript declaration ${path} is compile-time evidence and cannot identify a runtime module implementation.`,
|
|
997
|
+
],
|
|
998
|
+
}
|
|
999
|
+
: selected;
|
|
384
1000
|
}
|
|
385
1001
|
return null;
|
|
386
1002
|
};
|
|
387
|
-
|
|
1003
|
+
/** Own candidate presence and container identity independently of loader policy. */
|
|
1004
|
+
const findFileCandidate = (input, path) => {
|
|
1005
|
+
const source = input.files.get(input.sourcePath);
|
|
1006
|
+
const target = input.files.get(path);
|
|
1007
|
+
if (target !== undefined &&
|
|
1008
|
+
(source === undefined ||
|
|
1009
|
+
target.container_sha256 === source.container_sha256))
|
|
1010
|
+
return { resolvedPath: path, status: "resolved", limitations: [] };
|
|
1011
|
+
const unanalyzed = input.unanalyzedFiles?.get(path);
|
|
1012
|
+
if (unanalyzed !== undefined &&
|
|
1013
|
+
(source === undefined ||
|
|
1014
|
+
unanalyzed.container_sha256 === source.container_sha256))
|
|
1015
|
+
return {
|
|
1016
|
+
resolvedPath: null,
|
|
1017
|
+
status: "unavailable",
|
|
1018
|
+
candidatePath: path,
|
|
1019
|
+
limitations: [
|
|
1020
|
+
...(unanalyzed.limitations ?? []),
|
|
1021
|
+
unanalyzed.kind === undefined
|
|
1022
|
+
? `${path} exists in the inventoried artifact container (sha256 ${unanalyzed.sha256 ?? "unknown"}, ${unanalyzed.bytes === null ? "unknown size" : `${String(unanalyzed.bytes)} bytes`}) but is not a JavaScript, JSON, HTML, source map, or native add-on file; its contents were not analyzed.`
|
|
1023
|
+
: `${path} is an inventoried ${unanalyzed.kind} file, but its bytes are unavailable (hash status ${unanalyzed.hash_status ?? "unknown"}); resolution cannot be confirmed.`,
|
|
1024
|
+
],
|
|
1025
|
+
};
|
|
1026
|
+
return null;
|
|
1027
|
+
};
|
|
1028
|
+
const isRuntimeDeclarationPath = (input, path) => input.moduleKind !== undefined && /\.d\.(?:ts|mts|cts)$/iu.test(path);
|
|
1029
|
+
const NODE_MODULE_EXTENSIONS = [".js", ".json", ".node"];
|
|
1030
|
+
const NODE_PACKAGE_MAIN_SUFFIXES = [
|
|
1031
|
+
"",
|
|
1032
|
+
...NODE_MODULE_EXTENSIONS,
|
|
1033
|
+
...NODE_MODULE_EXTENSIONS.map((extension) => `/index${extension}`),
|
|
1034
|
+
];
|
|
1035
|
+
const fileCandidates = (candidate, moduleKind) => [
|
|
388
1036
|
candidate,
|
|
389
|
-
...EXTENSIONS.map((extension) => `${candidate}${extension}`),
|
|
1037
|
+
...(moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => `${candidate}${extension}`),
|
|
390
1038
|
];
|
|
391
|
-
const indexCandidates = (candidate) => EXTENSIONS.map((extension) => posix.join(candidate, `index${extension}`));
|
|
1039
|
+
const indexCandidates = (candidate, moduleKind) => (moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => posix.join(candidate, `index${extension}`));
|
|
392
1040
|
/** Only exact non-directory keys participate; wildcard expansion is unsupported. */
|
|
393
|
-
const selectPackageExport = (value, subpath, moduleKind) => {
|
|
1041
|
+
const selectPackageExport = (value, subpath, moduleKind, packagePath) => {
|
|
394
1042
|
let target = value;
|
|
395
1043
|
let declared = [];
|
|
396
1044
|
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
@@ -414,23 +1062,35 @@ const selectPackageExport = (value, subpath, moduleKind) => {
|
|
|
414
1062
|
}
|
|
415
1063
|
else if (subpath !== ".")
|
|
416
1064
|
return { status: "unmatched", declared };
|
|
417
|
-
const selected = selectExportTarget(target, packageExportConditions(moduleKind));
|
|
1065
|
+
const selected = selectExportTarget(target, packageExportConditions(moduleKind), packagePath);
|
|
418
1066
|
if (selected.kind === "invalid" || selected.kind === "invalid-config")
|
|
419
1067
|
return { status: "rejected", limitation: selected.limitation };
|
|
420
1068
|
if (selected.kind === "unmatched")
|
|
421
1069
|
return {
|
|
422
1070
|
status: "unmatched",
|
|
423
|
-
declared:
|
|
424
|
-
|
|
425
|
-
|
|
1071
|
+
declared: selected.declared,
|
|
1072
|
+
};
|
|
1073
|
+
if (selected.kind === "blocked")
|
|
1074
|
+
return { status: "blocked", cause: selected.cause };
|
|
1075
|
+
if (selected.kind === "non-relative")
|
|
1076
|
+
return {
|
|
1077
|
+
status: "rejected",
|
|
1078
|
+
limitation: `The package exports target ${JSON.stringify(selected.value)} must start with "./".`,
|
|
426
1079
|
};
|
|
427
|
-
return
|
|
428
|
-
|
|
429
|
-
|
|
1080
|
+
return {
|
|
1081
|
+
status: "value",
|
|
1082
|
+
value: selected.value,
|
|
1083
|
+
url: selected.url,
|
|
1084
|
+
...(selected.lookupLimitation === undefined
|
|
1085
|
+
? {}
|
|
1086
|
+
: {
|
|
1087
|
+
lookupLimitation: selected.lookupLimitation,
|
|
1088
|
+
}),
|
|
1089
|
+
};
|
|
430
1090
|
};
|
|
431
|
-
const invalidExportTarget = (value, reason) => ({
|
|
1091
|
+
const invalidExportTarget = (value, reason, mapKind = "exports") => ({
|
|
432
1092
|
kind: "invalid",
|
|
433
|
-
limitation: `The package exports target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
|
|
1093
|
+
limitation: `The package ${mapKind === "imports" ? "import" : "exports"} target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
|
|
434
1094
|
});
|
|
435
1095
|
// Node checks raw target segments before URL normalization. Compare encoded
|
|
436
1096
|
// segment names here; full URL decoding follows array target selection.
|
|
@@ -443,46 +1103,79 @@ const forbiddenExportSegment = (value) => value
|
|
|
443
1103
|
segment === ".." ||
|
|
444
1104
|
segment.toLowerCase() === "node_modules");
|
|
445
1105
|
});
|
|
1106
|
+
const selectStringPackageTarget = (value, packagePath, mapKind) => {
|
|
1107
|
+
if (mapKind === "imports") {
|
|
1108
|
+
const target = classifyPackageImportTargetString(value);
|
|
1109
|
+
if (target.kind === "invalid")
|
|
1110
|
+
return invalidExportTarget(value, "cannot be parent-relative, absolute, or a URL", mapKind);
|
|
1111
|
+
if (target.kind !== "relative")
|
|
1112
|
+
return { kind: "non-relative", value };
|
|
1113
|
+
}
|
|
1114
|
+
else if (!value.startsWith("./"))
|
|
1115
|
+
return invalidExportTarget(value, 'must start with "./"', mapKind);
|
|
1116
|
+
const forbidden = forbiddenExportSegment(value);
|
|
1117
|
+
if (forbidden !== undefined)
|
|
1118
|
+
return invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`, mapKind);
|
|
1119
|
+
const metadataUrl = packageMetadataUrl(packagePath, value);
|
|
1120
|
+
const packageUrl = metadataUrl.ok
|
|
1121
|
+
? metadataUrl.value
|
|
1122
|
+
: metadataUrl.error.structuralUrl;
|
|
1123
|
+
// Node constructs the URL before deciding whether this array entry is an
|
|
1124
|
+
// invalid package target. Tabs/newlines and dot segments normalize here;
|
|
1125
|
+
// percent decoding and existence checks belong after target selection.
|
|
1126
|
+
const url = new URL(value, packageUrl);
|
|
1127
|
+
if (!url.pathname.startsWith(new URL(".", packageUrl).pathname))
|
|
1128
|
+
return invalidExportTarget(value, "escapes the package root after URL normalization", mapKind);
|
|
1129
|
+
return {
|
|
1130
|
+
kind: "value",
|
|
1131
|
+
value,
|
|
1132
|
+
url,
|
|
1133
|
+
...(metadataUrl.ok
|
|
1134
|
+
? {}
|
|
1135
|
+
: {
|
|
1136
|
+
lookupLimitation: metadataUrl.error.limitation,
|
|
1137
|
+
}),
|
|
1138
|
+
};
|
|
1139
|
+
};
|
|
1140
|
+
const selectArrayPackageTarget = (value, conditions, packagePath, mapKind) => {
|
|
1141
|
+
if (value.length === 0)
|
|
1142
|
+
return { kind: "blocked", cause: "empty-array" };
|
|
1143
|
+
let lastRefusal;
|
|
1144
|
+
const declared = new Set();
|
|
1145
|
+
for (const entry of value) {
|
|
1146
|
+
const nested = selectExportTarget(entry, conditions, packagePath, mapKind);
|
|
1147
|
+
// Node's array fallback catches invalid targets, not invalid configuration.
|
|
1148
|
+
if (nested.kind === "invalid-config")
|
|
1149
|
+
return nested;
|
|
1150
|
+
if (nested.kind === "unmatched") {
|
|
1151
|
+
for (const condition of nested.declared)
|
|
1152
|
+
declared.add(condition);
|
|
1153
|
+
continue;
|
|
1154
|
+
}
|
|
1155
|
+
if (nested.kind === "invalid" || nested.kind === "blocked") {
|
|
1156
|
+
lastRefusal = nested;
|
|
1157
|
+
continue;
|
|
1158
|
+
}
|
|
1159
|
+
return nested;
|
|
1160
|
+
}
|
|
1161
|
+
return lastRefusal ?? { kind: "unmatched", declared: [...declared] };
|
|
1162
|
+
};
|
|
446
1163
|
/**
|
|
447
1164
|
* Resolve a target in Node's declared order. Explicit null blocks an active
|
|
448
1165
|
* condition, whereas an unmatched nested object permits the next condition.
|
|
449
1166
|
* An array skips unmatched and invalid entries, stops at its first string, and
|
|
450
|
-
* preserves the
|
|
1167
|
+
* preserves the last invalid/null outcome if no string is selected. A nonempty
|
|
1168
|
+
* array of unmatched conditions stays unmatched; an empty array blocks.
|
|
451
1169
|
*/
|
|
452
|
-
const selectExportTarget = (value, conditions) => {
|
|
453
|
-
if (typeof value === "string")
|
|
454
|
-
|
|
455
|
-
return invalidExportTarget(value, 'must start with "./"');
|
|
456
|
-
const forbidden = forbiddenExportSegment(value);
|
|
457
|
-
return forbidden === undefined
|
|
458
|
-
? { kind: "value", value }
|
|
459
|
-
: invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`);
|
|
460
|
-
}
|
|
1170
|
+
const selectExportTarget = (value, conditions, packagePath, mapKind = "exports") => {
|
|
1171
|
+
if (typeof value === "string")
|
|
1172
|
+
return selectStringPackageTarget(value, packagePath, mapKind);
|
|
461
1173
|
if (value === null)
|
|
462
|
-
return { kind: "blocked" };
|
|
463
|
-
if (Array.isArray(value))
|
|
464
|
-
|
|
465
|
-
for (const entry of value) {
|
|
466
|
-
const nested = selectExportTarget(entry, conditions);
|
|
467
|
-
// Node's array fallback catches invalid targets, not invalid configuration.
|
|
468
|
-
if (nested.kind === "invalid-config")
|
|
469
|
-
return nested;
|
|
470
|
-
if (nested.kind === "invalid") {
|
|
471
|
-
invalid = nested.limitation;
|
|
472
|
-
continue;
|
|
473
|
-
}
|
|
474
|
-
if (nested.kind === "unmatched")
|
|
475
|
-
continue;
|
|
476
|
-
invalid = null;
|
|
477
|
-
if (nested.kind === "value")
|
|
478
|
-
return nested;
|
|
479
|
-
}
|
|
480
|
-
return invalid === null
|
|
481
|
-
? { kind: "blocked" }
|
|
482
|
-
: { kind: "invalid", limitation: invalid };
|
|
483
|
-
}
|
|
1174
|
+
return { kind: "blocked", cause: "null" };
|
|
1175
|
+
if (Array.isArray(value))
|
|
1176
|
+
return selectArrayPackageTarget(value, conditions, packagePath, mapKind);
|
|
484
1177
|
if (typeof value !== "object")
|
|
485
|
-
return invalidExportTarget(value, "must be a relative string, object, array, or null");
|
|
1178
|
+
return invalidExportTarget(value, "must be a relative string, object, array, or null", mapKind);
|
|
486
1179
|
for (const key of Object.keys(value)) {
|
|
487
1180
|
const numeric = Number(key);
|
|
488
1181
|
if (String(numeric) === key && numeric >= 0 && numeric < 0xffff_ffff)
|
|
@@ -491,14 +1184,18 @@ const selectExportTarget = (value, conditions) => {
|
|
|
491
1184
|
limitation: `The package exports configuration contains numeric condition key ${JSON.stringify(key)}.`,
|
|
492
1185
|
};
|
|
493
1186
|
}
|
|
1187
|
+
const declared = new Set();
|
|
494
1188
|
for (const [condition, target] of Object.entries(value)) {
|
|
1189
|
+
declared.add(condition);
|
|
495
1190
|
if (!conditions.has(condition))
|
|
496
1191
|
continue;
|
|
497
|
-
const nested = selectExportTarget(target, conditions);
|
|
1192
|
+
const nested = selectExportTarget(target, conditions, packagePath, mapKind);
|
|
498
1193
|
if (nested.kind !== "unmatched")
|
|
499
1194
|
return nested;
|
|
1195
|
+
for (const name of nested.declared)
|
|
1196
|
+
declared.add(name);
|
|
500
1197
|
}
|
|
501
|
-
return { kind: "unmatched" };
|
|
1198
|
+
return { kind: "unmatched", declared: [...declared] };
|
|
502
1199
|
};
|
|
503
1200
|
/**
|
|
504
1201
|
* Node selects an exports target by walking the declared keys in order and
|
|
@@ -521,21 +1218,35 @@ const notFoundCandidate = () => ({
|
|
|
521
1218
|
"No extension, directory package, or index candidate exists in the inventoried artifact container.",
|
|
522
1219
|
],
|
|
523
1220
|
});
|
|
524
|
-
const
|
|
1221
|
+
const exactPackageTargetNotFound = (path, targetKind) => ({
|
|
525
1222
|
resolvedPath: null,
|
|
526
1223
|
status: "not-found",
|
|
527
1224
|
limitations: [
|
|
528
|
-
`The selected package
|
|
1225
|
+
`The selected package ${targetKind === "imports" ? "import" : targetKind} target ${path} does not exist in the inventoried artifact container; ${targetKind === "imports" ? "import" : targetKind} targets are exact files, so no extension or directory index was tried.`,
|
|
529
1226
|
],
|
|
530
1227
|
});
|
|
531
1228
|
const fileUrlPath = (value) => {
|
|
532
|
-
if (
|
|
1229
|
+
if (!/^file:\/\//iu.test(value))
|
|
533
1230
|
return undefined;
|
|
1231
|
+
// URL parsing removes tabs and newlines and normalizes encoded dot segments.
|
|
1232
|
+
// Check the raw path first, excluding URL identity suffixes, then check the
|
|
1233
|
+
// parsed pathname so parser normalization cannot introduce a separator.
|
|
1234
|
+
const rawPath = stripQueryAndFragment(value);
|
|
1235
|
+
if (value.includes("\0") ||
|
|
1236
|
+
value.includes("\\") ||
|
|
1237
|
+
/[\t\n\r]/u.test(rawPath) ||
|
|
1238
|
+
!admitsCanonicalPathSyntax(rawPath))
|
|
1239
|
+
return null;
|
|
534
1240
|
try {
|
|
535
1241
|
const url = new URL(value);
|
|
536
1242
|
if (url.protocol !== "file:" || url.hostname !== "")
|
|
537
1243
|
return undefined;
|
|
538
|
-
|
|
1244
|
+
if (!admitsCanonicalPathSyntax(url.pathname))
|
|
1245
|
+
return null;
|
|
1246
|
+
const decoded = decodeURIComponent(url.pathname);
|
|
1247
|
+
if (decoded.includes("\0"))
|
|
1248
|
+
return null;
|
|
1249
|
+
return decoded.replace(/^\/+/, "");
|
|
539
1250
|
}
|
|
540
1251
|
catch (cause) {
|
|
541
1252
|
// Unparseable file URLs have no path to resolve.
|