/* * Copyright (C) 2023 StApps * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ /* eslint-disable @typescript-eslint/no-namespace,@typescript-eslint/no-explicit-any */ import type {Component} from '@angular/core'; import { interceptBackend, interceptConfig, interceptGet, interceptMultiSearch, interceptSearch, } from './commands/backend'; import {component, ng, runInsideAngular, zone} from './commands/angular'; import { clearAllSettings, getAllSettings, getSetting, setLocalConfig, setSettings, storage, } from './commands/settings'; import {patchSearchPage} from './commands/patches'; const commands = { interceptConfig, interceptBackend, interceptSearch, interceptMultiSearch, interceptGet, storage, setLocalConfig, setSettings, getSetting, clearAllSettings, getAllSettings, patchSearchPage, ng, zone, }; const childCommands = { component, runInsideAngular, }; Cypress.Commands.addAll(commands); Cypress.Commands.addAll({prevSubject: true}, childCommands); declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { // items that include generics also have to be defined here separately // eslint-disable-next-line @typescript-eslint/no-empty-interface interface Chainable extends CustomCommands, CustomChildCommands { component(): Cypress.Chainable; runInsideAngular(zoneAwareTask: (subject: T) => U): Cypress.Chainable; } } } type CustomCommands = { [KEY in keyof typeof commands]: ( ...parameters: Parameters<(typeof commands)[KEY]> ) => ChainableReturnType<(typeof commands)[KEY]>; }; type OmitFirstArgument = F extends (x: any, ...arguments_: infer P) => infer R ? (...arguments_: P) => R : never; type CustomChildCommands = { [KEY in keyof typeof childCommands]: OmitFirstArgument<(typeof childCommands)[KEY]>; }; type ChainableReturnType any> = ReturnType extends Cypress.Chainable ? ReturnType : Cypress.Chainable;