captureUnrecordedFormFields function ✓ 88.2%

Last updated: 2026-03-05T11:49:57.418Z

Metrics

LOC: 45 Complexity: 21 Params: 1 Coverage: 88.2% (15/17 lines, 0x executed)

Signature

captureUnrecordedFormFields(form: HTMLFormElement): : void

Summary

Captures values of form fields that do not yet have a recorded fill/select/check step. Needed for fields with default values, auto-filled values, or values set programmatically (e.g. by the Fill All extension).

Architecture violations

View all

  • [warning] max-cyclomatic-complexity: 'captureUnrecordedFormFields' has cyclomatic complexity 21 (max 10)

Source Code

function captureUnrecordedFormFields(form: HTMLFormElement): void {
  if (!session) return;

  // Build a set of selectors that already have a recorded step in this session
  const recordedSelectors = new Set(
    session.steps
      .filter((s) =>
        (["fill", "select", "check", "uncheck"] as RecordedStepType[]).includes(
          s.type,
        ),
      )
      .map((s) => s.selector)
      .filter(Boolean),
  );

  const fields = form.querySelectorAll<
    HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
  >("input, select, textarea");

  for (const field of fields) {
    if (isExtensionUI(field)) continue;
    if (!isVisible(field)) continue;

    const sel = buildQuickSelector(field);
    if (recordedSelectors.has(sel)) continue; // already recorded

    if (field instanceof HTMLSelectElement && field.value) {
      addStep(buildStep("select", field, { value: field.value }));
    } else if (field instanceof HTMLInputElement) {
      if (field.type === "checkbox") {
        if (field.checked) addStep(buildStep("check", field));
      } else if (field.type === "radio") {
        if (field.checked)
          addStep(buildStep("check", field, { value: field.value }));
      } else if (
        !["submit", "button", "reset", "image"].includes(field.type) &&
        field.value
      ) {
        addStep(buildStep("fill", field, { value: field.value }));
      }
    } else if (field instanceof HTMLTextAreaElement && field.value) {
      addStep(buildStep("fill", field, { value: field.value }));
    }
  }
}

Dependencies (Outgoing)

graph LR captureUnrecordedFormFields["captureUnrecordedFormFields"] isExtensionUI["isExtensionUI"] isVisible["isVisible"] buildQuickSelector["buildQuickSelector"] addStep["addStep"] buildStep["buildStep"] captureUnrecordedFormFields -->|calls| isExtensionUI captureUnrecordedFormFields -->|calls| isVisible captureUnrecordedFormFields -->|calls| buildQuickSelector captureUnrecordedFormFields -->|calls| addStep captureUnrecordedFormFields -->|calls| buildStep style captureUnrecordedFormFields fill:#dbeafe,stroke:#2563eb,stroke-width:2px click captureUnrecordedFormFields "5a9cd35f60b34b67.html" click isExtensionUI "d32bf4175ca1ff44.html" click isVisible "2564ad14dba9855a.html" click buildQuickSelector "077a2e134af1a6be.html" click addStep "012da91201f9487b.html" click buildStep "6d1088fe63d8f4bc.html"
TargetType
isExtensionUI calls
isVisible calls
buildQuickSelector calls
addStep calls
buildStep calls

Impact (Incoming)

graph LR captureUnrecordedFormFields["captureUnrecordedFormFields"] onSubmit["onSubmit"] onSubmit -->|calls| captureUnrecordedFormFields style captureUnrecordedFormFields fill:#dbeafe,stroke:#2563eb,stroke-width:2px click captureUnrecordedFormFields "5a9cd35f60b34b67.html" click onSubmit "8be45aca6a1f4353.html"
SourceType
onSubmit calls