processMutations function ✓ 100.0%
Last updated: 2026-03-05T11:49:57.418Z
Metrics
LOC: 67
Complexity: 16
Params: 1
Coverage: 100.0% (22/22 lines, 0x executed)
Signature
processMutations(mutations: MutationRecord[]): : void
Architecture violations
- [warning] max-cyclomatic-complexity: 'processMutations' has cyclomatic complexity 16 (max 10)
Source Code
function processMutations(mutations: MutationRecord[]): void {
if (!session || session.status !== "recording") return;
const addedElements = new Set<Element>();
const removedElements = new Set<Element>();
for (const mutation of mutations) {
if (mutation.type === "childList") {
for (const node of mutation.addedNodes) {
if (node instanceof Element) {
addedElements.add(node);
// Also check for form fields inside added containers
for (const child of node.querySelectorAll(FORM_FIELD_SELECTOR)) {
addedElements.add(child);
}
}
}
for (const node of mutation.removedNodes) {
if (node instanceof Element) {
removedElements.add(node);
}
}
}
}
// Detect new visible form fields (cascading selects, dynamic fields)
const newFormFields = [...addedElements].filter(
(el) => isFormField(el) && isVisible(el) && !isExtensionUI(el),
);
if (newFormFields.length > 0) {
const firstField = newFormFields[0];
addStep(
buildStep("wait-for-element", firstField, {
label: `Wait for ${newFormFields.length} new field(s)`,
waitTimeout: 5000,
}),
);
}
// Detect loading spinners disappearing
const spinnerSelectors = [
".loading",
".spinner",
".loader",
"[aria-busy='true']",
".ant-spin",
".MuiCircularProgress-root",
".sk-spinner",
];
for (const el of removedElements) {
const isSpinner = spinnerSelectors.some(
(sel) => el.matches?.(sel) || el.querySelector?.(sel),
);
if (isSpinner) {
addStep({
type: "wait-for-hidden",
timestamp: now(),
selector: buildQuickSelector(el),
label: "Wait for loading to finish",
waitTimeout: 10000,
});
break;
}
}
}
Dependencies (Outgoing)
| Target | Type |
|---|---|
| isFormField | calls |
| isVisible | calls |
| isExtensionUI | calls |
| addStep | calls |
| buildStep | calls |
| now | calls |
| buildQuickSelector | calls |
Impact (Incoming)
| Source | Type |
|---|---|
| startMutationObserver | calls |