Export

Generates an Algolia transformation script with your current rules, synonyms and labels baked in. Paste it into the Algolia transformation editor.

/**
 * Auto-generated Algolia transformation script.
 * Generated: 2026-06-01T16:43:23.455Z
 * Edit via the Transform Builder UI, then re-export.
 */
const DEFAULT_LOCALE = "en";
const SUPPORTED_LOCALES = ["ar","bg","hr","da","nl","en","fi","fr","de","it","no","pl","pt","ro","ru","es","sv"];
const LABELS = {
  "ar": {},
  "bg": {},
  "hr": {},
  "da": {},
  "nl": {
    "crane": "Laadkraan",
    "craneTruck": "Kraanwagen",
    "grapple": "Grijper",
    "pto": "PTO",
    "retarder": "Retarder",
    "airSuspension": "Lucht",
    "fullAirSuspension": "Luchtvering",
    "steelSuspension": "Parabolisch",
    "fullSteelSuspension": "Full Steel vering",
    "lift": "Lift",
    "damaged": "Schade",
    "truck": "Bakwagen",
    "tractorUnit": "Trekker",
    "semiTrailer": "Oplegger",
    "yes": "Ja",
    "no": "Nee",
    "adr": "ADR",
    "mega": "Mega",
    "hydraulics": "Hydrauliek",
    "compressor": "Compressor",
    "tailLift": "Laadklep",
    "meatHang": "Vleeshangrails",
    "loadfloorExtendable": "Laadvloer uitschuifbaar",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Uitzonderlijk vervoer",
    "quickCouplerFunction": "Snelwisselfunctie",
    "hammerFunction": "Hamerfunctie",
    "rotationFunction": "Rotatiefunctie",
    "gps": "GPS",
    "blade": "Dozerblad",
    "outriggers": "Steunpoten",
    "liftAxle": "Lift as"
  },
  "en": {
    "crane": "Loading crane",
    "craneTruck": "Crane truck",
    "grapple": "Grapple",
    "pto": "PTO",
    "retarder": "Retarder",
    "airSuspension": "Air",
    "fullAirSuspension": "Full air suspension",
    "steelSuspension": "Parabolic",
    "fullSteelSuspension": "Full steel suspension",
    "lift": "Lift",
    "damaged": "Damaged",
    "truck": "Truck",
    "tractorUnit": "Tractorhead",
    "semiTrailer": "Semi-trailer",
    "yes": "Yes",
    "no": "No",
    "adr": "ADR",
    "mega": "Mega",
    "hydraulics": "Hydraulics",
    "compressor": "Compressor",
    "tailLift": "Taillift",
    "meatHang": "Meat hang",
    "loadfloorExtendable": "Loadfloor extendable",
    "coolingEngineMultiTemp": "Multi Temp",
    "heavyDuty": "Heavy duty",
    "quickCouplerFunction": "Quick coupler function",
    "hammerFunction": "Hammer Function",
    "rotationFunction": "Rotation Function",
    "gps": "GPS",
    "blade": "Blade",
    "outriggers": "Outriggers",
    "liftAxle": "Lift axle"
  },
  "fi": {},
  "fr": {
    "crane": "Grue de chargement",
    "craneTruck": "Camion grue",
    "grapple": "Grappin",
    "pto": "Prise de force",
    "retarder": "Ralentisseur",
    "airSuspension": "Air",
    "fullAirSuspension": "Suspension pneumatique intégrale",
    "steelSuspension": "Parabolique",
    "fullSteelSuspension": "Suspension acier intégrale",
    "lift": "Levage",
    "damaged": "Endommagé",
    "truck": "Camion",
    "tractorUnit": "Tracteur",
    "semiTrailer": "Semi-remorques",
    "yes": "Oui",
    "no": "Non",
    "adr": "ADR",
    "mega": "Méga",
    "hydraulics": "Hydraulique",
    "compressor": "Compresseur",
    "tailLift": "Hayon élévateur",
    "meatHang": "Rails viande",
    "loadfloorExtendable": "Plancher extensible",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Transport exceptionnel",
    "quickCouplerFunction": "Fonction attache rapide",
    "hammerFunction": "Fonction marteau",
    "rotationFunction": "Fonction rotation",
    "gps": "GPS",
    "blade": "Lame",
    "outriggers": "Stabilisateurs",
    "liftAxle": "Essieu relevable"
  },
  "de": {
    "crane": "Ladekran",
    "craneTruck": "Kranwagen",
    "grapple": "Greifer",
    "pto": "Zapfwelle",
    "retarder": "Retarder",
    "airSuspension": "Luft",
    "fullAirSuspension": "Luftfederung",
    "steelSuspension": "Parabolisch",
    "fullSteelSuspension": "Vollstahlfederung",
    "lift": "Hub",
    "damaged": "Beschädigt",
    "truck": "LKW",
    "tractorUnit": "SZM",
    "semiTrailer": "Auflieger",
    "yes": "Ja",
    "no": "Nein",
    "adr": "ADR",
    "mega": "Mega",
    "hydraulics": "Hydraulik",
    "compressor": "Kompressor",
    "tailLift": "Ladebordwand",
    "meatHang": "Fleischhang",
    "loadfloorExtendable": "Ladeboden ausschiebbar",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Schwerlast",
    "quickCouplerFunction": "Schnellwechsler-Funktion",
    "hammerFunction": "Hammerfunktion",
    "rotationFunction": "Rotationsfunktion",
    "gps": "GPS",
    "blade": "Schild",
    "outriggers": "Abstützungen",
    "liftAxle": "Liftachse"
  },
  "it": {
    "crane": "Gru di carico",
    "craneTruck": "Camion con gru",
    "grapple": "Pinza",
    "pto": "Presa di forza",
    "retarder": "Rallentatore",
    "airSuspension": "Aria",
    "fullAirSuspension": "Sospensioni pneumatiche integrali",
    "steelSuspension": "Parabolico",
    "fullSteelSuspension": "Sospensioni in acciaio integrali",
    "lift": "Sollevabile",
    "damaged": "Danneggiato",
    "truck": "Motrice",
    "tractorUnit": "Trattore",
    "semiTrailer": "Semirimorchio",
    "yes": "Sì",
    "no": "No",
    "adr": "ADR",
    "mega": "Ribassato",
    "hydraulics": "Idraulica",
    "compressor": "Compressore",
    "tailLift": "Sponda idraulica",
    "meatHang": "Ganci carne",
    "loadfloorExtendable": "Pianale estensibile",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Eccezionale",
    "quickCouplerFunction": "Funzione attacco rapido",
    "hammerFunction": "Funzione martello",
    "rotationFunction": "Funzione rotazione",
    "gps": "GPS",
    "blade": "Lama",
    "outriggers": "Stabilizzatori",
    "liftAxle": "Asse sollevabile"
  },
  "no": {},
  "pl": {},
  "pt": {
    "crane": "Grua de carga",
    "craneTruck": "Caminhão guindaste",
    "grapple": "Garra",
    "pto": "Tomada de força",
    "retarder": "Retardador",
    "airSuspension": "Ar",
    "fullAirSuspension": "Suspensão pneumática integral",
    "steelSuspension": "Parabólica",
    "fullSteelSuspension": "Suspensão de aço integral",
    "lift": "Elevação",
    "damaged": "Danificado",
    "truck": "Camião",
    "tractorUnit": "Tractor",
    "semiTrailer": "semi-reboque",
    "yes": "Sim",
    "no": "Não",
    "adr": "ADR",
    "mega": "Mega",
    "hydraulics": "Hidráulica",
    "compressor": "Compressor",
    "tailLift": "Plataforma traseira",
    "meatHang": "Trilho de carne",
    "loadfloorExtendable": "Piso extensível",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Serviço pesado",
    "quickCouplerFunction": "Função engate rápido",
    "hammerFunction": "Função martelo",
    "rotationFunction": "Função rotação",
    "gps": "GPS",
    "blade": "Lâmina",
    "outriggers": "Estabilizadores",
    "liftAxle": "Eixo elevatório"
  },
  "ro": {},
  "ru": {},
  "es": {
    "crane": "Grúa de carga",
    "craneTruck": "Camion grua",
    "grapple": "Pinza",
    "pto": "Toma de fuerza",
    "retarder": "Ralentizador",
    "airSuspension": "Aire",
    "fullAirSuspension": "Suspensión neumática integral",
    "steelSuspension": "Parabólico",
    "fullSteelSuspension": "Suspensión de acero integral",
    "lift": "Elevable",
    "damaged": "Dañado",
    "truck": "Camiones",
    "tractorUnit": "Cabeza tractora",
    "semiTrailer": "Semirremolque",
    "yes": "Sí",
    "no": "No",
    "adr": "ADR",
    "mega": "Mega",
    "hydraulics": "Hidráulica",
    "compressor": "Compresor",
    "tailLift": "Plataforma elevadora",
    "meatHang": "Barras para carne",
    "loadfloorExtendable": "Suelo extensible",
    "coolingEngineMultiTemp": "Multi-Temp",
    "heavyDuty": "Transporte de alta resistencia",
    "quickCouplerFunction": "Función acoplador rápido",
    "hammerFunction": "Función martillo",
    "rotationFunction": "Función rotación",
    "gps": "GPS",
    "blade": "Hoja",
    "outriggers": "Estabilizadores",
    "liftAxle": "Eje elevable"
  },
  "sv": {}
};
const SYNONYMS = {};
const RULES = [];

