mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import { classifyStaticLoadStates } from "./javascriptRuntimeLoadState.js";
|
|
import { buildReconciledApplicationGraph } from "./javascriptRuntimeReconciliationGraph.js";
|
|
import { reconcileRuntimeEntities } from "./javascriptRuntimeReconciliationMatching.js";
|
|
import {
|
|
parseStaticLayers,
|
|
type ParsedStaticLayer,
|
|
} from "./javascriptRuntimeReconciliationParsing.js";
|
|
import {
|
|
parseRuntimeCaptures,
|
|
type ParsedRuntimeCapture,
|
|
} from "./javascriptRuntimeReconciliationCaptureParsing.js";
|
|
import { createJavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationResult.js";
|
|
import type { JavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import type { ReconcileJavaScriptRuntimeInput } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import { projectRuntimeCaptures } from "./javascriptRuntimeReconciliationRuntime.js";
|
|
import { collectStaticRuntimeCandidates } from "./javascriptRuntimeStaticCandidates.js";
|
|
|
|
/** Verified caller input and the static and runtime facts parsed from it. */
|
|
export interface ParsedRuntimeReconciliationInput {
|
|
readonly input: ReconcileJavaScriptRuntimeInput;
|
|
readonly layers: readonly ParsedStaticLayer[];
|
|
readonly captures: readonly ParsedRuntimeCapture[];
|
|
}
|
|
|
|
/** Parse caller Evidence once into the owner consumed by reconciliation. */
|
|
export const parseRuntimeReconciliationInput = (
|
|
input: ReconcileJavaScriptRuntimeInput,
|
|
): ParsedRuntimeReconciliationInput => ({
|
|
input,
|
|
layers: parseStaticLayers(input.static_layers, ["static_layers"]),
|
|
captures: parseRuntimeCaptures(input.runtime_observations, [
|
|
"runtime_observations",
|
|
]),
|
|
});
|
|
|
|
/** Reconcile static JAG layers with authorized passive CDP Evidence. */
|
|
export const reconcileJavaScriptRuntime = (
|
|
parsed: ParsedRuntimeReconciliationInput,
|
|
): JavaScriptRuntimeReconciliationResult => {
|
|
const { layers, captures } = parsed;
|
|
const runtime = projectRuntimeCaptures(captures);
|
|
const candidates = collectStaticRuntimeCandidates(layers);
|
|
const matching = reconcileRuntimeEntities({
|
|
entities: runtime.entities,
|
|
candidates,
|
|
layers,
|
|
});
|
|
const loadStates = classifyStaticLoadStates(
|
|
layers,
|
|
runtime.entities,
|
|
matching.items,
|
|
{
|
|
reconciliationComplete:
|
|
runtime.omittedEntities === 0 && matching.omittedItems === 0,
|
|
},
|
|
);
|
|
const graph = buildReconciledApplicationGraph({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
reconciliationEdges: matching.edges,
|
|
omittedReconciliationItems: matching.omittedItems,
|
|
});
|
|
return createJavaScriptRuntimeReconciliationResult({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
matching,
|
|
loadStates,
|
|
graph: graph.graph,
|
|
omittedGraphItems: graph.omittedGraphItems,
|
|
});
|
|
};
|