diff --git a/bun.lock b/bun.lock index f138d73..90df392 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,6 @@ "": { "name": "soccerbot", "dependencies": { - "cross-fetch": "^4.1.0", "node-html-parser": "^9.0.0", }, "devDependencies": { @@ -20,7 +19,7 @@ "husky": "^9.1.7", "lint-staged": "^17.2.0", "prettier": "^3.9.6", - "quick-commitlint": "^0.1.0", + "quick-commitlint": "^0.1.1", "rimraf": "^6.1.3", "tsc-watch": "^7.2.1", "typescript": "^6.0.3", @@ -211,8 +210,6 @@ "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], @@ -405,8 +402,6 @@ "node-cleanup": ["node-cleanup@2.1.2", "", {}, "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw=="], - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" } }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "node-html-parser": ["node-html-parser@9.0.0", "", { "dependencies": { "css-select": "^5.1.0", "entities": "^8.0.0" } }, "sha512-MhdaHPyxnyYu/sf0TpiRvDnTrkum0UKHC7FdbDGIUQNlx3I7xzwXoyV0eMUMv/XU+lkJT1glOUzpDPq7b2p1Ew=="], "noms": ["noms@0.0.0", "", { "dependencies": { "inherits": "^2.0.1", "readable-stream": "~1.0.31" } }, "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow=="], @@ -455,7 +450,7 @@ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "quick-commitlint": ["quick-commitlint@0.1.0", "", { "bin": { "quick-commitlint": "bin/quick-commitlint.js" } }, "sha512-yfTXZKaTr+B72XoMy4inXSM2oaHtrkwbZ2/QTpEExg5Kp6yvxSHIA9QD1tF6GLj6OmDDYQm4hnBM4SJDHTSlqg=="], + "quick-commitlint": ["quick-commitlint@0.1.1", "", { "bin": { "quick-commitlint": "bin/quick-commitlint.js" } }, "sha512-fjOLk3OQzLKawHUeLz6f7+/nlVYtAocoZ41vyIUHdi6oUuehhlax83oh/7hY0GgAu3gJbsPH9qCkEcBjWnzS5w=="], "readable-stream": ["readable-stream@1.0.34", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg=="], @@ -511,8 +506,6 @@ "tinyrainbow": ["tinyrainbow@3.1.0", "", {}, "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw=="], - "tr46": ["tr46@0.0.3", "", {}, "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="], - "ts-api-utils": ["ts-api-utils@2.5.0", "", {}, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], "tsc-watch": ["tsc-watch@7.2.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "node-cleanup": "^2.1.2", "ps-tree": "^1.2.0", "string-argv": "^0.3.2" }, "bin": { "tsc-watch": "dist/lib/tsc-watch.js" } }, "sha512-FcntBnz5bXGQ/q265acfDzU7xi6R/sgwMokI+Iu293n14Wu8ovAtcwqNfU9vv/DM1THlnmmxatSSyGOvWsSblg=="], @@ -541,10 +534,6 @@ "vitest": ["vitest@4.1.10", "", { "dependencies": { "@vitest/expect": "4.1.10", "@vitest/mocker": "4.1.10", "@vitest/pretty-format": "4.1.10", "@vitest/runner": "4.1.10", "@vitest/snapshot": "4.1.10", "@vitest/spy": "4.1.10", "@vitest/utils": "4.1.10", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "./vitest.mjs" } }, "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="], - - "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha1-lmRU6HZUYuN2RNNib2dCzotwll0="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], diff --git a/package.json b/package.json index f6786cd..1971b17 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "registry": "https://registry.npmjs.org" }, "dependencies": { - "cross-fetch": "^4.1.0", "node-html-parser": "^9.0.0" }, "devDependencies": { @@ -67,7 +66,7 @@ "husky": "^9.1.7", "lint-staged": "^17.2.0", "prettier": "^3.9.6", - "quick-commitlint": "^0.1.0", + "quick-commitlint": "^0.1.1", "rimraf": "^6.1.3", "tsc-watch": "^7.2.1", "typescript": "^6.0.3", diff --git a/src/clients/shared/index.ts b/src/clients/shared/index.ts index 30993d5..05c876a 100644 --- a/src/clients/shared/index.ts +++ b/src/clients/shared/index.ts @@ -1,4 +1,3 @@ -import fetch from 'cross-fetch'; import { SoccerBotPlayer, SoccerBotResponse, SoccerBotTeam } from '../../shared/interfaces'; // see: https://www.whatismybrowser.com/guides/the-latest-user-agent/chrome @@ -28,7 +27,7 @@ export abstract class SoccerBotClient { const headers = { 'User-Agent': userAgent || this.userAgents[Math.floor(Math.random() * this.userAgents.length)] }; - const response = await fetch(url, { headers }); + const response = await globalThis.fetch(url, { headers }); if (response.status >= 400 && response.status < 600) { throw new Error(`Bad response ${response.status} for url: ${url}`); } diff --git a/test/client/shared.spec.ts b/test/client/shared.spec.ts index 61b1e83..04d149b 100644 --- a/test/client/shared.spec.ts +++ b/test/client/shared.spec.ts @@ -1,10 +1,7 @@ -import fetch from 'cross-fetch'; import { vi } from 'vitest'; import { SoccerBotClient, UserAgents } from '../../src/clients/shared'; import { SoccerBotPlayer, SoccerBotResponse, SoccerBotTeam } from '../../src/shared/interfaces'; -vi.mock('cross-fetch', () => ({ default: vi.fn() })); - class TestClient extends SoccerBotClient { public async league(): Promise> { return { ok: true, data: [] }; @@ -20,15 +17,17 @@ class TestClient extends SoccerBotClient { } describe('SoccerBotClient', () => { - const fetchMock = vi.mocked(fetch); + const fetchMock = vi.fn(); let client: TestClient; beforeEach(() => { client = new TestClient(); fetchMock.mockReset(); + vi.stubGlobal('fetch', fetchMock); }); afterEach(() => { + vi.unstubAllGlobals(); vi.restoreAllMocks(); });