@spotpatch/runtime 1.14.0 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-2WA6XVA4.js → chunk-DCN6OMLH.js} +13 -3
- package/dist/{chunk-2WA6XVA4.js.map → chunk-DCN6OMLH.js.map} +1 -1
- package/dist/{chunk-KIDHJQRG.js → chunk-PXJKFEUJ.js} +1 -1
- package/dist/chunk-PXJKFEUJ.js.map +1 -0
- package/dist/contextual-ask-panel.cjs +217 -127
- package/dist/contextual-ask-panel.cjs.map +1 -1
- package/dist/contextual-ask-panel.d.cts +2 -0
- package/dist/contextual-ask-panel.d.ts +2 -0
- package/dist/contextual-ask-panel.js +219 -128
- package/dist/contextual-ask-panel.js.map +1 -1
- package/dist/data-flow-panel.cjs +12 -2
- package/dist/data-flow-panel.cjs.map +1 -1
- package/dist/data-flow-panel.d.cts +1 -1
- package/dist/data-flow-panel.d.ts +1 -1
- package/dist/data-flow-panel.js +7 -1
- package/dist/data-flow-panel.js.map +1 -1
- package/dist/{data-flow-runtime-DMmV0d3E.d.cts → data-flow-runtime-CacBbxN0.d.cts} +2 -1
- package/dist/{data-flow-runtime-DMmV0d3E.d.ts → data-flow-runtime-CacBbxN0.d.ts} +2 -1
- package/dist/data-flow.cjs +13 -2
- package/dist/data-flow.cjs.map +1 -1
- package/dist/data-flow.d.cts +1 -1
- package/dist/data-flow.d.ts +1 -1
- package/dist/data-flow.js +3 -1
- package/dist/external-handoff-panel.cjs +22 -6
- package/dist/external-handoff-panel.cjs.map +1 -1
- package/dist/external-handoff-panel.d.cts +5 -2
- package/dist/external-handoff-panel.d.ts +5 -2
- package/dist/external-handoff-panel.js +21 -6
- package/dist/external-handoff-panel.js.map +1 -1
- package/dist/index.cjs +15 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +11 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-KIDHJQRG.js.map +0 -1
package/dist/data-flow.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-flow-entry.ts","../src/data-flow/data-flow-runtime.ts","../src/data-flow/report-merger.ts"],"sourcesContent":["export {\n createDataFlowRuntime,\n getDataFlowRuntime,\n installDataFlowPrelude,\n type DataFlowComponentRegistration,\n type DataFlowInvocationToken,\n type DataFlowObservationPolicy,\n type DataFlowRequestFrame,\n type DataFlowRequestMetadata,\n type DataFlowRuntime,\n type DataFlowTriggerMetadata,\n type DataFlowTrpcLink,\n type DataFlowTrpcLinkOptions,\n type DataFlowTrpcOperation,\n} from \"./data-flow/data-flow-runtime.js\";\nexport {\n mergeComponentDataFlowReport,\n mergePageDataFlowReport,\n} from \"./data-flow/report-merger.js\";\n","import {\n DATA_FLOW_SCHEMA_VERSION,\n DATA_FLOW_URL_QUERY_KEY_LIMIT,\n SPOTPATCH_API_BASE,\n type NetworkObservation,\n type RuntimeDataFlowConfig,\n type RuntimeDataFlowLimits,\n type SanitizedObservedUrl,\n} from \"@spotpatch/shared/data-flow-runtime\";\n\nexport interface DataFlowComponentRegistration {\n readonly componentSourceId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowInvocationToken {\n readonly invocationId: string;\n readonly componentSourceId: string;\n readonly triggerCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRequestFrame {\n readonly requestCallsiteId: string;\n readonly sourceVersion: string;\n readonly invocationToken?: DataFlowInvocationToken;\n}\n\nexport interface DataFlowTriggerMetadata {\n readonly componentSourceId: string;\n readonly triggerCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRequestMetadata {\n readonly requestCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRuntime {\n readonly beginInvocation: (\n metadata: DataFlowTriggerMetadata,\n ) => DataFlowInvocationToken;\n readonly bindInvocation: <Arguments extends readonly unknown[], Result>(\n token: DataFlowInvocationToken | undefined,\n callback: (...args: Arguments) => Result,\n ) => (...args: Arguments) => Result;\n readonly bindTrigger: <Callback>(\n metadata: DataFlowTriggerMetadata,\n callback: Callback,\n ) => Callback;\n readonly captureInvocation: () => DataFlowInvocationToken | undefined;\n readonly clear: () => void;\n readonly createTrpcLink: () => DataFlowTrpcLink;\n readonly dispose: () => void;\n readonly getComponentRegistration: (\n component: object,\n ) => DataFlowComponentRegistration | undefined;\n readonly getCurrentRequestFrame: () => DataFlowRequestFrame | undefined;\n readonly observations: () => readonly NetworkObservation[];\n readonly updateRoute: (routeKey: string) => void;\n readonly registerComponent: (\n component: object,\n componentSourceId: string,\n sourceVersion: string,\n ) => void;\n readonly withInvocation: <Result>(\n token: DataFlowInvocationToken | undefined,\n callback: () => Result,\n ) => Result;\n readonly withRequestFrame: <Result>(\n token: DataFlowInvocationToken | undefined,\n metadata: DataFlowRequestMetadata,\n callback: () => Result,\n ) => Result;\n}\n\nexport interface DataFlowObservationPolicy {\n readonly shouldObserveFetch?: (\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n baseUrl: string,\n ) => boolean;\n readonly shouldObserveXhr?: (url: string, baseUrl: string) => boolean;\n}\n\nexport interface DataFlowTrpcOperation {\n readonly path: unknown;\n readonly type: unknown;\n}\n\nexport interface DataFlowTrpcLinkOptions<\n Operation extends DataFlowTrpcOperation,\n Result,\n> {\n readonly next: (operation: Operation) => Result;\n readonly op: Operation;\n}\n\nexport type DataFlowTrpcLink = (\n runtime: unknown,\n) => <Operation extends DataFlowTrpcOperation, Result>(\n options: DataFlowTrpcLinkOptions<Operation, Result>,\n) => Result;\n\ninterface DataFlowGlobal {\n readonly fetch?: typeof globalThis.fetch;\n readonly location?: Location;\n readonly performance?: Performance;\n readonly XMLHttpRequest?: typeof globalThis.XMLHttpRequest;\n}\n\ninterface MutableDataFlowGlobal extends DataFlowGlobal {\n fetch?: typeof globalThis.fetch;\n}\n\ninterface XhrMetadata {\n readonly method: string;\n readonly url: string;\n}\n\ninterface RingEntry {\n readonly bytes: number;\n readonly observation: NetworkObservation;\n readonly recordedAt: number;\n}\n\nconst RUNTIME_KEY: unique symbol = Symbol.for(\n \"spotpatch.data-flow.runtime.v1\",\n) as never;\nconst REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\nconst REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\n\ntype DataFlowRuntimeStore = Partial<Record<symbol, DataFlowRuntime>>;\ntype GlobalWithDataFlow = MutableDataFlowGlobal & DataFlowRuntimeStore;\n\nfunction positiveNow(target: DataFlowGlobal): number {\n return target.performance?.now() ?? Date.now();\n}\n\nfunction createOpaqueSequence(prefix: string): () => string {\n let sequence = 0;\n const randomPrefix = (() => {\n try {\n const bytes = new Uint8Array(8);\n globalThis.crypto.getRandomValues(bytes);\n return Array.from(bytes, (value) => value.toString(36).padStart(2, \"0\")).join(\"\");\n } catch {\n return \"local\";\n }\n })();\n\n return () => {\n sequence += 1;\n return `${prefix}_${randomPrefix}_${sequence.toString(36)}`;\n };\n}\n\nfunction freezeUrl(value: string, baseUrl: string): SanitizedObservedUrl {\n try {\n const url = new URL(value, baseUrl);\n return Object.freeze({\n origin: url.origin,\n pathname: url.pathname,\n queryKeys: Object.freeze(\n [...new Set(url.searchParams.keys())]\n .sort()\n .slice(0, DATA_FLOW_URL_QUERY_KEY_LIMIT),\n ),\n });\n } catch {\n return Object.freeze({\n pathname: value.split(/[?#]/u, 1)[0] ?? \"{invalid}\",\n queryKeys: Object.freeze([]),\n });\n }\n}\n\nfunction readFetchUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input;\n if (input instanceof URL) return input.toString();\n return input.url;\n}\n\nfunction readFetchMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method !== undefined) return init.method.toUpperCase();\n return typeof Request !== \"undefined\" && input instanceof Request\n ? input.method.toUpperCase()\n : \"GET\";\n}\n\nfunction isSpotPatchInternalUrl(value: string, baseUrl: string): boolean {\n try {\n const pathname = new URL(value, baseUrl).pathname;\n return (\n pathname === SPOTPATCH_API_BASE || pathname.startsWith(`${SPOTPATCH_API_BASE}/`)\n );\n } catch {\n return false;\n }\n}\n\nfunction approximateBytes(value: unknown): number {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength;\n}\n\nfunction createRingStore(\n limits: RuntimeDataFlowLimits,\n target: DataFlowGlobal,\n): Readonly<{\n add: (observation: NetworkObservation) => void;\n clear: () => void;\n values: () => readonly NetworkObservation[];\n}> {\n const entries: RingEntry[] = [];\n let totalBytes = 0;\n\n function removeExpired(now: number): void {\n while (\n entries[0] !== undefined &&\n now - entries[0].recordedAt > limits.observationTtlMs\n ) {\n const removed = entries.shift();\n if (removed !== undefined) totalBytes -= removed.bytes;\n }\n }\n\n return Object.freeze({\n add(observation): void {\n const now = positiveNow(target);\n removeExpired(now);\n const bytes = approximateBytes(observation);\n if (bytes > limits.observationMaxBytes) return;\n entries.push(Object.freeze({ bytes, observation, recordedAt: now }));\n totalBytes += bytes;\n\n while (\n entries.length > limits.observationMaxEntries ||\n totalBytes > limits.observationMaxBytes\n ) {\n const removed = entries.shift();\n if (removed !== undefined) totalBytes -= removed.bytes;\n }\n },\n clear(): void {\n entries.length = 0;\n totalBytes = 0;\n },\n values(): readonly NetworkObservation[] {\n removeExpired(positiveNow(target));\n return Object.freeze(entries.map(({ observation }) => observation));\n },\n });\n}\n\nfunction ownPropertyDescriptor(\n target: object,\n key: PropertyKey,\n): PropertyDescriptor | undefined {\n try {\n return Object.getOwnPropertyDescriptor(target, key);\n } catch {\n return undefined;\n }\n}\n\nfunction nestedReactWrapperComponent(candidate: object): object | undefined {\n const marker: unknown = ownPropertyDescriptor(candidate, \"$$typeof\")?.value;\n const key =\n marker === REACT_MEMO_TYPE\n ? \"type\"\n : marker === REACT_FORWARD_REF_TYPE\n ? \"render\"\n : undefined;\n if (key === undefined) return undefined;\n const nested: unknown = ownPropertyDescriptor(candidate, key)?.value;\n return (typeof nested === \"object\" && nested !== null) || typeof nested === \"function\"\n ? nested\n : undefined;\n}\n\nfunction installWritableDataProperty(\n target: object,\n key: PropertyKey,\n replacement: object,\n original: PropertyDescriptor | undefined = ownPropertyDescriptor(target, key),\n): (() => void) | undefined {\n if (original === undefined || !(\"value\" in original) || !original.writable) {\n return undefined;\n }\n\n try {\n Object.defineProperty(target, key, { ...original, value: replacement });\n } catch {\n return undefined;\n }\n\n return (): void => {\n try {\n if (ownPropertyDescriptor(target, key)?.value === replacement) {\n Object.defineProperty(target, key, original);\n }\n } catch {\n // A host or later wrapper can make the property non-configurable.\n }\n };\n}\n\nfunction recordWithoutAffectingHost(record: () => void): void {\n try {\n record();\n } catch {\n // Observation is optional; the host transport result is authoritative.\n }\n}\n\nexport function createDataFlowRuntime(\n config: RuntimeDataFlowConfig,\n target: MutableDataFlowGlobal = globalThis,\n policy: DataFlowObservationPolicy = {},\n): DataFlowRuntime {\n const componentRegistry = new WeakMap<object, DataFlowComponentRegistration>();\n const xhrMetadata = new WeakMap<object, XhrMetadata>();\n const store = createRingStore(config.limits, target);\n const nextInvocationId = createOpaqueSequence(\"invocation\");\n const nextObservationId = createOpaqueSequence(\"observation\");\n const pageEpoch = createOpaqueSequence(\"page\")();\n const nextRouteEpoch = createOpaqueSequence(\"route\");\n let routeEpoch = nextRouteEpoch();\n let routeKey: string | undefined;\n let currentInvocation: DataFlowInvocationToken | undefined;\n let currentRequestFrame: DataFlowRequestFrame | undefined;\n let disposed = false;\n\n const originalFetch = (() => {\n try {\n return target.fetch;\n } catch {\n return undefined;\n }\n })();\n function spotPatchFetch(\n this: typeof globalThis,\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n if (originalFetch === undefined) {\n throw new TypeError(\"Fetch is unavailable.\");\n }\n const result = Reflect.apply(originalFetch, this, [input, init]);\n recordWithoutAffectingHost(() => {\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n const rawUrl = readFetchUrl(input);\n if (\n isSpotPatchInternalUrl(\n rawUrl,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) ||\n policy.shouldObserveFetch?.(\n input,\n init,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) === false\n ) {\n return;\n }\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"fetch\",\n method: readFetchMethod(input, init),\n url: freezeUrl(rawUrl, target.location?.href ?? \"http://spotpatch.invalid/\"),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n return result;\n }\n\n const restoreFetch =\n originalFetch === undefined\n ? undefined\n : installWritableDataProperty(target, \"fetch\", spotPatchFetch);\n\n const xhrPrototype = (() => {\n try {\n return target.XMLHttpRequest?.prototype;\n } catch {\n return undefined;\n }\n })();\n const originalOpenDescriptor =\n xhrPrototype === undefined\n ? undefined\n : ownPropertyDescriptor(xhrPrototype, \"open\");\n const originalSendDescriptor =\n xhrPrototype === undefined\n ? undefined\n : ownPropertyDescriptor(xhrPrototype, \"send\");\n\n function spotPatchOpen(\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n ...rest: readonly unknown[]\n ): void {\n const original: unknown = originalOpenDescriptor?.value;\n if (typeof original === \"function\") {\n Reflect.apply(original, this, [method, url, ...rest]);\n }\n recordWithoutAffectingHost(() => {\n xhrMetadata.set(this, Object.freeze({ method, url: String(url) }));\n });\n }\n\n function spotPatchSend(\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ): void {\n const original: unknown = originalSendDescriptor?.value;\n if (typeof original === \"function\") Reflect.apply(original, this, [body]);\n recordWithoutAffectingHost(() => {\n const metadata = xhrMetadata.get(this);\n if (\n metadata === undefined ||\n isSpotPatchInternalUrl(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) ||\n policy.shouldObserveXhr?.(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) === false\n ) {\n return;\n }\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"xhr\",\n method: metadata.method.toUpperCase(),\n url: freezeUrl(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n }\n\n const restoreXhrOpen =\n xhrPrototype === undefined || typeof originalOpenDescriptor?.value !== \"function\"\n ? undefined\n : installWritableDataProperty(\n xhrPrototype,\n \"open\",\n spotPatchOpen,\n originalOpenDescriptor,\n );\n const restoreXhrSend =\n xhrPrototype === undefined || typeof originalSendDescriptor?.value !== \"function\"\n ? undefined\n : installWritableDataProperty(\n xhrPrototype,\n \"send\",\n spotPatchSend,\n originalSendDescriptor,\n );\n\n const runtime: DataFlowRuntime = Object.freeze({\n beginInvocation(metadata: DataFlowTriggerMetadata): DataFlowInvocationToken {\n return Object.freeze({\n invocationId: nextInvocationId(),\n componentSourceId: metadata.componentSourceId,\n triggerCallsiteId: metadata.triggerCallsiteId,\n sourceVersion: metadata.sourceVersion,\n });\n },\n bindInvocation<Arguments extends readonly unknown[], Result>(\n token: DataFlowInvocationToken | undefined,\n callback: (...args: Arguments) => Result,\n ): (...args: Arguments) => Result {\n return function boundInvocation(this: unknown, ...args: Arguments): Result {\n return runtime.withInvocation(token, () => Reflect.apply(callback, this, args));\n };\n },\n bindTrigger<Callback>(\n metadata: DataFlowTriggerMetadata,\n callback: Callback,\n ): Callback {\n if (typeof callback !== \"function\") return callback;\n const callable = callback as (...args: readonly unknown[]) => unknown;\n return function boundTrigger(this: unknown, ...args: readonly unknown[]) {\n const token = runtime.beginInvocation(metadata);\n return runtime.withInvocation(token, () => Reflect.apply(callable, this, args));\n } as Callback;\n },\n captureInvocation: () => currentInvocation,\n clear: store.clear,\n createTrpcLink(): DataFlowTrpcLink {\n return () =>\n <Operation extends DataFlowTrpcOperation, Result>(\n options: DataFlowTrpcLinkOptions<Operation, Result>,\n ): Result => {\n recordWithoutAffectingHost(() => {\n const operation = options.op.path;\n const operationType = options.op.type;\n if (\n typeof operation !== \"string\" ||\n operation.length === 0 ||\n operation.length > 512 ||\n (operationType !== \"query\" &&\n operationType !== \"mutation\" &&\n operationType !== \"subscription\")\n ) {\n return;\n }\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"trpc\",\n method: operationType.toUpperCase(),\n operation,\n url: Object.freeze({\n pathname: operation,\n queryKeys: Object.freeze([]),\n }),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n return options.next(options.op);\n };\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n store.clear();\n restoreFetch?.();\n restoreXhrOpen?.();\n restoreXhrSend?.();\n },\n getComponentRegistration: (component: object) => componentRegistry.get(component),\n getCurrentRequestFrame: () => currentRequestFrame,\n observations: () =>\n Object.freeze(\n store\n .values()\n .map((observation) =>\n observation.routeEpoch === routeEpoch\n ? observation\n : Object.freeze({ ...observation, freshness: \"stale-route\" as const }),\n ),\n ),\n registerComponent(\n component: object,\n componentSourceId: string,\n registeredSourceVersion: string,\n ): void {\n const registration = Object.freeze({\n componentSourceId,\n sourceVersion: registeredSourceVersion,\n });\n const pending = [component];\n const registered = new Set<object>();\n while (pending.length > 0) {\n const candidate = pending.pop();\n if (candidate === undefined || registered.has(candidate)) continue;\n registered.add(candidate);\n componentRegistry.set(candidate, registration);\n\n const nested = nestedReactWrapperComponent(candidate);\n if (nested !== undefined) pending.push(nested);\n }\n },\n updateRoute(nextRouteKey: string): void {\n if (routeKey === undefined) {\n routeKey = nextRouteKey;\n } else if (routeKey !== nextRouteKey) {\n routeKey = nextRouteKey;\n routeEpoch = nextRouteEpoch();\n }\n },\n withInvocation<Result>(\n token: DataFlowInvocationToken | undefined,\n callback: () => Result,\n ): Result {\n const parent = currentInvocation;\n currentInvocation = token;\n try {\n return callback();\n } finally {\n currentInvocation = parent;\n }\n },\n withRequestFrame<Result>(\n token: DataFlowInvocationToken | undefined,\n metadata: DataFlowRequestMetadata,\n callback: () => Result,\n ): Result {\n const parent = currentRequestFrame;\n currentRequestFrame = Object.freeze({\n requestCallsiteId: metadata.requestCallsiteId,\n sourceVersion: metadata.sourceVersion,\n ...(token === undefined ? {} : { invocationToken: token }),\n });\n try {\n return callback();\n } finally {\n currentRequestFrame = parent;\n }\n },\n });\n\n return runtime;\n}\n\nexport function installDataFlowPrelude(\n config: RuntimeDataFlowConfig,\n target: GlobalWithDataFlow = globalThis,\n policy: DataFlowObservationPolicy = {},\n): DataFlowRuntime | undefined {\n if (!config.enabled) return undefined;\n const runtime = target[RUNTIME_KEY] ?? createDataFlowRuntime(config, target, policy);\n target[RUNTIME_KEY] = runtime;\n return runtime;\n}\n\nexport function getDataFlowRuntime(\n target: GlobalWithDataFlow = globalThis,\n): DataFlowRuntime | undefined {\n return target[RUNTIME_KEY];\n}\n","import {\n isSensitiveName,\n limitDataFlowReportCollections,\n type ComponentDataFlowReport,\n type DataDependency,\n type EvidenceRef,\n type NetworkObservation,\n type PageDataFlowReport,\n} from \"@spotpatch/shared\";\n\nfunction observationMatchesDependency(\n observation: NetworkObservation,\n dependency: DataDependency,\n): boolean {\n const origin = dependency.origin;\n const transportMatches =\n dependency.kind === \"rpc\"\n ? observation.transport === \"trpc\" &&\n dependency.operation !== undefined &&\n observation.operation === dependency.operation\n : dependency.kind === \"http\"\n ? observation.transport === \"fetch\" || observation.transport === \"xhr\"\n : false;\n if (\n !transportMatches ||\n observation.freshness !== \"current\" ||\n origin === undefined ||\n observation.requestCallsiteId !== origin.requestCallsiteId ||\n observation.sourceVersion !== origin.sourceVersion ||\n (dependency.method !== undefined &&\n observation.method.toUpperCase() !== dependency.method.toUpperCase()) ||\n (dependency.url !== undefined &&\n observation.url.pathname !== dependency.url.pathname) ||\n (dependency.url?.origin !== undefined &&\n observation.url.origin !== dependency.url.origin) ||\n (origin.componentSourceId !== undefined &&\n observation.componentSourceId !== undefined &&\n observation.componentSourceId !== origin.componentSourceId) ||\n (origin.triggerCallsiteId !== undefined &&\n observation.triggerCallsiteId !== undefined &&\n observation.triggerCallsiteId !== origin.triggerCallsiteId)\n ) {\n return false;\n }\n\n return (\n dependency.association !== \"transitive\" ||\n (observation.componentSourceId === origin.componentSourceId &&\n observation.triggerCallsiteId === origin.triggerCallsiteId)\n );\n}\n\nfunction runtimeEvidence(observation: NetworkObservation): EvidenceRef {\n return Object.freeze({\n id: observation.id,\n kind: \"runtime-observation\",\n summaryKey: \"dataFlow.evidence.runtimeDispatch\",\n });\n}\n\nfunction mergeDependencies(\n dependencies: readonly DataDependency[],\n observations: readonly NetworkObservation[],\n): Readonly<{\n dependencies: readonly DataDependency[];\n matchedObservationIds: ReadonlySet<string>;\n}> {\n const matchedObservationIds = new Set<string>();\n const merged = dependencies.map((dependency) => {\n const matches = observations.filter((observation) =>\n observationMatchesDependency(observation, dependency),\n );\n for (const observation of matches) matchedObservationIds.add(observation.id);\n if (matches.length === 0) return dependency;\n const observedOrigins = [\n ...new Set(\n matches.flatMap(({ url }) => (url.origin === undefined ? [] : [url.origin])),\n ),\n ];\n const observedOrigin =\n observedOrigins.length === 1 ? observedOrigins[0] : undefined;\n return Object.freeze({\n ...dependency,\n ...(dependency.url === undefined ||\n dependency.url.origin !== undefined ||\n observedOrigin === undefined\n ? {}\n : {\n url: Object.freeze({\n ...dependency.url,\n origin: observedOrigin,\n }),\n }),\n execution: \"observed\" as const,\n observationIds: Object.freeze([\n ...new Set([...dependency.observationIds, ...matches.map(({ id }) => id)]),\n ]),\n evidenceIds: Object.freeze([\n ...new Set([...dependency.evidenceIds, ...matches.map(({ id }) => id)]),\n ]),\n });\n });\n return Object.freeze({\n dependencies: Object.freeze(merged),\n matchedObservationIds,\n });\n}\n\nfunction appendRuntimeEvidence(\n evidence: readonly EvidenceRef[],\n observations: readonly NetworkObservation[],\n matchedIds: ReadonlySet<string>,\n): readonly EvidenceRef[] {\n const existing = new Set(evidence.map(({ id }) => id));\n return Object.freeze([\n ...evidence,\n ...observations.flatMap((observation) =>\n matchedIds.has(observation.id) && !existing.has(observation.id)\n ? [runtimeEvidence(observation)]\n : [],\n ),\n ]);\n}\n\nexport function mergeComponentDataFlowReport(\n report: ComponentDataFlowReport,\n observations: readonly NetworkObservation[],\n): ComponentDataFlowReport {\n const componentObservations = observations.filter(\n (observation) =>\n observation.componentSourceId === undefined ||\n observation.componentSourceId === report.component.componentSourceId,\n );\n const merged = mergeDependencies(report.dependencies, componentObservations);\n return limitDataFlowReportCollections(\n Object.freeze({\n ...report,\n dependencies: merged.dependencies,\n evidence: appendRuntimeEvidence(\n report.evidence,\n componentObservations,\n merged.matchedObservationIds,\n ),\n }),\n { mode: \"observation\" },\n );\n}\n\nfunction unassignedDependency(observation: NetworkObservation): DataDependency {\n const isRpc = observation.transport === \"trpc\";\n return Object.freeze({\n id: observation.id,\n kind: isRpc ? \"rpc\" : \"http\",\n direction:\n observation.method === \"GET\" ||\n observation.method === \"HEAD\" ||\n observation.method === \"QUERY\" ||\n observation.method === \"SUBSCRIPTION\"\n ? \"read\"\n : \"write\",\n execution: \"observed\",\n proof: \"unavailable\",\n association: \"unassigned\",\n method: observation.method,\n ...(isRpc\n ? observation.operation === undefined\n ? {}\n : { operation: observation.operation }\n : { url: observation.url }),\n parameters: Object.freeze(\n (isRpc ? [] : observation.url.queryKeys).map((path) =>\n Object.freeze({\n path,\n position: \"query\" as const,\n sensitive: isSensitiveName(path),\n valueState: \"not-collected\" as const,\n evidenceIds: Object.freeze([observation.id]),\n }),\n ),\n ),\n response: Object.freeze({\n consumedFields: Object.freeze([]),\n }),\n suppliedBindings: Object.freeze([]),\n locationIds: Object.freeze([]),\n evidenceIds: Object.freeze([observation.id]),\n observationIds: Object.freeze([observation.id]),\n });\n}\n\nexport function mergePageDataFlowReport(\n report: PageDataFlowReport,\n observations: readonly NetworkObservation[],\n): PageDataFlowReport {\n const currentObservations = observations.filter(\n ({ freshness }) => freshness === \"current\",\n );\n const merged = mergeDependencies(report.dependencies, currentObservations);\n const unassigned = currentObservations\n .filter(({ id }) => !merged.matchedObservationIds.has(id))\n .map(unassignedDependency);\n const allObservationIds = new Set(currentObservations.map(({ id }) => id));\n return limitDataFlowReportCollections(\n Object.freeze({\n ...report,\n dependencies: Object.freeze([...merged.dependencies, ...unassigned]),\n evidence: appendRuntimeEvidence(\n report.evidence,\n currentObservations,\n allObservationIds,\n ),\n }),\n { mode: \"observation\" },\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/data-flow-entry.ts","../src/data-flow/data-flow-runtime.ts","../src/data-flow/report-merger.ts"],"sourcesContent":["export {\n createDataFlowRuntime,\n getDataFlowRuntime,\n installDataFlowPrelude,\n disposeDataFlowPrelude,\n type DataFlowComponentRegistration,\n type DataFlowInvocationToken,\n type DataFlowObservationPolicy,\n type DataFlowRequestFrame,\n type DataFlowRequestMetadata,\n type DataFlowRuntime,\n type DataFlowTriggerMetadata,\n type DataFlowTrpcLink,\n type DataFlowTrpcLinkOptions,\n type DataFlowTrpcOperation,\n} from \"./data-flow/data-flow-runtime.js\";\nexport {\n mergeComponentDataFlowReport,\n mergePageDataFlowReport,\n} from \"./data-flow/report-merger.js\";\n","import {\n DATA_FLOW_SCHEMA_VERSION,\n DATA_FLOW_URL_QUERY_KEY_LIMIT,\n SPOTPATCH_API_BASE,\n type NetworkObservation,\n type RuntimeDataFlowConfig,\n type RuntimeDataFlowLimits,\n type SanitizedObservedUrl,\n} from \"@spotpatch/shared/data-flow-runtime\";\n\nexport interface DataFlowComponentRegistration {\n readonly componentSourceId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowInvocationToken {\n readonly invocationId: string;\n readonly componentSourceId: string;\n readonly triggerCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRequestFrame {\n readonly requestCallsiteId: string;\n readonly sourceVersion: string;\n readonly invocationToken?: DataFlowInvocationToken;\n}\n\nexport interface DataFlowTriggerMetadata {\n readonly componentSourceId: string;\n readonly triggerCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRequestMetadata {\n readonly requestCallsiteId: string;\n readonly sourceVersion: string;\n}\n\nexport interface DataFlowRuntime {\n readonly beginInvocation: (\n metadata: DataFlowTriggerMetadata,\n ) => DataFlowInvocationToken;\n readonly bindInvocation: <Arguments extends readonly unknown[], Result>(\n token: DataFlowInvocationToken | undefined,\n callback: (...args: Arguments) => Result,\n ) => (...args: Arguments) => Result;\n readonly bindTrigger: <Callback>(\n metadata: DataFlowTriggerMetadata,\n callback: Callback,\n ) => Callback;\n readonly captureInvocation: () => DataFlowInvocationToken | undefined;\n readonly clear: () => void;\n readonly createTrpcLink: () => DataFlowTrpcLink;\n readonly dispose: () => void;\n readonly getComponentRegistration: (\n component: object,\n ) => DataFlowComponentRegistration | undefined;\n readonly getCurrentRequestFrame: () => DataFlowRequestFrame | undefined;\n readonly observations: () => readonly NetworkObservation[];\n readonly updateRoute: (routeKey: string) => void;\n readonly registerComponent: (\n component: object,\n componentSourceId: string,\n sourceVersion: string,\n ) => void;\n readonly withInvocation: <Result>(\n token: DataFlowInvocationToken | undefined,\n callback: () => Result,\n ) => Result;\n readonly withRequestFrame: <Result>(\n token: DataFlowInvocationToken | undefined,\n metadata: DataFlowRequestMetadata,\n callback: () => Result,\n ) => Result;\n}\n\nexport interface DataFlowObservationPolicy {\n readonly shouldObserveFetch?: (\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n baseUrl: string,\n ) => boolean;\n readonly shouldObserveXhr?: (url: string, baseUrl: string) => boolean;\n}\n\nexport interface DataFlowTrpcOperation {\n readonly path: unknown;\n readonly type: unknown;\n}\n\nexport interface DataFlowTrpcLinkOptions<\n Operation extends DataFlowTrpcOperation,\n Result,\n> {\n readonly next: (operation: Operation) => Result;\n readonly op: Operation;\n}\n\nexport type DataFlowTrpcLink = (\n runtime: unknown,\n) => <Operation extends DataFlowTrpcOperation, Result>(\n options: DataFlowTrpcLinkOptions<Operation, Result>,\n) => Result;\n\ninterface DataFlowGlobal {\n readonly fetch?: typeof globalThis.fetch;\n readonly location?: Location;\n readonly performance?: Performance;\n readonly XMLHttpRequest?: typeof globalThis.XMLHttpRequest;\n}\n\ninterface MutableDataFlowGlobal extends DataFlowGlobal {\n fetch?: typeof globalThis.fetch;\n}\n\ninterface XhrMetadata {\n readonly method: string;\n readonly url: string;\n}\n\ninterface RingEntry {\n readonly bytes: number;\n readonly observation: NetworkObservation;\n readonly recordedAt: number;\n}\n\nconst RUNTIME_KEY: unique symbol = Symbol.for(\n \"spotpatch.data-flow.runtime.v1\",\n) as never;\nconst REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\nconst REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\n\ntype DataFlowRuntimeStore = Partial<Record<symbol, DataFlowRuntime>>;\ntype GlobalWithDataFlow = MutableDataFlowGlobal & DataFlowRuntimeStore;\n\nfunction positiveNow(target: DataFlowGlobal): number {\n return target.performance?.now() ?? Date.now();\n}\n\nfunction createOpaqueSequence(prefix: string): () => string {\n let sequence = 0;\n const randomPrefix = (() => {\n try {\n const bytes = new Uint8Array(8);\n globalThis.crypto.getRandomValues(bytes);\n return Array.from(bytes, (value) => value.toString(36).padStart(2, \"0\")).join(\"\");\n } catch {\n return \"local\";\n }\n })();\n\n return () => {\n sequence += 1;\n return `${prefix}_${randomPrefix}_${sequence.toString(36)}`;\n };\n}\n\nfunction freezeUrl(value: string, baseUrl: string): SanitizedObservedUrl {\n try {\n const url = new URL(value, baseUrl);\n return Object.freeze({\n origin: url.origin,\n pathname: url.pathname,\n queryKeys: Object.freeze(\n [...new Set(url.searchParams.keys())]\n .sort()\n .slice(0, DATA_FLOW_URL_QUERY_KEY_LIMIT),\n ),\n });\n } catch {\n return Object.freeze({\n pathname: value.split(/[?#]/u, 1)[0] ?? \"{invalid}\",\n queryKeys: Object.freeze([]),\n });\n }\n}\n\nfunction readFetchUrl(input: RequestInfo | URL): string {\n if (typeof input === \"string\") return input;\n if (input instanceof URL) return input.toString();\n return input.url;\n}\n\nfunction readFetchMethod(input: RequestInfo | URL, init?: RequestInit): string {\n if (init?.method !== undefined) return init.method.toUpperCase();\n return typeof Request !== \"undefined\" && input instanceof Request\n ? input.method.toUpperCase()\n : \"GET\";\n}\n\nfunction isSpotPatchInternalUrl(value: string, baseUrl: string): boolean {\n try {\n const pathname = new URL(value, baseUrl).pathname;\n return (\n pathname === SPOTPATCH_API_BASE || pathname.startsWith(`${SPOTPATCH_API_BASE}/`)\n );\n } catch {\n return false;\n }\n}\n\nfunction approximateBytes(value: unknown): number {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength;\n}\n\nfunction createRingStore(\n limits: RuntimeDataFlowLimits,\n target: DataFlowGlobal,\n): Readonly<{\n add: (observation: NetworkObservation) => void;\n clear: () => void;\n values: () => readonly NetworkObservation[];\n}> {\n const entries: RingEntry[] = [];\n let totalBytes = 0;\n\n function removeExpired(now: number): void {\n while (\n entries[0] !== undefined &&\n now - entries[0].recordedAt > limits.observationTtlMs\n ) {\n const removed = entries.shift();\n if (removed !== undefined) totalBytes -= removed.bytes;\n }\n }\n\n return Object.freeze({\n add(observation): void {\n const now = positiveNow(target);\n removeExpired(now);\n const bytes = approximateBytes(observation);\n if (bytes > limits.observationMaxBytes) return;\n entries.push(Object.freeze({ bytes, observation, recordedAt: now }));\n totalBytes += bytes;\n\n while (\n entries.length > limits.observationMaxEntries ||\n totalBytes > limits.observationMaxBytes\n ) {\n const removed = entries.shift();\n if (removed !== undefined) totalBytes -= removed.bytes;\n }\n },\n clear(): void {\n entries.length = 0;\n totalBytes = 0;\n },\n values(): readonly NetworkObservation[] {\n removeExpired(positiveNow(target));\n return Object.freeze(entries.map(({ observation }) => observation));\n },\n });\n}\n\nfunction ownPropertyDescriptor(\n target: object,\n key: PropertyKey,\n): PropertyDescriptor | undefined {\n try {\n return Object.getOwnPropertyDescriptor(target, key);\n } catch {\n return undefined;\n }\n}\n\nfunction nestedReactWrapperComponent(candidate: object): object | undefined {\n const marker: unknown = ownPropertyDescriptor(candidate, \"$$typeof\")?.value;\n const key =\n marker === REACT_MEMO_TYPE\n ? \"type\"\n : marker === REACT_FORWARD_REF_TYPE\n ? \"render\"\n : undefined;\n if (key === undefined) return undefined;\n const nested: unknown = ownPropertyDescriptor(candidate, key)?.value;\n return (typeof nested === \"object\" && nested !== null) || typeof nested === \"function\"\n ? nested\n : undefined;\n}\n\nfunction installWritableDataProperty(\n target: object,\n key: PropertyKey,\n replacement: object,\n original: PropertyDescriptor | undefined = ownPropertyDescriptor(target, key),\n): (() => void) | undefined {\n if (original === undefined || !(\"value\" in original) || !original.writable) {\n return undefined;\n }\n\n try {\n Object.defineProperty(target, key, { ...original, value: replacement });\n } catch {\n return undefined;\n }\n\n return (): void => {\n try {\n if (ownPropertyDescriptor(target, key)?.value === replacement) {\n Object.defineProperty(target, key, original);\n }\n } catch {\n // A host or later wrapper can make the property non-configurable.\n }\n };\n}\n\nfunction recordWithoutAffectingHost(record: () => void): void {\n try {\n record();\n } catch {\n // Observation is optional; the host transport result is authoritative.\n }\n}\n\nexport function createDataFlowRuntime(\n config: RuntimeDataFlowConfig,\n target: MutableDataFlowGlobal = globalThis,\n policy: DataFlowObservationPolicy = {},\n): DataFlowRuntime {\n const componentRegistry = new WeakMap<object, DataFlowComponentRegistration>();\n const xhrMetadata = new WeakMap<object, XhrMetadata>();\n const store = createRingStore(config.limits, target);\n const nextInvocationId = createOpaqueSequence(\"invocation\");\n const nextObservationId = createOpaqueSequence(\"observation\");\n const pageEpoch = createOpaqueSequence(\"page\")();\n const nextRouteEpoch = createOpaqueSequence(\"route\");\n let routeEpoch = nextRouteEpoch();\n let routeKey: string | undefined;\n let currentInvocation: DataFlowInvocationToken | undefined;\n let currentRequestFrame: DataFlowRequestFrame | undefined;\n let disposed = false;\n\n const originalFetch = (() => {\n try {\n return target.fetch;\n } catch {\n return undefined;\n }\n })();\n function spotPatchFetch(\n this: typeof globalThis,\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n if (originalFetch === undefined) {\n throw new TypeError(\"Fetch is unavailable.\");\n }\n const result = Reflect.apply(originalFetch, this, [input, init]);\n recordWithoutAffectingHost(() => {\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n const rawUrl = readFetchUrl(input);\n if (\n isSpotPatchInternalUrl(\n rawUrl,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) ||\n policy.shouldObserveFetch?.(\n input,\n init,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) === false\n ) {\n return;\n }\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"fetch\",\n method: readFetchMethod(input, init),\n url: freezeUrl(rawUrl, target.location?.href ?? \"http://spotpatch.invalid/\"),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n return result;\n }\n\n const restoreFetch =\n originalFetch === undefined\n ? undefined\n : installWritableDataProperty(target, \"fetch\", spotPatchFetch);\n\n const xhrPrototype = (() => {\n try {\n return target.XMLHttpRequest?.prototype;\n } catch {\n return undefined;\n }\n })();\n const originalOpenDescriptor =\n xhrPrototype === undefined\n ? undefined\n : ownPropertyDescriptor(xhrPrototype, \"open\");\n const originalSendDescriptor =\n xhrPrototype === undefined\n ? undefined\n : ownPropertyDescriptor(xhrPrototype, \"send\");\n\n function spotPatchOpen(\n this: XMLHttpRequest,\n method: string,\n url: string | URL,\n ...rest: readonly unknown[]\n ): void {\n const original: unknown = originalOpenDescriptor?.value;\n if (typeof original === \"function\") {\n Reflect.apply(original, this, [method, url, ...rest]);\n }\n recordWithoutAffectingHost(() => {\n xhrMetadata.set(this, Object.freeze({ method, url: String(url) }));\n });\n }\n\n function spotPatchSend(\n this: XMLHttpRequest,\n body?: Document | XMLHttpRequestBodyInit | null,\n ): void {\n const original: unknown = originalSendDescriptor?.value;\n if (typeof original === \"function\") Reflect.apply(original, this, [body]);\n recordWithoutAffectingHost(() => {\n const metadata = xhrMetadata.get(this);\n if (\n metadata === undefined ||\n isSpotPatchInternalUrl(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) ||\n policy.shouldObserveXhr?.(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ) === false\n ) {\n return;\n }\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"xhr\",\n method: metadata.method.toUpperCase(),\n url: freezeUrl(\n metadata.url,\n target.location?.href ?? \"http://spotpatch.invalid/\",\n ),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n }\n\n const restoreXhrOpen =\n xhrPrototype === undefined || typeof originalOpenDescriptor?.value !== \"function\"\n ? undefined\n : installWritableDataProperty(\n xhrPrototype,\n \"open\",\n spotPatchOpen,\n originalOpenDescriptor,\n );\n const restoreXhrSend =\n xhrPrototype === undefined || typeof originalSendDescriptor?.value !== \"function\"\n ? undefined\n : installWritableDataProperty(\n xhrPrototype,\n \"send\",\n spotPatchSend,\n originalSendDescriptor,\n );\n\n const runtime: DataFlowRuntime = Object.freeze({\n beginInvocation(metadata: DataFlowTriggerMetadata): DataFlowInvocationToken {\n return Object.freeze({\n invocationId: nextInvocationId(),\n componentSourceId: metadata.componentSourceId,\n triggerCallsiteId: metadata.triggerCallsiteId,\n sourceVersion: metadata.sourceVersion,\n });\n },\n bindInvocation<Arguments extends readonly unknown[], Result>(\n token: DataFlowInvocationToken | undefined,\n callback: (...args: Arguments) => Result,\n ): (...args: Arguments) => Result {\n return function boundInvocation(this: unknown, ...args: Arguments): Result {\n return runtime.withInvocation(token, () => Reflect.apply(callback, this, args));\n };\n },\n bindTrigger<Callback>(\n metadata: DataFlowTriggerMetadata,\n callback: Callback,\n ): Callback {\n if (typeof callback !== \"function\") return callback;\n const callable = callback as (...args: readonly unknown[]) => unknown;\n return function boundTrigger(this: unknown, ...args: readonly unknown[]) {\n const token = runtime.beginInvocation(metadata);\n return runtime.withInvocation(token, () => Reflect.apply(callable, this, args));\n } as Callback;\n },\n captureInvocation: () => currentInvocation,\n clear: store.clear,\n createTrpcLink(): DataFlowTrpcLink {\n return () =>\n <Operation extends DataFlowTrpcOperation, Result>(\n options: DataFlowTrpcLinkOptions<Operation, Result>,\n ): Result => {\n recordWithoutAffectingHost(() => {\n const operation = options.op.path;\n const operationType = options.op.type;\n if (\n typeof operation !== \"string\" ||\n operation.length === 0 ||\n operation.length > 512 ||\n (operationType !== \"query\" &&\n operationType !== \"mutation\" &&\n operationType !== \"subscription\")\n ) {\n return;\n }\n const frame = currentRequestFrame;\n const token = frame?.invocationToken;\n store.add(\n Object.freeze({\n schemaVersion: DATA_FLOW_SCHEMA_VERSION,\n id: nextObservationId(),\n pageEpoch,\n routeEpoch,\n ...(frame === undefined\n ? {}\n : {\n requestCallsiteId: frame.requestCallsiteId,\n sourceVersion: frame.sourceVersion,\n }),\n ...(token === undefined\n ? {}\n : {\n invocationId: token.invocationId,\n componentSourceId: token.componentSourceId,\n triggerCallsiteId: token.triggerCallsiteId,\n }),\n transport: \"trpc\",\n method: operationType.toUpperCase(),\n operation,\n url: Object.freeze({\n pathname: operation,\n queryKeys: Object.freeze([]),\n }),\n outcome: \"dispatched\",\n freshness: \"current\",\n diagnosticIds: Object.freeze([]),\n }),\n );\n });\n return options.next(options.op);\n };\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n store.clear();\n restoreFetch?.();\n restoreXhrOpen?.();\n restoreXhrSend?.();\n },\n getComponentRegistration: (component: object) => componentRegistry.get(component),\n getCurrentRequestFrame: () => currentRequestFrame,\n observations: () =>\n Object.freeze(\n store\n .values()\n .map((observation) =>\n observation.routeEpoch === routeEpoch\n ? observation\n : Object.freeze({ ...observation, freshness: \"stale-route\" as const }),\n ),\n ),\n registerComponent(\n component: object,\n componentSourceId: string,\n registeredSourceVersion: string,\n ): void {\n const registration = Object.freeze({\n componentSourceId,\n sourceVersion: registeredSourceVersion,\n });\n const pending = [component];\n const registered = new Set<object>();\n while (pending.length > 0) {\n const candidate = pending.pop();\n if (candidate === undefined || registered.has(candidate)) continue;\n registered.add(candidate);\n componentRegistry.set(candidate, registration);\n\n const nested = nestedReactWrapperComponent(candidate);\n if (nested !== undefined) pending.push(nested);\n }\n },\n updateRoute(nextRouteKey: string): void {\n if (routeKey === undefined) {\n routeKey = nextRouteKey;\n } else if (routeKey !== nextRouteKey) {\n routeKey = nextRouteKey;\n routeEpoch = nextRouteEpoch();\n }\n },\n withInvocation<Result>(\n token: DataFlowInvocationToken | undefined,\n callback: () => Result,\n ): Result {\n const parent = currentInvocation;\n currentInvocation = token;\n try {\n return callback();\n } finally {\n currentInvocation = parent;\n }\n },\n withRequestFrame<Result>(\n token: DataFlowInvocationToken | undefined,\n metadata: DataFlowRequestMetadata,\n callback: () => Result,\n ): Result {\n const parent = currentRequestFrame;\n currentRequestFrame = Object.freeze({\n requestCallsiteId: metadata.requestCallsiteId,\n sourceVersion: metadata.sourceVersion,\n ...(token === undefined ? {} : { invocationToken: token }),\n });\n try {\n return callback();\n } finally {\n currentRequestFrame = parent;\n }\n },\n });\n\n return runtime;\n}\n\nexport function installDataFlowPrelude(\n config: RuntimeDataFlowConfig,\n target: GlobalWithDataFlow = globalThis,\n policy: DataFlowObservationPolicy = {},\n): DataFlowRuntime | undefined {\n if (!config.enabled) return undefined;\n const runtime = target[RUNTIME_KEY] ?? createDataFlowRuntime(config, target, policy);\n target[RUNTIME_KEY] = runtime;\n return runtime;\n}\n\nexport function getDataFlowRuntime(\n target: GlobalWithDataFlow = globalThis,\n): DataFlowRuntime | undefined {\n return target[RUNTIME_KEY];\n}\n\nexport function disposeDataFlowPrelude(\n runtime: DataFlowRuntime,\n target: GlobalWithDataFlow = globalThis,\n): void {\n if (target[RUNTIME_KEY] !== runtime) return;\n runtime.dispose();\n Reflect.deleteProperty(target, RUNTIME_KEY);\n}\n","import {\n isSensitiveName,\n limitDataFlowReportCollections,\n type ComponentDataFlowReport,\n type DataDependency,\n type EvidenceRef,\n type NetworkObservation,\n type PageDataFlowReport,\n} from \"@spotpatch/shared\";\n\nfunction observationMatchesDependency(\n observation: NetworkObservation,\n dependency: DataDependency,\n): boolean {\n const origin = dependency.origin;\n const transportMatches =\n dependency.kind === \"rpc\"\n ? observation.transport === \"trpc\" &&\n dependency.operation !== undefined &&\n observation.operation === dependency.operation\n : dependency.kind === \"http\"\n ? observation.transport === \"fetch\" || observation.transport === \"xhr\"\n : false;\n if (\n dependency.environment === \"server\" ||\n !transportMatches ||\n observation.freshness !== \"current\" ||\n origin === undefined ||\n observation.requestCallsiteId !== origin.requestCallsiteId ||\n observation.sourceVersion !== origin.sourceVersion ||\n (dependency.method !== undefined &&\n observation.method.toUpperCase() !== dependency.method.toUpperCase()) ||\n (dependency.url !== undefined &&\n observation.url.pathname !== dependency.url.pathname) ||\n (dependency.url?.origin !== undefined &&\n observation.url.origin !== dependency.url.origin) ||\n (origin.componentSourceId !== undefined &&\n observation.componentSourceId !== undefined &&\n observation.componentSourceId !== origin.componentSourceId) ||\n (origin.triggerCallsiteId !== undefined &&\n observation.triggerCallsiteId !== undefined &&\n observation.triggerCallsiteId !== origin.triggerCallsiteId)\n ) {\n return false;\n }\n\n return (\n dependency.association !== \"transitive\" ||\n (observation.componentSourceId === origin.componentSourceId &&\n observation.triggerCallsiteId === origin.triggerCallsiteId)\n );\n}\n\nfunction runtimeEvidence(observation: NetworkObservation): EvidenceRef {\n return Object.freeze({\n id: observation.id,\n kind: \"runtime-observation\",\n summaryKey: \"dataFlow.evidence.runtimeDispatch\",\n });\n}\n\nfunction mergeDependencies(\n dependencies: readonly DataDependency[],\n observations: readonly NetworkObservation[],\n): Readonly<{\n dependencies: readonly DataDependency[];\n matchedObservationIds: ReadonlySet<string>;\n}> {\n const matchedObservationIds = new Set<string>();\n const merged = dependencies.map((dependency) => {\n const matches = observations.filter((observation) =>\n observationMatchesDependency(observation, dependency),\n );\n for (const observation of matches) matchedObservationIds.add(observation.id);\n if (matches.length === 0) return dependency;\n const observedOrigins = [\n ...new Set(\n matches.flatMap(({ url }) => (url.origin === undefined ? [] : [url.origin])),\n ),\n ];\n const observedOrigin =\n observedOrigins.length === 1 ? observedOrigins[0] : undefined;\n return Object.freeze({\n ...dependency,\n ...(dependency.url === undefined ||\n dependency.url.origin !== undefined ||\n observedOrigin === undefined\n ? {}\n : {\n url: Object.freeze({\n ...dependency.url,\n origin: observedOrigin,\n }),\n }),\n execution: \"observed\" as const,\n observationIds: Object.freeze([\n ...new Set([...dependency.observationIds, ...matches.map(({ id }) => id)]),\n ]),\n evidenceIds: Object.freeze([\n ...new Set([...dependency.evidenceIds, ...matches.map(({ id }) => id)]),\n ]),\n });\n });\n return Object.freeze({\n dependencies: Object.freeze(merged),\n matchedObservationIds,\n });\n}\n\nfunction appendRuntimeEvidence(\n evidence: readonly EvidenceRef[],\n observations: readonly NetworkObservation[],\n matchedIds: ReadonlySet<string>,\n): readonly EvidenceRef[] {\n const existing = new Set(evidence.map(({ id }) => id));\n return Object.freeze([\n ...evidence,\n ...observations.flatMap((observation) =>\n matchedIds.has(observation.id) && !existing.has(observation.id)\n ? [runtimeEvidence(observation)]\n : [],\n ),\n ]);\n}\n\nexport function mergeComponentDataFlowReport(\n report: ComponentDataFlowReport,\n observations: readonly NetworkObservation[],\n): ComponentDataFlowReport {\n // A source-document report may contain several independently compiled browser\n // scopes. Accept only owners already proven by that authorized static report.\n const owners = new Set([\n report.component.componentSourceId,\n ...report.dependencies\n .filter((dependency) => dependency.environment !== \"server\")\n .map((dependency) => dependency.origin?.componentSourceId),\n ]);\n const componentObservations = observations.filter(\n (observation) =>\n observation.componentSourceId === undefined ||\n owners.has(observation.componentSourceId),\n );\n const merged = mergeDependencies(report.dependencies, componentObservations);\n return limitDataFlowReportCollections(\n Object.freeze({\n ...report,\n dependencies: merged.dependencies,\n evidence: appendRuntimeEvidence(\n report.evidence,\n componentObservations,\n merged.matchedObservationIds,\n ),\n }),\n { mode: \"observation\" },\n );\n}\n\nfunction unassignedDependency(observation: NetworkObservation): DataDependency {\n const isRpc = observation.transport === \"trpc\";\n return Object.freeze({\n id: observation.id,\n kind: isRpc ? \"rpc\" : \"http\",\n direction:\n observation.method === \"GET\" ||\n observation.method === \"HEAD\" ||\n observation.method === \"QUERY\" ||\n observation.method === \"SUBSCRIPTION\"\n ? \"read\"\n : \"write\",\n execution: \"observed\",\n proof: \"unavailable\",\n association: \"unassigned\",\n method: observation.method,\n ...(isRpc\n ? observation.operation === undefined\n ? {}\n : { operation: observation.operation }\n : { url: observation.url }),\n parameters: Object.freeze(\n (isRpc ? [] : observation.url.queryKeys).map((path) =>\n Object.freeze({\n path,\n position: \"query\" as const,\n sensitive: isSensitiveName(path),\n valueState: \"not-collected\" as const,\n evidenceIds: Object.freeze([observation.id]),\n }),\n ),\n ),\n response: Object.freeze({\n consumedFields: Object.freeze([]),\n }),\n suppliedBindings: Object.freeze([]),\n locationIds: Object.freeze([]),\n evidenceIds: Object.freeze([observation.id]),\n observationIds: Object.freeze([observation.id]),\n });\n}\n\nexport function mergePageDataFlowReport(\n report: PageDataFlowReport,\n observations: readonly NetworkObservation[],\n): PageDataFlowReport {\n const currentObservations = observations.filter(\n ({ freshness }) => freshness === \"current\",\n );\n const merged = mergeDependencies(report.dependencies, currentObservations);\n const unassigned = currentObservations\n .filter(({ id }) => !merged.matchedObservationIds.has(id))\n .map(unassignedDependency);\n const allObservationIds = new Set(currentObservations.map(({ id }) => id));\n return limitDataFlowReportCollections(\n Object.freeze({\n ...report,\n dependencies: Object.freeze([...merged.dependencies, ...unassigned]),\n evidence: appendRuntimeEvidence(\n report.evidence,\n currentObservations,\n allObservationIds,\n ),\n }),\n { mode: \"observation\" },\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/data-flow.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { D as DataFlowComponentRegistration, a as DataFlowInvocationToken, h as DataFlowObservationPolicy, b as DataFlowRequestFrame, c as DataFlowRequestMetadata, d as DataFlowRuntime, e as DataFlowTriggerMetadata, j as DataFlowTrpcLink, k as DataFlowTrpcLinkOptions, l as DataFlowTrpcOperation, f as createDataFlowRuntime, g as getDataFlowRuntime, i as installDataFlowPrelude } from './data-flow-runtime-
|
|
1
|
+
export { D as DataFlowComponentRegistration, a as DataFlowInvocationToken, h as DataFlowObservationPolicy, b as DataFlowRequestFrame, c as DataFlowRequestMetadata, d as DataFlowRuntime, e as DataFlowTriggerMetadata, j as DataFlowTrpcLink, k as DataFlowTrpcLinkOptions, l as DataFlowTrpcOperation, f as createDataFlowRuntime, m as disposeDataFlowPrelude, g as getDataFlowRuntime, i as installDataFlowPrelude } from './data-flow-runtime-CacBbxN0.cjs';
|
|
2
2
|
import { ComponentDataFlowReport, NetworkObservation, PageDataFlowReport } from '@spotpatch/shared';
|
|
3
3
|
import '@spotpatch/shared/data-flow-runtime';
|
|
4
4
|
|
package/dist/data-flow.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { D as DataFlowComponentRegistration, a as DataFlowInvocationToken, h as DataFlowObservationPolicy, b as DataFlowRequestFrame, c as DataFlowRequestMetadata, d as DataFlowRuntime, e as DataFlowTriggerMetadata, j as DataFlowTrpcLink, k as DataFlowTrpcLinkOptions, l as DataFlowTrpcOperation, f as createDataFlowRuntime, g as getDataFlowRuntime, i as installDataFlowPrelude } from './data-flow-runtime-
|
|
1
|
+
export { D as DataFlowComponentRegistration, a as DataFlowInvocationToken, h as DataFlowObservationPolicy, b as DataFlowRequestFrame, c as DataFlowRequestMetadata, d as DataFlowRuntime, e as DataFlowTriggerMetadata, j as DataFlowTrpcLink, k as DataFlowTrpcLinkOptions, l as DataFlowTrpcOperation, f as createDataFlowRuntime, m as disposeDataFlowPrelude, g as getDataFlowRuntime, i as installDataFlowPrelude } from './data-flow-runtime-CacBbxN0.js';
|
|
2
2
|
import { ComponentDataFlowReport, NetworkObservation, PageDataFlowReport } from '@spotpatch/shared';
|
|
3
3
|
import '@spotpatch/shared/data-flow-runtime';
|
|
4
4
|
|
package/dist/data-flow.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import "./chunk-RZDOL5BT.js";
|
|
2
2
|
import {
|
|
3
3
|
createDataFlowRuntime,
|
|
4
|
+
disposeDataFlowPrelude,
|
|
4
5
|
getDataFlowRuntime,
|
|
5
6
|
installDataFlowPrelude,
|
|
6
7
|
mergeComponentDataFlowReport,
|
|
7
8
|
mergePageDataFlowReport
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DCN6OMLH.js";
|
|
9
10
|
export {
|
|
10
11
|
createDataFlowRuntime,
|
|
12
|
+
disposeDataFlowPrelude,
|
|
11
13
|
getDataFlowRuntime,
|
|
12
14
|
installDataFlowPrelude,
|
|
13
15
|
mergeComponentDataFlowReport,
|
|
@@ -23,6 +23,7 @@ __export(external_handoff_panel_entry_exports, {
|
|
|
23
23
|
createExternalHandoffPanel: () => createExternalHandoffPanel,
|
|
24
24
|
createExternalHandoffWorkflow: () => createExternalHandoffWorkflow,
|
|
25
25
|
getExternalHandoffExtension: () => getExternalHandoffExtension,
|
|
26
|
+
installExternalHandoffExtension: () => installExternalHandoffExtension,
|
|
26
27
|
registerExternalHandoffExtension: () => registerExternalHandoffExtension
|
|
27
28
|
});
|
|
28
29
|
module.exports = __toCommonJS(external_handoff_panel_entry_exports);
|
|
@@ -1036,7 +1037,7 @@ var MESSAGES = Object.freeze({
|
|
|
1036
1037
|
resultTitle: "Managed result",
|
|
1037
1038
|
controlConnection: (state, mode) => `Connection: ${state} \xB7 Mode: ${mode}`,
|
|
1038
1039
|
controlAuth: (auth, grant) => `Auth: ${auth} \xB7 Grant: ${grant}`,
|
|
1039
|
-
controlConsentRequired:
|
|
1040
|
+
controlConsentRequired: (command) => `Initialize project access once: run \`${command}\` from this project, then connect again. No dev-terminal confirmation is required. The grant allows isolated snapshot writes and validated application; revoke it here at any time.`,
|
|
1040
1041
|
controlModel: (model) => `Model: ${model}`,
|
|
1041
1042
|
controlRevision: (task) => `Revision ${String(task.revision)}: ${task.deliveryStatus} / ${task.executionStatus} / ${task.managedPhase}`,
|
|
1042
1043
|
controlValidation: (outcome) => `Validation: ${outcome}`,
|
|
@@ -1123,7 +1124,7 @@ var MESSAGES = Object.freeze({
|
|
|
1123
1124
|
resultTitle: "\u53D7\u7BA1\u6267\u884C\u7ED3\u679C",
|
|
1124
1125
|
controlConnection: (state, mode) => `\u8FDE\u63A5\uFF1A${state} \xB7 \u6A21\u5F0F\uFF1A${mode}`,
|
|
1125
1126
|
controlAuth: (auth, grant) => `\u8BA4\u8BC1\uFF1A${auth} \xB7 \u6388\u6743\uFF1A${grant}`,
|
|
1126
|
-
controlConsentRequired:
|
|
1127
|
+
controlConsentRequired: (command) => `\u8BF7\u5728\u5F53\u524D\u9879\u76EE\u6267\u884C\u4E00\u6B21\u521D\u59CB\u5316\uFF1A\`${command}\`\uFF0C\u7136\u540E\u91CD\u65B0\u8FDE\u63A5\uFF0C\u65E0\u9700\u5728\u5F00\u53D1\u7EC8\u7AEF\u8F93\u5165 yes\u3002\u6388\u6743\u5141\u8BB8\u9694\u79BB\u5FEB\u7167\u4FEE\u6539\u53CA\u6821\u9A8C\u540E\u7684\u5E94\u7528\uFF0C\u53EF\u968F\u65F6\u5728\u6B64\u64A4\u9500\u3002`,
|
|
1127
1128
|
controlModel: (model) => `\u6A21\u578B\uFF1A${model}`,
|
|
1128
1129
|
controlRevision: (task) => `revision ${String(task.revision)}\uFF1A${task.deliveryStatus} / ${task.executionStatus} / ${task.managedPhase}`,
|
|
1129
1130
|
controlValidation: (outcome) => `\u9A8C\u8BC1\uFF1A${outcome}`,
|
|
@@ -1282,13 +1283,17 @@ function disclosurePaths(annotation) {
|
|
|
1282
1283
|
)
|
|
1283
1284
|
]);
|
|
1284
1285
|
}
|
|
1285
|
-
function controlStatusText(value, messages) {
|
|
1286
|
+
function controlStatusText(value, messages, framework) {
|
|
1286
1287
|
const model = value.effectiveModel ?? value.requestedModel;
|
|
1287
1288
|
const task = value.task;
|
|
1288
1289
|
const parts = [
|
|
1289
1290
|
messages.controlConnection(value.connectionState, value.mode),
|
|
1290
1291
|
messages.controlAuth(value.authReadiness, value.grantState),
|
|
1291
|
-
...value.connectionState === "awaiting-consent" && value.grantState === "missing" ? [
|
|
1292
|
+
...value.connectionState === "awaiting-consent" && value.grantState === "missing" ? [
|
|
1293
|
+
messages.controlConsentRequired(
|
|
1294
|
+
`pnpm exec spotpatch-${framework} bridge init`
|
|
1295
|
+
)
|
|
1296
|
+
] : [],
|
|
1292
1297
|
...model === void 0 ? [] : [messages.controlModel(model)],
|
|
1293
1298
|
...task === void 0 ? [] : [
|
|
1294
1299
|
messages.controlRevision(task),
|
|
@@ -1526,7 +1531,7 @@ function createExternalHandoffPanel(document, framework, locale, sessionId, subs
|
|
|
1526
1531
|
cancelManagedButton.textContent = messages.cancelManaged;
|
|
1527
1532
|
managedResultTitle.textContent = messages.resultTitle;
|
|
1528
1533
|
if (control !== void 0) {
|
|
1529
|
-
controlStatus.textContent = controlStatusText(control, messages);
|
|
1534
|
+
controlStatus.textContent = controlStatusText(control, messages, framework);
|
|
1530
1535
|
disclosureNoGuarantee.textContent = control.mode === "managed" ? messages.disclosureManagedGuarantee : messages.disclosureNoGuarantee;
|
|
1531
1536
|
}
|
|
1532
1537
|
if (managedResultValue !== void 0) {
|
|
@@ -1648,7 +1653,7 @@ function createExternalHandoffPanel(document, framework, locale, sessionId, subs
|
|
|
1648
1653
|
},
|
|
1649
1654
|
renderControlStatus(value) {
|
|
1650
1655
|
control = value;
|
|
1651
|
-
controlStatus.textContent = controlStatusText(value, messages);
|
|
1656
|
+
controlStatus.textContent = controlStatusText(value, messages, framework);
|
|
1652
1657
|
controlStatus.dataset.state = value.connectionState;
|
|
1653
1658
|
disclosureNoGuarantee.textContent = value.mode === "managed" ? messages.disclosureManagedGuarantee : messages.disclosureNoGuarantee;
|
|
1654
1659
|
refreshControlActions();
|
|
@@ -1719,11 +1724,22 @@ function registerExternalHandoffExtension(extension) {
|
|
|
1719
1724
|
function getExternalHandoffExtension() {
|
|
1720
1725
|
return globalThis[EXTERNAL_HANDOFF_EXTENSION_KEY];
|
|
1721
1726
|
}
|
|
1727
|
+
|
|
1728
|
+
// src/external-handoff-panel-entry.ts
|
|
1729
|
+
function installExternalHandoffExtension() {
|
|
1730
|
+
registerExternalHandoffExtension(
|
|
1731
|
+
Object.freeze({
|
|
1732
|
+
createPanel: createExternalHandoffPanel,
|
|
1733
|
+
createWorkflow: createExternalHandoffWorkflow
|
|
1734
|
+
})
|
|
1735
|
+
);
|
|
1736
|
+
}
|
|
1722
1737
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1723
1738
|
0 && (module.exports = {
|
|
1724
1739
|
createExternalHandoffPanel,
|
|
1725
1740
|
createExternalHandoffWorkflow,
|
|
1726
1741
|
getExternalHandoffExtension,
|
|
1742
|
+
installExternalHandoffExtension,
|
|
1727
1743
|
registerExternalHandoffExtension
|
|
1728
1744
|
});
|
|
1729
1745
|
//# sourceMappingURL=external-handoff-panel.cjs.map
|