You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.1 KiB

import { ensureArray } from "@/workers/rpa/kernel/context-validator";
import type {
CargoStateEvidence,
CargoStateProbe,
} from "@/workers/rpa/kernel/state-engine";
const EMPTY_CARGO_EVIDENCE: CargoStateEvidence = {
phase: "no_cargo_inputs",
mountedCargoFields: [],
interactiveCargoFields: [],
blockedCargoFields: [],
};
/** browser evaluate 结果归一化,禁止 undefined 流入 state */
export function normalizeCargoEvidence(
raw: CargoStateEvidence | null | undefined,
): CargoStateEvidence {
if (!raw || typeof raw !== "object") {
return EMPTY_CARGO_EVIDENCE;
}
return {
phase: raw.phase ?? "no_cargo_inputs",
mountedCargoFields: ensureArray(raw.mountedCargoFields),
interactiveCargoFields: ensureArray(raw.interactiveCargoFields),
blockedCargoFields: ensureArray(raw.blockedCargoFields),
};
}
export function buildCargoProbe(
raw: CargoStateEvidence | null | undefined,
isReady: (evidence: CargoStateEvidence) => boolean,
): CargoStateProbe {
const evidence = normalizeCargoEvidence(raw);
return { ready: isReady(evidence), evidence };
}