Виправи помилку exclude handler в JavaScript коді так щоб проходили тести за принципом АБО(||) і за принципом ТА(&&)
/**
 * Додає новий обробник, який буде взаємодіяти з даними
 * @param {string} name Назва обробника
 * @param {(data:unknown[])=>unknown[]} handler Функція, яка буде оброблювати дані
 */
/**
 * Додає новий обробник, який буде взаємодіяти з даними
 * @param {string} name Назва обробника
 * @param {(data:unknown[])=>unknown[]} handler Функція, яка буде оброблювати дані
 */
 const handlers = {};
const addNewHandler = (name, handler) => {
  handlers[name] = handler;
};

/**
 * Запускає всі додані обробники на переданих даних і повертає відповідний результат
 * @param {unknown[]} data
 * @param {Object.<string, unknown[]>} conditions
 *
 * @return {unknown[]}
 */
const runHandlers = (data, conditions) => {
  let result = data;

  for (const condition in conditions) {
    if (handlers[condition]) {
      result = handlers[condition](result, conditions[condition]);
    }
  }

  return result;
};

//Include Handler
addNewHandler("include", (data, conditions) => {
  return data.filter((item) => {
    return conditions.some((condition) => {
      return Object.keys(condition).every((key) => item[key] === condition[key]);
    });
  });
});

// Обробник для виключення елементів
addNewHandler('exclude', (data, excludeConditions) => {
  return data.filter(item => {
    return !excludeConditions.some(condition => {
      // Для принципу АБО ми перевіряємо, чи至少 один умова не співпадає з елементом
      if (Object.keys(condition).length === 1) {
        return item[Object.keys(condition)[0]] === condition[Object.keys(condition)[0]];
      }
      // Для принципу ТА ми перевіряємо, чи всі умови співпадають з елементом
      return Object.keys(condition).every(key => item[key] === condition[key]);
    });
  });
});

// Extend Handler
addNewHandler("extend", (data, conditions) => {
  return data.map((item) => {
    if (conditions.some((condition) => {
      return Object.keys(condition).every((key) => item[key] === condition[key]);
    })) {
      return { extended: true, ...item };
    }

    return item;
  });
});



Ось тести, які повинні пройти після виправлення:


describe('Базові тести', () => {
  test('Працює обробник include', () => {
    const example = [{ name: 'John', email: 'john1@mail.com' }, { name: 'Jane', email: 'jane@mail.com' }];
    const conditions = [{ name: 'John' }];
    const expectedResult = [{ name: 'John', email: 'john1@mail.com' }];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });

  test('Працює обробник sortBy', () => {
    const example = [{ name: 'John', email: 'john1@mail.com' }, { name: 'Jane', email: 'jane@mail.com' }];
    const conditions = [{ sortBy: 'name' }];
    const expectedResult = [{ name: 'Jane', email: 'jane@mail.com' }, { name: 'John', email: 'john1@mail.com' }];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });

  test('Працює декілька обробників одночасно: include та sortBy', () => {
    const example = [{ name: 'John', email: 'john1@mail.com' }, { name: 'Jane', email: 'jane@mail.com' }];
    const conditions = [{ name: 'John' }, { sortBy: 'name' }];
    const expectedResult = [{ name: 'John', email: 'john1@mail.com' }];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });

  test('Працює обробник exclude за принципом АБО', () => {
    const example = [{ name: 'John', email: 'john1@mail.com' }, { name: 'Jane', email: 'jane@mail.com' }];
    const conditions = {
      exclude: [{ name: "John" }, { email: "john2@mail.com" }],
    };
    const expectedResult = [{ name: 'Jane', email: 'jane@mail.com' }];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });

  test('Працює обробник exclude за принципом ТА', () => {
    const example = [{ "name": "John", "email": "john2@mail.com" },
  { "name": "John", "email": "john1@mail.com" },
  { "name": "Jane", "email": "jane@mail.com" }];
    const conditions = {
      exclude: [{ name: "John", email: "john2@mail.com" }],
    };
    const expectedResult = [
      { name: "John", email: "john1@mail.com" },
      { name: "Jane", email: "jane@mail.com" },
    ];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });

  test('Дозволяє додати і використати новий обробник', () => {
    const example = [{ name: 'John', email: 'john1@mail.com' }, { name: 'Jane', email: 'jane@mail.com', extended: true }];
    const conditions = [{ name: 'John' }, { exclude: { name: 'Jane', extended: true } }];
    const expectedResult = [{ name: 'John', email: 'john1@mail.com' }];
    const result = functions.runHandlers(example, conditions);
    expect(result).toStrictEqual(expectedResult);
  });
});