function resolveLocaleFromIndex(indexName) {
  if (!indexName) return DEFAULT_LOCALE;
  const parts = indexName.toLowerCase().split(/[_-]/);
  return parts.find((p) => SUPPORTED_LOCALES.includes(p)) || DEFAULT_LOCALE;
}
function getLabel(locale, key) {
  return (LABELS[locale] && LABELS[locale][key]) || (LABELS[DEFAULT_LOCALE] && LABELS[DEFAULT_LOCALE][key]) || null;
}
function unique(arr) {
  return Array.from(new Set(arr.filter((v) => v !== null && v !== undefined && v !== "")));
}
function resolveValue(v, locale) {
  if (v.valueLabel) return getLabel(locale, v.valueLabel);
  return v.value;
}
function evalCondition(c, record, locale) {
  const actual = record == null ? undefined : record[c.field];
  const expected = resolveValue(c, locale);
  switch (c.operator) {
    case "isTrue": return actual === true;
    case "isFalse": return actual === false;
    case "exists": return actual !== undefined && actual !== null && actual !== "";
    case "equals": return actual === expected;
    case "notEquals": return actual !== expected;
    case "contains":
      if (Array.isArray(actual)) return actual.indexOf(expected) !== -1;
      if (typeof actual === "string" && typeof expected === "string") return actual.indexOf(expected) !== -1;
      return false;
    case "in":
      if (Array.isArray(expected)) return expected.indexOf(actual) !== -1;
      return false;
    default: return false;
  }
}
function evalRule(rule, record, locale) {
  if (!rule.conditions.length) return true;
  const results = rule.conditions.map((c) => evalCondition(c, record, locale));
  return rule.condition_logic === "OR" ? results.some(Boolean) : results.every(Boolean);
}

