diff --git a/src/domain/javascriptRuntimeReconciliationGraph.ts b/src/domain/javascriptRuntimeReconciliationGraph.ts index d99fd0a2a2..6a16a88aba 100644 --- a/src/domain/javascriptRuntimeReconciliationGraph.ts +++ b/src/domain/javascriptRuntimeReconciliationGraph.ts @@ -47,11 +47,8 @@ export const buildReconciledApplicationGraph = ( ...input.runtime.edges, ...input.reconciliationEdges, ]); - const bounded = boundGraphContent(input, merged.nodes, allEdges); - const facts = graphCoverageFacts( - input, - merged.omittedObservations + bounded.omittedItems, - ); + const bounded = boundGraphContent(input, merged, allEdges); + const facts = graphCoverageFacts(input, bounded.omittedItems); const graph = createJavaScriptApplicationGraph({ schema: "JavaScriptApplicationGraph", root_node_ids: bounded.rootNodeIds, @@ -77,7 +74,7 @@ export const buildReconciledApplicationGraph = ( }); return { graph, - omittedGraphItems: merged.omittedObservations + bounded.omittedItems, + omittedGraphItems: bounded.omittedItems, }; }; @@ -92,32 +89,23 @@ const boundGraphContent = ( readonly omittedItems: number; } => { const allRoots = preferredRootIds(input); - const rootNodeIds = allRoots.slice(0, 1_000); - const roots = new Set(rootNodeIds); + const rootNodeIds = allRoots; const sortedNodes = [...nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id), ); - const retainedNodes = [ - ...sortedNodes.filter(({ node_id: id }) => roots.has(id)), - ...sortedNodes.filter(({ node_id: id }) => !roots.has(id)), - ].slice(0, 100_000); + const retainedNodes = sortedNodes; const retainedIds = new Set(retainedNodes.map(({ node_id: id }) => id)); const retainedEdges = [...edges] .sort((left, right) => compareCodePoints(left.edge_id, right.edge_id)) .filter( ({ source_node_id: source, target_node_id: target }) => retainedIds.has(source) && retainedIds.has(target), - ) - .slice(0, 200_000); + ); return { rootNodeIds, nodes: retainedNodes, edges: retainedEdges, - omittedItems: - allRoots.length - - rootNodeIds.length + - (nodes.length - retainedNodes.length) + - (edges.length - retainedEdges.length), + omittedItems: 0, }; }; @@ -219,16 +207,10 @@ const graphCoverage = ( limits: [], }; -const mergeNodes = ( - nodes: readonly ApplicationNode[], -): { - readonly nodes: ApplicationNode[]; - readonly omittedObservations: number; -} => { +const mergeNodes = (nodes: readonly ApplicationNode[]): ApplicationNode[] => { const grouped = new Map(); for (const node of nodes) grouped.set(node.node_id, [...(grouped.get(node.node_id) ?? []), node]); - let omittedObservations = 0; const merged = [...grouped.values()].map((group) => { const first = group[0]; if (first === undefined) throw new TypeError("Empty JAG node group"); @@ -249,19 +231,16 @@ const mergeNodes = ( ].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id), ); - omittedObservations += Math.max(0, observations.length - 64); return createJavaScriptApplicationNode({ kind: first.kind, identity: first.identity, - observations: observations - .slice(0, 64) - .map( - ({ observation_id: _id, identifier_strategy: _strategy, ...value }) => - value, - ), + observations: observations.map( + ({ observation_id: _id, identifier_strategy: _strategy, ...value }) => + value, + ), }); }); - return { nodes: merged, omittedObservations }; + return merged; }; const uniqueEdges = (edges: readonly ApplicationEdge[]): ApplicationEdge[] => [ diff --git a/src/domain/javascriptRuntimeReconciliationResult.ts b/src/domain/javascriptRuntimeReconciliationResult.ts index 6a6bf5f240..bb62ede7f3 100644 --- a/src/domain/javascriptRuntimeReconciliationResult.ts +++ b/src/domain/javascriptRuntimeReconciliationResult.ts @@ -86,10 +86,10 @@ const captureSummaries = ( kind: capture.kind, target_node_id: targetNode.node_id, target_key: capture.inspection.target.target_id, - target_location: ("url" in capture.inspection.target - ? capture.inspection.target.url - : capture.inspection.target.file_path - ).slice(0, 4_096), + target_location: + "url" in capture.inspection.target + ? capture.inspection.target.url + : capture.inspection.target.file_path, frames: capture.inspection.frames.length, scripts: capture.inspection.scripts.items.length, workers: capture.inspection.workers.length, diff --git a/src/domain/javascriptRuntimeReconciliationSchemas.ts b/src/domain/javascriptRuntimeReconciliationSchemas.ts index 885548ffda..2f589da6fe 100644 --- a/src/domain/javascriptRuntimeReconciliationSchemas.ts +++ b/src/domain/javascriptRuntimeReconciliationSchemas.ts @@ -173,7 +173,7 @@ const captureSummarySchema = z.strictObject({ kind: z.enum(["browser", "electron", "v8-inspector", "electron-active"]), target_node_id: nodeIdSchema, target_key: boundedTextSchema, - target_location: boundedTextSchema, + target_location: z.string().min(1).max(131_072), frames: z.number().int().min(0), scripts: z.number().int().min(0), workers: z.number().int().min(0),