Procházet zdrojové kódy

refactor(session-query): simplify tracing helpers

Hypatia May před 2 měsíci
rodič
revize
c5ac667e86

+ 4 - 4
packages/session-query/session-query/src/index.ts

@@ -22,7 +22,7 @@ import {
   type Config,
 } from './config.ts'
 import { SessionCorpus } from './corpus.ts'
-import { eventRecords, traceEventLog, traceLineage } from './tracing.ts'
+import * as tracing from './tracing.ts'
 
 export type * from './types.ts'
 export type { Config, SessionQueryErrorCode } from './config.ts'
@@ -71,7 +71,7 @@ export class SessionQueryService extends Service {
    */
   async listEvents(sessionId: SessionId): Promise<SessionEventRecord[]> {
     const loaded = await this._corpus.load(sessionId)
-    return eventRecords(sessionId, loaded.events)
+    return tracing.eventRecords(sessionId, loaded.events)
   }
 
   /**
@@ -82,7 +82,7 @@ export class SessionQueryService extends Service {
    */
   async traceSession(sessionId: SessionId): Promise<SessionLineageTrace> {
     const records = await this._corpus.listSessions()
-    return traceLineage(records, sessionId)
+    return tracing.traceSession(records, sessionId)
   }
 
   /**
@@ -93,7 +93,7 @@ export class SessionQueryService extends Service {
    */
   async traceEvent(request: SessionEventTraceRequest): Promise<SessionEventTrace> {
     const loaded = await this._corpus.load(request.sessionId)
-    return traceEventLog(request.sessionId, loaded.events, request.seq)
+    return tracing.traceEvent(request.sessionId, loaded.events, request.seq)
   }
 
   /**

+ 8 - 11
packages/session-query/session-query/src/tracing.ts

@@ -37,7 +37,7 @@ export function eventRecords(
  * @param seq - target event seq.
  * @returns direct surface and provenance relationships.
  */
-export function traceEventLog(
+export function traceEvent(
   sessionId: SessionId,
   events: readonly SessionEvent[],
   seq: number,
@@ -59,7 +59,6 @@ export function traceEventLog(
     replacement = analysis.replacedBy.get(replacement)
   }
 
-  const sourceEventSeqs = eventSources(target)
   const derivedEventSeqs: number[] = []
   for (const event of events) {
     if (event.seq <= seq) continue
@@ -71,11 +70,11 @@ export function traceEventLog(
   const targetRecord = analysis.records[seq]!
   const replacedBy = analysis.replacedBy.get(seq)
   return {
-    target: { ...targetRecord },
+    target: targetRecord,
     ...replacedBy === undefined ? {} : { replacedBy },
     replacementChain,
-    replacedEventSeqs: [...(analysis.replacedEventSeqs.get(seq) ?? [])],
-    sourceEventSeqs: [...sourceEventSeqs],
+    replacedEventSeqs: analysis.replacedEventSeqs.get(seq) ?? [],
+    sourceEventSeqs: [...eventSources(target)],
     derivedEventSeqs,
   }
 }
@@ -86,7 +85,7 @@ export function traceEventLog(
  * @param sessionId - target session id.
  * @returns complete or explicitly partial lineage.
  */
-export function traceLineage(
+export function traceSession(
   records: readonly SessionRecord[],
   sessionId: SessionId,
 ): SessionLineageTrace {
@@ -164,14 +163,12 @@ function analyzeEventLog(
     )
   }
   const current = new Set(folded.nodes.map(node => node.seq))
-  const shadowed = new Set<number>()
   const replacedBy = new Map<number, number>()
   const replacedEventSeqs = new Map<number, number[]>()
   for (const replacement of folded.replacements) {
-    const removed = [...replacement.shadowedSeqs]
+    const removed = replacement.shadowedSeqs
     replacedEventSeqs.set(replacement.seq, removed)
     for (const removedSeq of removed) {
-      shadowed.add(removedSeq)
       replacedBy.set(removedSeq, replacement.seq)
     }
   }
@@ -183,14 +180,14 @@ function analyzeEventLog(
       time: event.time,
       surface: current.has(event.seq)
         ? 'current'
-        : shadowed.has(event.seq) ? 'shadowed' : 'log-only',
+        : replacedBy.has(event.seq) ? 'shadowed' : 'log-only',
     })),
     replacedBy,
     replacedEventSeqs,
   }
 }
 
-function eventSources(event: SessionEvent): number[] {
+function eventSources(event: SessionEvent): readonly number[] {
   return (event as SessionEvent<SurfaceEventType>).sourceEventSeqs ?? []
 }