src/lib/form/extractors/signals-extractor.ts

Total Symbols
1
Lines of Code
35
Avg Complexity
1.0
Avg Coverage
100.0%

Symbols by Kind

function 1

All Symbols

Name Kind Visibility Status Lines Signature
buildSignals function exported- 18-28 buildSignals(field: Partial<FormField>): : string

Full Source

/**
 * Signals Extractor
 *
 * Builds a normalised string of context signals for a form field,
 * combining label, name, id, placeholder and autocomplete into a
 * single lowercase string used by TF.js / Chrome AI for classification.
 */

import type { FormField } from "@/types";
import type { Extractor } from "./extractor.interface";

/**
 * Concatenates a field's label, name, id, placeholder and autocomplete
 * attributes into a single lowercase string for ML classification.
 * @param field - Partial form field with optional metadata
 * @returns Normalised signals string
 */
export function buildSignals(field: Partial<FormField>): string {
  return [
    field.label?.toLowerCase(),
    field.name?.toLowerCase(),
    field.id?.toLowerCase(),
    field.placeholder?.toLowerCase(),
    field.autocomplete?.toLowerCase(),
  ]
    .filter(Boolean)
    .join(" ");
}

/** Extractor object — wraps {@link buildSignals} under the common Extractor contract. */
export const signalsExtractor: Extractor<Partial<FormField>, string> = {
  name: "signals",
  extract: buildSignals,
};