async function transform(record, helper) {
  const { indexName } = helper.getMetadata();
  const locale = resolveLocaleFromIndex(indexName);
  const partial = { objectID: record.objectID };
  try {
    const keyFeatures = Array.isArray(record && record.keyFeatures) ? record.keyFeatures.slice() : [];
    const syns = Array.isArray(record && record.synonyms) ? record.synonyms.slice() : [];
    const collections = Array.isArray(record && record.collections) ? record.collections.slice() : [];
    let cat2 = [];
    if (record && record.categoryLevel2) {
      cat2 = Array.isArray(record.categoryLevel2) ? record.categoryLevel2.slice() : [record.categoryLevel2];
    }
    const origKF = keyFeatures.length, origSyn = syns.length, origCol = collections.length, origCat = cat2.length;

    for (const rule of RULES) {
      if (!evalRule(rule, record, locale)) continue;
      for (const action of rule.actions) {
        const literal = action.valueLabel ? getLabel(locale, action.valueLabel) : action.value;
        switch (action.type) {
          case "pushKeyFeature": if (literal) keyFeatures.push(literal); break;
          case "pushCategoryLevel2": if (literal) cat2.push(literal); break;
          case "pushCollection": if (action.collectionIds) collections.push.apply(collections, action.collectionIds); break;
          case "pushSynonym": {
            if (action.synonymKey) {
              const terms = (SYNONYMS[locale] && SYNONYMS[locale][action.synonymKey]) || (SYNONYMS[DEFAULT_LOCALE] && SYNONYMS[DEFAULT_LOCALE][action.synonymKey]) || [];
              syns.push.apply(syns, terms);
            } else if (literal) syns.push(literal);
            break;
          }
        }
      }
    }
    if (keyFeatures.length > origKF) partial.keyFeatures = unique(keyFeatures);
    if (syns.length > origSyn) partial.synonyms = unique(syns);
    if (collections.length > origCol) partial.collections = unique(collections);
    if (cat2.length > origCat) partial.categoryLevel2 = unique(cat2);
  } catch (e) {}
  if (Object.keys(partial).length !== 1) return partial;
}