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;
}