From 4cc9f343971ec7319af7c488746df426c1efcca5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 10:36:40 +0100 Subject: [PATCH] chore(deps-dev): bump msw from 1.3.2 to 2.1.5 (#260) * chore(deps-dev): bump msw from 1.3.2 to 2.1.5 Bumps [msw](https://github.com/mswjs/msw) from 1.3.2 to 2.1.5. - [Release notes](https://github.com/mswjs/msw/releases) - [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md) - [Commits](https://github.com/mswjs/msw/compare/v1.3.2...v2.1.5) --- updated-dependencies: - dependency-name: msw dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * migrate using codemod --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Lion Ralfs --- package-lock.json | 763 +++++++-------------------- package.json | 2 +- test/integration/client.test.ts | 156 +++--- test/integration/collection.test.ts | 113 ++-- test/integration/database.test.ts | 178 ++++--- test/integration/error.test.ts | 8 +- test/integration/inventory.test.ts | 131 +++-- test/integration/lists.test.ts | 16 +- test/integration/marketplace.test.ts | 118 +++-- test/integration/oauth.test.ts | 35 +- test/integration/user.test.ts | 46 +- test/integration/wantlist.test.ts | 32 +- 12 files changed, 648 insertions(+), 950 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58bd312..9a0f5f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "eslint": "^8.26.0", "husky": "^9.0.7", "lint-staged": "^15.2.0", - "msw": "^1.3.2", + "msw": "^2.1.5", "np": "^9.2.0", "prettier": "^3.0.0", "typescript": "^5.2.2", @@ -265,6 +265,24 @@ "types-pkg-json": "^1.1.0" } }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", + "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "dependencies": { + "statuses": "^2.0.1" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", @@ -829,35 +847,29 @@ } }, "node_modules/@mswjs/cookies": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.2.2.tgz", - "integrity": "sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", + "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", "dev": true, - "dependencies": { - "@types/set-cookie-parser": "^2.4.0", - "set-cookie-parser": "^2.4.6" - }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/@mswjs/interceptors": { - "version": "0.17.10", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.17.10.tgz", - "integrity": "sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw==", + "version": "0.25.15", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.15.tgz", + "integrity": "sha512-s4jdyxmq1eeftfDXJ7MUiK/jlvYaU8Sr75+42hHCVBrYez0k51RHbMitKIKdmsF92Q6gwhp8Sm1MmvdA9llpcg==", "dev": true, "dependencies": { - "@open-draft/until": "^1.0.3", - "@types/debug": "^4.1.7", - "@xmldom/xmldom": "^0.8.3", - "debug": "^4.3.3", - "headers-polyfill": "3.2.5", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", "outvariant": "^1.2.1", - "strict-event-emitter": "^0.2.4", - "web-encoding": "^1.1.5" + "strict-event-emitter": "^0.5.1" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/@nodelib/fs.scandir": { @@ -895,10 +907,26 @@ "node": ">= 8" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, "node_modules/@open-draft/until": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", - "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", "dev": true }, "node_modules/@pnpm/config.env-replace": { @@ -1183,20 +1211,11 @@ } }, "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -1215,12 +1234,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "node_modules/@types/js-levenshtein": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", - "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", - "dev": true - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1236,12 +1249,6 @@ "@types/node": "*" } }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, "node_modules/@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", @@ -1269,14 +1276,11 @@ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, - "node_modules/@types/set-cookie-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", - "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } + "node_modules/@types/statuses": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz", + "integrity": "sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==", + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.19.0", @@ -1629,22 +1633,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "dev": true, - "optional": true - }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -1820,18 +1808,6 @@ "node": "*" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2187,9 +2163,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -2557,9 +2533,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, "engines": { "node": ">= 0.6" @@ -3204,15 +3180,6 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -3449,15 +3416,6 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -3823,21 +3781,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-yarn": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", @@ -3863,9 +3806,9 @@ } }, "node_modules/headers-polyfill": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", - "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", + "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==", "dev": true }, "node_modules/hosted-git-info": { @@ -4482,22 +4425,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4516,18 +4443,6 @@ "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -4573,21 +4488,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4777,21 +4677,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -4917,15 +4802,6 @@ "node": ">=8" } }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6233,44 +6109,43 @@ "dev": true }, "node_modules/msw": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/msw/-/msw-1.3.2.tgz", - "integrity": "sha512-wKLhFPR+NitYTkQl5047pia0reNGgf0P6a1eTnA5aNlripmiz0sabMvvHcicE8kQ3/gZcI0YiPFWmYfowfm3lA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.1.5.tgz", + "integrity": "sha512-r39AZk4taMmUEYwtzDAgFy38feqJy1yaKykvo0QE8q7H7c28yH/WIlOmE7oatjkC3dMgpTYfND8MaxeywgU+Yg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.17.10", - "@open-draft/until": "^1.0.3", - "@types/cookie": "^0.4.1", - "@types/js-levenshtein": "^1.1.1", - "chalk": "^4.1.1", + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@mswjs/cookies": "^1.1.0", + "@mswjs/interceptors": "^0.25.15", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", "chokidar": "^3.4.2", - "cookie": "^0.4.2", "graphql": "^16.8.1", - "headers-polyfill": "3.2.5", + "headers-polyfill": "^4.0.2", "inquirer": "^8.2.0", "is-node-process": "^1.2.0", - "js-levenshtein": "^1.1.6", - "node-fetch": "^2.6.7", - "outvariant": "^1.4.0", + "outvariant": "^1.4.2", "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.4.3", - "type-fest": "^2.19.0", - "yargs": "^17.3.1" + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" }, "bin": { "msw": "cli/index.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mswjs" }, "peerDependencies": { - "typescript": ">= 4.4.x <= 5.2.x" + "typescript": ">= 4.7.x <= 5.3.x" }, "peerDependenciesMeta": { "typescript": { @@ -6278,32 +6153,18 @@ } } }, - "node_modules/msw/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/msw/node_modules/type-fest": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=16" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/msw/node_modules/strict-event-emitter": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", - "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", - "dev": true - }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -8071,12 +7932,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", - "dev": true - }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -8230,6 +8085,15 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", @@ -8237,13 +8101,10 @@ "dev": true }, "node_modules/strict-event-emitter": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", - "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", - "dev": true, - "dependencies": { - "events": "^3.3.0" - } + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true }, "node_modules/string_decoder": { "version": "1.3.0", @@ -8494,12 +8355,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -8703,19 +8558,6 @@ "punycode": "^2.1.0" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9405,18 +9247,6 @@ "defaults": "^1.0.3" } }, - "node_modules/web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dev": true, - "dependencies": { - "util": "^0.12.3" - }, - "optionalDependencies": { - "@zxing/text-encoding": "0.9.0" - } - }, "node_modules/web-streams-polyfill": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", @@ -9425,22 +9255,6 @@ "node": ">= 8" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9456,25 +9270,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -9869,6 +9664,24 @@ "types-pkg-json": "^1.1.0" } }, + "@bundled-es-modules/cookie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", + "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "dev": true, + "requires": { + "cookie": "^0.5.0" + } + }, + "@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "requires": { + "statuses": "^2.0.1" + } + }, "@esbuild/aix-ppc64": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", @@ -10169,29 +9982,23 @@ } }, "@mswjs/cookies": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.2.2.tgz", - "integrity": "sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==", - "dev": true, - "requires": { - "@types/set-cookie-parser": "^2.4.0", - "set-cookie-parser": "^2.4.6" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", + "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", + "dev": true }, "@mswjs/interceptors": { - "version": "0.17.10", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.17.10.tgz", - "integrity": "sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw==", + "version": "0.25.15", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.25.15.tgz", + "integrity": "sha512-s4jdyxmq1eeftfDXJ7MUiK/jlvYaU8Sr75+42hHCVBrYez0k51RHbMitKIKdmsF92Q6gwhp8Sm1MmvdA9llpcg==", "dev": true, "requires": { - "@open-draft/until": "^1.0.3", - "@types/debug": "^4.1.7", - "@xmldom/xmldom": "^0.8.3", - "debug": "^4.3.3", - "headers-polyfill": "3.2.5", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", "outvariant": "^1.2.1", - "strict-event-emitter": "^0.2.4", - "web-encoding": "^1.1.5" + "strict-event-emitter": "^0.5.1" } }, "@nodelib/fs.scandir": { @@ -10220,10 +10027,26 @@ "fastq": "^1.6.0" } }, + "@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "requires": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, "@open-draft/until": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", - "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", "dev": true }, "@pnpm/config.env-replace": { @@ -10402,20 +10225,11 @@ } }, "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, - "@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "requires": { - "@types/ms": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -10434,12 +10248,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "@types/js-levenshtein": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", - "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", - "dev": true - }, "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -10455,12 +10263,6 @@ "@types/node": "*" } }, - "@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, "@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", @@ -10488,14 +10290,11 @@ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, - "@types/set-cookie-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", - "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", - "dev": true, - "requires": { - "@types/node": "*" - } + "@types/statuses": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz", + "integrity": "sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==", + "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "6.19.0", @@ -10724,19 +10523,6 @@ "pretty-format": "^29.7.0" } }, - "@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true - }, - "@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "dev": true, - "optional": true - }, "acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", @@ -10860,12 +10646,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -11104,9 +10884,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -11370,9 +11150,9 @@ "dev": true }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "cosmiconfig": { @@ -11832,12 +11612,6 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, "execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -12005,15 +11779,6 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, "form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -12266,15 +12031,6 @@ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "has-yarn": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", @@ -12291,9 +12047,9 @@ } }, "headers-polyfill": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.5.tgz", - "integrity": "sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", + "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==", "dev": true }, "hosted-git-info": { @@ -12755,16 +12511,6 @@ } } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12780,12 +12526,6 @@ "binary-extensions": "^2.0.0" } }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, "is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -12813,15 +12553,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -12941,15 +12672,6 @@ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -13035,12 +12757,6 @@ "istanbul-lib-report": "^3.0.0" } }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -14006,45 +13722,35 @@ "dev": true }, "msw": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/msw/-/msw-1.3.2.tgz", - "integrity": "sha512-wKLhFPR+NitYTkQl5047pia0reNGgf0P6a1eTnA5aNlripmiz0sabMvvHcicE8kQ3/gZcI0YiPFWmYfowfm3lA==", - "dev": true, - "requires": { - "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.17.10", - "@open-draft/until": "^1.0.3", - "@types/cookie": "^0.4.1", - "@types/js-levenshtein": "^1.1.1", - "chalk": "^4.1.1", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.1.5.tgz", + "integrity": "sha512-r39AZk4taMmUEYwtzDAgFy38feqJy1yaKykvo0QE8q7H7c28yH/WIlOmE7oatjkC3dMgpTYfND8MaxeywgU+Yg==", + "dev": true, + "requires": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@mswjs/cookies": "^1.1.0", + "@mswjs/interceptors": "^0.25.15", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", "chokidar": "^3.4.2", - "cookie": "^0.4.2", "graphql": "^16.8.1", - "headers-polyfill": "3.2.5", + "headers-polyfill": "^4.0.2", "inquirer": "^8.2.0", "is-node-process": "^1.2.0", - "js-levenshtein": "^1.1.6", - "node-fetch": "^2.6.7", - "outvariant": "^1.4.0", + "outvariant": "^1.4.2", "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.4.3", - "type-fest": "^2.19.0", - "yargs": "^17.3.1" + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" }, "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "strict-event-emitter": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", - "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "type-fest": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true } } @@ -15239,12 +14945,6 @@ "semver": "^7.3.5" } }, - "set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", - "dev": true - }, "set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -15364,6 +15064,12 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, "std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", @@ -15371,13 +15077,10 @@ "dev": true }, "strict-event-emitter": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", - "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", - "dev": true, - "requires": { - "events": "^3.3.0" - } + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true }, "string_decoder": { "version": "1.3.0", @@ -15558,12 +15261,6 @@ "is-number": "^7.0.0" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, "ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -15712,19 +15409,6 @@ "punycode": "^2.1.0" } }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -16076,37 +15760,11 @@ "defaults": "^1.0.3" } }, - "web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dev": true, - "requires": { - "@zxing/text-encoding": "0.9.0", - "util": "^0.12.3" - } - }, "web-streams-polyfill": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -16116,19 +15774,6 @@ "isexe": "^2.0.0" } }, - "which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, "why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", diff --git a/package.json b/package.json index 18938a2..05e9fc3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "eslint": "^8.26.0", "husky": "^9.0.7", "lint-staged": "^15.2.0", - "msw": "^1.3.2", + "msw": "^2.1.5", "np": "^9.2.0", "prettier": "^3.0.0", "typescript": "^5.2.2", diff --git a/test/integration/client.test.ts b/test/integration/client.test.ts index de36a9a..5a4de51 100644 --- a/test/integration/client.test.ts +++ b/test/integration/client.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,8 +8,8 @@ const server = setupMockAPI(); describe('DiscogsClient', () => { test('get()', async () => { server.use( - rest.get('https://api.discogs.com/labels/1', (req, res, ctx) => { - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/labels/1', () => { + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -19,8 +19,8 @@ describe('DiscogsClient', () => { test('Custom configuration', async () => { server.use( - rest.get('https://www.example.com/labels/1', (req, res, ctx) => { - return res(ctx.status(200), ctx.json({})); + http.get('https://www.example.com/labels/1', () => { + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient().setConfig({ host: 'www.example.com' }); @@ -30,9 +30,9 @@ describe('DiscogsClient', () => { test('Media Types (none, default)', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - expect(req.headers.get('Accept')).toBe('application/vnd.discogs.v2.discogs+json'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com', ({ request }) => { + expect(request.headers.get('Accept')).toBe('application/vnd.discogs.v2.discogs+json'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -41,9 +41,9 @@ describe('DiscogsClient', () => { test('Media Types (html)', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - expect(req.headers.get('Accept')).toBe('application/vnd.discogs.v2.html+json'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com', ({ request }) => { + expect(request.headers.get('Accept')).toBe('application/vnd.discogs.v2.html+json'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient().setConfig({ outputFormat: 'html' }); @@ -52,9 +52,9 @@ describe('DiscogsClient', () => { test('Media Types (plaintext)', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - expect(req.headers.get('Accept')).toBe('application/vnd.discogs.v2.plaintext+json'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com', ({ request }) => { + expect(request.headers.get('Accept')).toBe('application/vnd.discogs.v2.plaintext+json'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient().setConfig({ outputFormat: 'plaintext' }); @@ -63,11 +63,11 @@ describe('DiscogsClient', () => { test('User Agent (default)', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - expect(req.headers.get('User-Agent')).toMatch( + http.get('https://api.discogs.com', ({ request }) => { + expect(request.headers.get('User-Agent')).toMatch( /^@lionralfs\/discogs-client\/dev \+https:\/\/github\.com\/(.+)$/ ); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -76,9 +76,9 @@ describe('DiscogsClient', () => { test('User Agent (custom)', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - expect(req.headers.get('User-Agent')).toBe('MyDiscogsClient/1.0 +https://example.org'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com', ({ request }) => { + expect(request.headers.get('User-Agent')).toBe('MyDiscogsClient/1.0 +https://example.org'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ userAgent: 'MyDiscogsClient/1.0 +https://example.org' }); @@ -87,9 +87,9 @@ describe('DiscogsClient', () => { test('Auth (userToken)', async () => { server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { - expect(req.headers.get('Authorization')).toBe('Discogs token=testtoken12345'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/oauth/identity', ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Discogs token=testtoken12345'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -98,9 +98,9 @@ describe('DiscogsClient', () => { test('Sends OAuth header', async () => { server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { - expect(req.headers.get('Authorization')?.startsWith('OAuth ')); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/oauth/identity', ({ request }) => { + expect(request.headers.get('Authorization')?.startsWith('OAuth ')); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -119,16 +119,18 @@ describe('DiscogsClient', () => { test('Retrieves and passes rate limit info to caller', async () => { server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { - expect(req.headers.get('Authorization')?.startsWith('OAuth ')); - return res( - ctx.status(200), - ctx.json({}), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '23', - 'X-Discogs-Ratelimit-Remaining': '37', - }) + http.get('https://api.discogs.com/oauth/identity', ({ request }) => { + expect(request.headers.get('Authorization')?.startsWith('OAuth ')); + return HttpResponse.json( + {}, + { + status: 200, + headers: { + 'X-Discogs-Ratelimit': '60', + 'X-Discogs-Ratelimit-Used': '23', + 'X-Discogs-Ratelimit-Remaining': '37', + }, + } ); }) ); @@ -150,26 +152,30 @@ describe('DiscogsClient', () => { test('Retries when rate limited', async () => { let n = 0; server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { + http.get('https://api.discogs.com/oauth/identity', () => { if (n++ == 0) { - return res( - ctx.status(429), - ctx.json({ message: "you're rate limited" }), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '60', - 'X-Discogs-Ratelimit-Remaining': '0', - }) + return HttpResponse.json( + { message: "you're rate limited" }, + { + status: 429, + headers: { + 'X-Discogs-Ratelimit': '60', + 'X-Discogs-Ratelimit-Used': '60', + 'X-Discogs-Ratelimit-Remaining': '0', + }, + } ); } else { - return res( - ctx.status(200), - ctx.json({ message: "you're good" }), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '59', - 'X-Discogs-Ratelimit-Remaining': '1', - }) + return HttpResponse.json( + { message: "you're good" }, + { + status: 200, + headers: { + 'X-Discogs-Ratelimit': '60', + 'X-Discogs-Ratelimit-Used': '59', + 'X-Discogs-Ratelimit-Remaining': '1', + }, + } ); } }) @@ -195,27 +201,11 @@ describe('DiscogsClient', () => { test('Throws when retrying but end of retries is reached', async () => { let n = 0; server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { + http.get('https://api.discogs.com/oauth/identity', () => { if (n++ == 0) { - return res( - ctx.status(429), - ctx.json({ message: "you're rate limited 1" }), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '60', - 'X-Discogs-Ratelimit-Remaining': '0', - }) - ); + return HttpResponse.json({ message: "you're rate limited 1" }, { status: 429 }); } else { - return res( - ctx.status(429), - ctx.json({ message: "you're rate limited 2" }), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '60', - 'X-Discogs-Ratelimit-Remaining': '0', - }) - ); + return HttpResponse.json({ message: "you're rate limited 2" }, { status: 429 }); } }) ); @@ -232,20 +222,22 @@ describe('DiscogsClient', () => { test('Should return client and server info in about call', async () => { server.use( - rest.get('https://api.discogs.com', (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ + http.get('https://api.discogs.com', () => { + return HttpResponse.json( + { hello: 'Welcome to the Discogs API.', api_version: 'v2', documentation_url: 'http://www.discogs.com/developers/', statistics: { releases: 16327979, artists: 8602060, labels: 1991222 }, - }), - ctx.set({ - 'X-Discogs-Ratelimit': '60', - 'X-Discogs-Ratelimit-Used': '59', - 'X-Discogs-Ratelimit-Remaining': '1', - }) + }, + { + status: 200, + headers: { + 'X-Discogs-Ratelimit': '60', + 'X-Discogs-Ratelimit-Used': '59', + 'X-Discogs-Ratelimit-Remaining': '1', + }, + } ); }) ); diff --git a/test/integration/collection.test.ts b/test/integration/collection.test.ts index 1263790..bbd4419 100644 --- a/test/integration/collection.test.ts +++ b/test/integration/collection.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,9 +8,9 @@ const server = setupMockAPI(); describe('Collection', () => { test('Get all folders', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/folders', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/users/rodneyfool/collection/folders', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -19,9 +19,11 @@ describe('Collection', () => { test('Test folder creation', async () => { server.use( - rest.post('https://api.discogs.com/users/rodneyfool/collection/folders', (req, res, ctx) => { - expect(req.body).toStrictEqual({ name: 'My favorites' }); - return res(ctx.status(200), ctx.json({})); + http.post('https://api.discogs.com/users/rodneyfool/collection/folders', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ name: 'My favorites' }); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -30,9 +32,9 @@ describe('Collection', () => { test('Get folder metadata', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/folders/3', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({ id: 1337 })); + http.get('https://api.discogs.com/users/rodneyfool/collection/folders/3', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({ id: 1337 }, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -41,9 +43,9 @@ describe('Collection', () => { test('Get folder metadata (no auth required for public folder)', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/folders/0', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({ id: 1337 })); + http.get('https://api.discogs.com/users/rodneyfool/collection/folders/0', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({ id: 1337 }, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -52,9 +54,11 @@ describe('Collection', () => { test('Edit folder name', async () => { server.use( - rest.post('https://api.discogs.com/users/rodneyfool/collection/folders/3', (req, res, ctx) => { - expect(req.body).toStrictEqual({ name: 'New Name' }); - return res(ctx.status(200), ctx.json({})); + http.post('https://api.discogs.com/users/rodneyfool/collection/folders/3', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ name: 'New Name' }); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -63,9 +67,9 @@ describe('Collection', () => { test('Delete folder', async () => { server.use( - rest.delete('https://api.discogs.com/users/rodneyfool/collection/folders/3', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204)); + http.delete('https://api.discogs.com/users/rodneyfool/collection/folders/3', ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -74,9 +78,9 @@ describe('Collection', () => { test('Get instances of release in collection', async () => { server.use( - rest.get('https://api.discogs.com/users/susan.salkeld/collection/releases/7781525', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200)); + http.get('https://api.discogs.com/users/susan.salkeld/collection/releases/7781525', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json(null, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -85,12 +89,14 @@ describe('Collection', () => { test('Collection items by folder', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/folders/3/releases', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/collection/folders/3/releases', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['sort', 'artist'], ['sort_order', 'desc'], ]); - return res(ctx.status(200)); + return HttpResponse.json(null, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -99,12 +105,14 @@ describe('Collection', () => { test('Collection items by folder (default doesnt need auth)', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/folders/0/releases', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/collection/folders/0/releases', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['sort', 'artist'], ['sort_order', 'desc'], ]); - return res(ctx.status(200)); + return HttpResponse.json(null, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -113,11 +121,11 @@ describe('Collection', () => { test('Add release to folder', async () => { server.use( - rest.post( + http.post( 'https://api.discogs.com/users/rodneyfool/collection/folders/3/releases/130076', - (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(201)); + ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json(null, { status: 201 }); } ) ); @@ -127,11 +135,11 @@ describe('Collection', () => { test('Edit release', async () => { server.use( - rest.post( + http.post( 'https://api.discogs.com/users/rodneyfool/collection/folders/4/releases/130076/instances/1', - (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204)); + ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); } ) ); @@ -141,11 +149,11 @@ describe('Collection', () => { test('Delete release from folder', async () => { server.use( - rest.delete( + http.delete( 'https://api.discogs.com/users/rodneyfool/collection/folders/3/releases/130076/instances/1', - (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204)); + ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); } ) ); @@ -155,9 +163,9 @@ describe('Collection', () => { test('Get collection note fields', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/fields', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200)); + http.get('https://api.discogs.com/users/rodneyfool/collection/fields', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json(null, { status: 200 }); }) ); const client = new DiscogsClient(); @@ -166,12 +174,15 @@ describe('Collection', () => { test('Update note on instance', async () => { server.use( - rest.post( + http.post( 'https://api.discogs.com/users/rodneyfool/collection/folders/3/releases/130076/instances/1/fields/8', - (req, res, ctx) => { - expect(req.url.searchParams.get('value')).toBe('foo'); - expect(req.body).toBe(''); - return res(ctx.status(204)); + async ({ request }) => { + const body = await request.text(); + const url = new URL(request.url); + + expect(url.searchParams.get('value')).toBe('foo'); + expect(body).toBe(''); + return new Response(null, { status: 204 }); } ) ); @@ -181,9 +192,9 @@ describe('Collection', () => { test('Get collection value', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/collection/value', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204)); + http.get('https://api.discogs.com/users/rodneyfool/collection/value', ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); diff --git a/test/integration/database.test.ts b/test/integration/database.test.ts index 4e0864a..e68c955 100644 --- a/test/integration/database.test.ts +++ b/test/integration/database.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,12 +8,14 @@ const server = setupMockAPI(); describe('Database', () => { test('Test search without query but with params', async () => { server.use( - rest.get('https://api.discogs.com/database/search', (req, res, ctx) => { - expect([...req.url.searchParams.entries()].length).toBe(2); - expect(req.url.searchParams.get('artist')).toBe('X'); - expect(req.url.searchParams.get('title')).toBe('Y'); + http.get('https://api.discogs.com/database/search', ({ request }) => { + const url = new URL(request.url); - return res(ctx.status(200), ctx.json({})); + expect([...url.searchParams.entries()].length).toBe(2); + expect(url.searchParams.get('artist')).toBe('X'); + expect(url.searchParams.get('title')).toBe('Y'); + + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -22,13 +24,15 @@ describe('Database', () => { test('Test search with query and params', async () => { server.use( - rest.get('https://api.discogs.com/database/search', (req, res, ctx) => { - expect([...req.url.searchParams.entries()].length).toBe(3); - expect(req.url.searchParams.get('q')).toBe('somequery'); - expect(req.url.searchParams.get('artist')).toBe('X'); - expect(req.url.searchParams.get('title')).toBe('Y'); + http.get('https://api.discogs.com/database/search', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()].length).toBe(3); + expect(url.searchParams.get('q')).toBe('somequery'); + expect(url.searchParams.get('artist')).toBe('X'); + expect(url.searchParams.get('title')).toBe('Y'); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -37,10 +41,12 @@ describe('Database', () => { test('Test search with query only', async () => { server.use( - rest.get('https://api.discogs.com/database/search', (req, res, ctx) => { - expect([...req.url.searchParams.entries()].length).toBe(1); - expect(req.url.searchParams.get('q')).toBe('somequery'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/database/search', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()].length).toBe(1); + expect(url.searchParams.get('q')).toBe('somequery'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -49,27 +55,29 @@ describe('Database', () => { test('Test with every option', async () => { server.use( - rest.get('https://api.discogs.com/database/search', (req, res, ctx) => { - expect([...req.url.searchParams.entries()].length).toBe(18); - expect(req.url.searchParams.get('q')).toBe('nirvana'); - expect(req.url.searchParams.get('type')).toBe('release'); - expect(req.url.searchParams.get('title')).toBe('nirvana - nevermind'); - expect(req.url.searchParams.get('release_title')).toBe('nevermind'); - expect(req.url.searchParams.get('credit')).toBe('kurt'); - expect(req.url.searchParams.get('artist')).toBe('nirvana'); - expect(req.url.searchParams.get('anv')).toBe('nirvana'); - expect(req.url.searchParams.get('label')).toBe('dgc'); - expect(req.url.searchParams.get('genre')).toBe('rock'); - expect(req.url.searchParams.get('style')).toBe('grunge'); - expect(req.url.searchParams.get('country')).toBe('canada'); - expect(req.url.searchParams.get('year')).toBe('1991'); - expect(req.url.searchParams.get('format')).toBe('album'); - expect(req.url.searchParams.get('catno')).toBe('DGCD-24425'); - expect(req.url.searchParams.get('barcode')).toBe('7 2064-24425-2 4'); - expect(req.url.searchParams.get('track')).toBe('smells like teen spirit'); - expect(req.url.searchParams.get('submitter')).toBe('milKt'); - expect(req.url.searchParams.get('contributor')).toBe('jerome99'); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/database/search', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()].length).toBe(18); + expect(url.searchParams.get('q')).toBe('nirvana'); + expect(url.searchParams.get('type')).toBe('release'); + expect(url.searchParams.get('title')).toBe('nirvana - nevermind'); + expect(url.searchParams.get('release_title')).toBe('nevermind'); + expect(url.searchParams.get('credit')).toBe('kurt'); + expect(url.searchParams.get('artist')).toBe('nirvana'); + expect(url.searchParams.get('anv')).toBe('nirvana'); + expect(url.searchParams.get('label')).toBe('dgc'); + expect(url.searchParams.get('genre')).toBe('rock'); + expect(url.searchParams.get('style')).toBe('grunge'); + expect(url.searchParams.get('country')).toBe('canada'); + expect(url.searchParams.get('year')).toBe('1991'); + expect(url.searchParams.get('format')).toBe('album'); + expect(url.searchParams.get('catno')).toBe('DGCD-24425'); + expect(url.searchParams.get('barcode')).toBe('7 2064-24425-2 4'); + expect(url.searchParams.get('track')).toBe('smells like teen spirit'); + expect(url.searchParams.get('submitter')).toBe('milKt'); + expect(url.searchParams.get('contributor')).toBe('jerome99'); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -97,10 +105,11 @@ describe('Database', () => { test('Get release', async () => { server.use( - rest.get('https://api.discogs.com/releases/249504', (req, res, ctx) => { - const params = req.url.searchParams; + http.get('https://api.discogs.com/releases/249504', ({ request }) => { + const url = new URL(request.url); + const params = url.searchParams; expect([...params.entries()].length).toBe(0); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -110,11 +119,12 @@ describe('Database', () => { test('Get release with currency', async () => { server.use( - rest.get('https://api.discogs.com/releases/249504', (req, res, ctx) => { - const params = req.url.searchParams; + http.get('https://api.discogs.com/releases/249504', ({ request }) => { + const url = new URL(request.url); + const params = url.searchParams; expect([...params.entries()].length).toBe(1); expect(params.get('curr_abbr')).toBe('USD'); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -124,9 +134,9 @@ describe('Database', () => { test('Get a users release rating', async () => { server.use( - rest.get('https://api.discogs.com/releases/249504/rating/someuser', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/releases/249504/rating/someuser', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -136,9 +146,11 @@ describe('Database', () => { test('Give release rating as current user', async () => { server.use( - rest.put('https://api.discogs.com/releases/249504/rating/someuser', (req, res, ctx) => { - expect(req.body).toStrictEqual({ rating: 2 }); - return res(ctx.status(200), ctx.json({})); + http.put('https://api.discogs.com/releases/249504/rating/someuser', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ rating: 2 }); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -148,9 +160,11 @@ describe('Database', () => { test('Give release rating as current user (cap at 5)', async () => { server.use( - rest.put('https://api.discogs.com/releases/249504/rating/someuser', (req, res, ctx) => { - expect(req.body).toStrictEqual({ rating: 5 }); - return res(ctx.status(200), ctx.json({})); + http.put('https://api.discogs.com/releases/249504/rating/someuser', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ rating: 5 }); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -162,9 +176,9 @@ describe('Database', () => { test('Remove release rating as current user', async () => { server.use( - rest.delete('https://api.discogs.com/releases/249504/rating/someuser', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200)); + http.delete('https://api.discogs.com/releases/249504/rating/someuser', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json(null, { status: 200 }); }) ); @@ -174,9 +188,9 @@ describe('Database', () => { test('Get Community Release Rating', async () => { server.use( - rest.get('https://api.discogs.com/releases/249504/rating', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/releases/249504/rating', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -186,9 +200,9 @@ describe('Database', () => { test('Get Release Stats', async () => { server.use( - rest.get('https://api.discogs.com/releases/249504/stats', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/releases/249504/stats', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -198,9 +212,9 @@ describe('Database', () => { test('Get Master Release', async () => { server.use( - rest.get('https://api.discogs.com/masters/1000', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/masters/1000', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -210,8 +224,10 @@ describe('Database', () => { test('Get Master Release Versions', async () => { server.use( - rest.get('https://api.discogs.com/masters/1000/versions', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/masters/1000/versions', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['per_page', '25'], ['format', 'Vinyl'], @@ -221,7 +237,7 @@ describe('Database', () => { ['sort', 'released'], ['sort_order', 'asc'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -240,9 +256,9 @@ describe('Database', () => { test('Get Artist', async () => { server.use( - rest.get('https://api.discogs.com/artists/108713', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/artists/108713', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -252,13 +268,15 @@ describe('Database', () => { test('Get Artist Releases', async () => { server.use( - rest.get('https://api.discogs.com/artists/108713/releases', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/artists/108713/releases', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['sort', 'year'], ['sort_order', 'asc'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -268,9 +286,9 @@ describe('Database', () => { test('Get Label', async () => { server.use( - rest.get('https://api.discogs.com/labels/1', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/labels/1', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -280,12 +298,14 @@ describe('Database', () => { test('Get Label Releases', async () => { server.use( - rest.get('https://api.discogs.com/labels/1/releases', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/labels/1/releases', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '3'], ['per_page', '25'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); diff --git a/test/integration/error.test.ts b/test/integration/error.test.ts index c7a2562..00e0342 100644 --- a/test/integration/error.test.ts +++ b/test/integration/error.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { DiscogsError } from '@lib/error.js'; import { setupMockAPI } from './setup.js'; @@ -9,9 +9,9 @@ const server = setupMockAPI(); describe('Error', () => { test('Passed an instance of DiscogsError when bad status code', async () => { server.use( - rest.get('https://api.discogs.com/labels/1123123123123/releases', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(404), ctx.json({ message: 'error message' })); + http.get('https://api.discogs.com/labels/1123123123123/releases', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({ message: 'error message' }, { status: 404 }); }) ); diff --git a/test/integration/inventory.test.ts b/test/integration/inventory.test.ts index ddecb36..e3951d2 100644 --- a/test/integration/inventory.test.ts +++ b/test/integration/inventory.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { Response } from 'node-fetch'; @@ -9,9 +9,9 @@ const server = setupMockAPI(); describe('Inventory', () => { test('Should support requesting an export', async () => { server.use( - rest.post('https://api.discogs.com/inventory/export', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.post('https://api.discogs.com/inventory/export', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -21,31 +21,28 @@ describe('Inventory', () => { test('Should support retrieving recent exports (without pagination params)', async () => { server.use( - rest.get('https://api.discogs.com/inventory/export', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res( - ctx.status(200), - ctx.json({ - items: [ - { - status: 'success', - created_ts: '2018-09-27T12:59:02', - url: 'https://api.discogs.com/inventory/export/599632', - finished_ts: '2018-09-27T12:59:02', - download_url: 'https://api.discogs.com/inventory/export/599632/download', - filename: 'cburmeister-inventory-20180927-1259.csv', - id: 599632, - }, - ], - pagination: { - per_page: 50, - items: 15, - page: 1, - urls: {}, - pages: 1, + http.get('https://api.discogs.com/inventory/export', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({ + items: [ + { + status: 'success', + created_ts: '2018-09-27T12:59:02', + url: 'https://api.discogs.com/inventory/export/599632', + finished_ts: '2018-09-27T12:59:02', + download_url: 'https://api.discogs.com/inventory/export/599632/download', + filename: 'cburmeister-inventory-20180927-1259.csv', + id: 599632, }, - }) - ); + ], + pagination: { + per_page: 50, + items: 15, + page: 1, + urls: {}, + pages: 1, + }, + }, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -55,34 +52,33 @@ describe('Inventory', () => { test('Should support retrieving recent exports (with pagination params)', async () => { server.use( - rest.get('https://api.discogs.com/inventory/export', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/inventory/export', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['per_page', '10'], ]); - return res( - ctx.status(200), - ctx.json({ - items: [ - { - status: 'success', - created_ts: '2018-09-27T12:59:02', - url: 'https://api.discogs.com/inventory/export/599632', - finished_ts: '2018-09-27T12:59:02', - download_url: 'https://api.discogs.com/inventory/export/599632/download', - filename: 'cburmeister-inventory-20180927-1259.csv', - id: 599632, - }, - ], - pagination: { - per_page: 50, - items: 15, - page: 1, - urls: {}, - pages: 1, + return HttpResponse.json({ + items: [ + { + status: 'success', + created_ts: '2018-09-27T12:59:02', + url: 'https://api.discogs.com/inventory/export/599632', + finished_ts: '2018-09-27T12:59:02', + download_url: 'https://api.discogs.com/inventory/export/599632/download', + filename: 'cburmeister-inventory-20180927-1259.csv', + id: 599632, }, - }) - ); + ], + pagination: { + per_page: 50, + items: 15, + page: 1, + urls: {}, + pages: 1, + }, + }, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -92,20 +88,17 @@ describe('Inventory', () => { test('Should support retrieving an export by id', async () => { server.use( - rest.get('https://api.discogs.com/inventory/export/599632', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res( - ctx.status(200), - ctx.json({ - status: 'success', - created_ts: '2018-09-27T12:50:39', - url: 'https://api.discogs.com/inventory/export/599632', - finished_ts: '2018-09-27T12:59:02', - download_url: 'https://api.discogs.com/inventory/export/599632/download', - filename: 'cburmeister-inventory-20180927-1259.csv', - id: 599632, - }) - ); + http.get('https://api.discogs.com/inventory/export/599632', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({ + status: 'success', + created_ts: '2018-09-27T12:50:39', + url: 'https://api.discogs.com/inventory/export/599632', + finished_ts: '2018-09-27T12:59:02', + download_url: 'https://api.discogs.com/inventory/export/599632/download', + filename: 'cburmeister-inventory-20180927-1259.csv', + id: 599632, + }, { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); @@ -115,9 +108,9 @@ describe('Inventory', () => { test('Should support downloading an export by id', async () => { server.use( - rest.get('https://api.discogs.com/inventory/export/599632/download', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.text('some,csv,here')); + http.get('https://api.discogs.com/inventory/export/599632/download', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.text('some,csv,here', { status: 200 }); }) ); const client = new DiscogsClient({ auth: { userToken: 'testtoken12345' } }); diff --git a/test/integration/lists.test.ts b/test/integration/lists.test.ts index 601bb27..e6b0a59 100644 --- a/test/integration/lists.test.ts +++ b/test/integration/lists.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,12 +8,14 @@ const server = setupMockAPI(); describe('Lists', () => { test("Get user's list", async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/lists', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/lists', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '3'], ['per_page', '25'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -23,9 +25,9 @@ describe('Lists', () => { test("Get items from user's list", async () => { server.use( - rest.get('https://api.discogs.com/lists/123', (req, res, ctx) => { - expect(req.method).toBeDefined() - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/lists/123', ({ request }) => { + expect(request.method).toBeDefined() + return HttpResponse.json({}, { status: 200 }); }) ); diff --git a/test/integration/marketplace.test.ts b/test/integration/marketplace.test.ts index c1e97bb..b929c0d 100644 --- a/test/integration/marketplace.test.ts +++ b/test/integration/marketplace.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,9 +8,11 @@ const server = setupMockAPI(); describe('Marketplace', () => { test('Get a listing', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/listings/172723812', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/listings/172723812', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -20,9 +22,11 @@ describe('Marketplace', () => { test('Get a listing (with currency arg)', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/listings/172723812', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([['curr_abbr', 'USD']]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/listings/172723812', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([['curr_abbr', 'USD']]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -32,8 +36,10 @@ describe('Marketplace', () => { test('Edit a listing', async () => { server.use( - rest.post('https://api.discogs.com/marketplace/listings/172723812', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/marketplace/listings/172723812', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ release_id: 1, condition: 'Mint (M)', sleeve_condition: 'Fair (F)', @@ -46,7 +52,7 @@ describe('Marketplace', () => { weight: 200, format_quantity: 'auto', }); - return res(ctx.status(204), ctx.json({})); + return new Response(null, { status: 204 }); }) ); @@ -68,9 +74,9 @@ describe('Marketplace', () => { test('Delete a listing', async () => { server.use( - rest.delete('https://api.discogs.com/marketplace/listings/172723812', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204), ctx.json({})); + http.delete('https://api.discogs.com/marketplace/listings/172723812', ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); }) ); @@ -80,8 +86,10 @@ describe('Marketplace', () => { test('Add a listing', async () => { server.use( - rest.post('https://api.discogs.com/marketplace/listings', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/marketplace/listings', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ release_id: 1, condition: 'Mint (M)', sleeve_condition: 'Fair (F)', @@ -94,7 +102,7 @@ describe('Marketplace', () => { weight: 200, format_quantity: 'auto', }); - return res(ctx.status(201), ctx.json({})); + return HttpResponse.json({}, { status: 201 }); }) ); @@ -116,9 +124,9 @@ describe('Marketplace', () => { test('Get an order', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/orders/1', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/orders/1', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -128,12 +136,14 @@ describe('Marketplace', () => { test('Edit an order', async () => { server.use( - rest.post('https://api.discogs.com/marketplace/orders/1', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/marketplace/orders/1', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ status: 'Shipped', shipping: 10, }); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -143,8 +153,10 @@ describe('Marketplace', () => { test('Get orders', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/orders', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/marketplace/orders', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['status', "Cancelled (Per Buyer's Request)"], ['created_after', '2019-06-24T20:58:58Z'], ['created_before', '2019-06-25T20:58:58Z'], @@ -154,7 +166,7 @@ describe('Marketplace', () => { ['page', '2'], ['per_page', '50'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -173,12 +185,14 @@ describe('Marketplace', () => { test('Get order messages', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/orders/1/messages', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/marketplace/orders/1/messages', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['per_page', '50'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -188,12 +202,14 @@ describe('Marketplace', () => { test('Add message to order', async () => { server.use( - rest.post('https://api.discogs.com/marketplace/orders/1/messages', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/marketplace/orders/1/messages', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ message: 'hello world', status: 'New Order', }); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -203,9 +219,11 @@ describe('Marketplace', () => { test('Get fee without currency', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/fee/10.00', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/fee/10.00', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -215,9 +233,11 @@ describe('Marketplace', () => { test('Get fee with currency', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/fee/10.00/EUR', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/fee/10.00/EUR', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -227,9 +247,11 @@ describe('Marketplace', () => { test('Get price suggestion', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/price_suggestions/1', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/price_suggestions/1', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -239,9 +261,11 @@ describe('Marketplace', () => { test('Get Release Stats without currency', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/stats/1', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/stats/1', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([]); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -251,9 +275,11 @@ describe('Marketplace', () => { test('Get Release Stats with currency', async () => { server.use( - rest.get('https://api.discogs.com/marketplace/stats/1', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([['curr_abbr', 'EUR']]); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/marketplace/stats/1', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([['curr_abbr', 'EUR']]); + return HttpResponse.json({}, { status: 200 }); }) ); diff --git a/test/integration/oauth.test.ts b/test/integration/oauth.test.ts index a9b33fb..fd7402e 100644 --- a/test/integration/oauth.test.ts +++ b/test/integration/oauth.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsError } from '@lib/error.js'; import { DiscogsOAuth } from '@lib/oauth.js'; import { setupMockAPI } from './setup.js'; @@ -9,19 +9,14 @@ const server = setupMockAPI(); describe('OAuth', () => { test('Get a request token', async () => { server.use( - rest.get('https://api.discogs.com/oauth/request_token', (req, res, ctx) => { - expect(req.headers.get('Content-Type')).toBe('application/x-www-form-urlencoded'); - const authHeader = req.headers.get('Authorization'); + http.get('https://api.discogs.com/oauth/request_token', ({ request }) => { + expect(request.headers.get('Content-Type')).toBe('application/x-www-form-urlencoded'); + const authHeader = request.headers.get('Authorization'); expect(authHeader as string).toMatch( /^OAuth oauth_consumer_key="consumer_key", oauth_nonce=".+", oauth_signature="consumer_secret&", oauth_signature_method="PLAINTEXT", oauth_timestamp="\d+", oauth_callback="https%3A%2F%2Fexample.com%2Foauth_callback_endpoint"$/ ); - expect(req.headers.get('User-Agent')?.startsWith('@lionralfs/discogs-client/')); - return res( - ctx.status(200), - ctx.text( - 'oauth_token=some-token&oauth_token_secret=some-token-secret&oauth_callback_confirmed=true' - ) - ); + expect(request.headers.get('User-Agent')?.startsWith('@lionralfs/discogs-client/')); + return HttpResponse.text('oauth_token=some-token&oauth_token_secret=some-token-secret&oauth_callback_confirmed=true', { status: 200 }); }) ); @@ -37,8 +32,8 @@ describe('OAuth', () => { test('Get a request token (error)', async () => { server.use( - rest.get('https://api.discogs.com/oauth/request_token', (req, res, ctx) => { - return res(ctx.status(401), ctx.text('Invalid consumer.')); + http.get('https://api.discogs.com/oauth/request_token', () => { + return HttpResponse.text('Invalid consumer.', { status: 401 }); }) ); @@ -51,14 +46,14 @@ describe('OAuth', () => { test('Get an access token', async () => { server.use( - rest.post('https://api.discogs.com/oauth/access_token', (req, res, ctx) => { - expect(req.headers.get('Content-Type')).toBe('application/x-www-form-urlencoded'); - const authHeader = req.headers.get('Authorization'); + http.post('https://api.discogs.com/oauth/access_token', ({ request }) => { + expect(request.headers.get('Content-Type')).toBe('application/x-www-form-urlencoded'); + const authHeader = request.headers.get('Authorization'); expect(authHeader as string).toMatch( /^OAuth oauth_consumer_key="consumer_key", oauth_nonce=".+", oauth_token="oauth_token_received_from_step_2", oauth_signature="consumer_secret&token_secret", oauth_signature_method="PLAINTEXT", oauth_timestamp="\d+", oauth_verifier="users_verifier"$/ ); - expect(req.headers.get('User-Agent')?.startsWith('@lionralfs/discogs-client/')); - return res(ctx.status(200), ctx.text('oauth_token=abc123&oauth_token_secret=xyz789')); + expect(request.headers.get('User-Agent')?.startsWith('@lionralfs/discogs-client/')); + return HttpResponse.text('oauth_token=abc123&oauth_token_secret=xyz789', { status: 200 }); }) ); @@ -76,8 +71,8 @@ describe('OAuth', () => { test('Get an access token (error)', async () => { server.use( - rest.post('https://api.discogs.com/oauth/access_token', (req, res, ctx) => { - return res(ctx.status(401), ctx.text('Invalid consumer.')); + http.post('https://api.discogs.com/oauth/access_token', () => { + return HttpResponse.text('Invalid consumer.', { status: 401 }); }) ); diff --git a/test/integration/user.test.ts b/test/integration/user.test.ts index 719498a..268cdb7 100644 --- a/test/integration/user.test.ts +++ b/test/integration/user.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,9 +8,9 @@ const server = setupMockAPI(); describe('User', () => { test('Get Identity', async () => { server.use( - rest.get('https://api.discogs.com/oauth/identity', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/oauth/identity', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -20,9 +20,9 @@ describe('User', () => { test('Get Profile', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(200), ctx.json({})); + http.get('https://api.discogs.com/users/rodneyfool', ({ request }) => { + expect(request.method).toBeDefined(); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -32,15 +32,17 @@ describe('User', () => { test('Edit Profile', async () => { server.use( - rest.post('https://api.discogs.com/users/rodneyfool', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/users/rodneyfool', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ name: 'Nicolas Cage', home_page: 'www.discogs.com', location: 'Portland', profile: 'I am a Discogs user!', curr_abbr: 'USD', }); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -56,12 +58,14 @@ describe('User', () => { test('Get User Submissions', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/submissions', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/submissions', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '4'], ['per_page', '48'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -71,14 +75,16 @@ describe('User', () => { test('Get User Contributions', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/contributions', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/contributions', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['per_page', '50'], ['sort', 'artist'], ['sort_order', 'desc'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -90,15 +96,17 @@ describe('User', () => { test('Get User Inventory', async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/inventory', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/inventory', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['status', 'for sale'], ['page', '3'], ['per_page', '25'], ['sort', 'status'], ['sort_order', 'asc'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); diff --git a/test/integration/wantlist.test.ts b/test/integration/wantlist.test.ts index cc8677c..31df643 100644 --- a/test/integration/wantlist.test.ts +++ b/test/integration/wantlist.test.ts @@ -1,4 +1,4 @@ -import { rest } from 'msw'; +import { http, HttpResponse } from 'msw'; import { DiscogsClient } from '@lib/client.js'; import { setupMockAPI } from './setup.js'; import { expect, test, describe } from 'vitest'; @@ -8,12 +8,14 @@ const server = setupMockAPI(); describe('Wantlist', () => { test("Get releases in user's wantlist", async () => { server.use( - rest.get('https://api.discogs.com/users/rodneyfool/wants', (req, res, ctx) => { - expect([...req.url.searchParams.entries()]).toStrictEqual([ + http.get('https://api.discogs.com/users/rodneyfool/wants', ({ request }) => { + const url = new URL(request.url); + + expect([...url.searchParams.entries()]).toStrictEqual([ ['page', '2'], ['per_page', '4'], ]); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -23,12 +25,14 @@ describe('Wantlist', () => { test('Add release to wantlist', async () => { server.use( - rest.put('https://api.discogs.com/users/rodneyfool/wants/130076', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.put('https://api.discogs.com/users/rodneyfool/wants/130076', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ notes: 'My favorite release', rating: 5, }); - return res(ctx.status(201), ctx.json({})); + return HttpResponse.json({}, { status: 201 }); }) ); @@ -38,12 +42,14 @@ describe('Wantlist', () => { test('Edit wantlist notes for release', async () => { server.use( - rest.post('https://api.discogs.com/users/rodneyfool/wants/130076', (req, res, ctx) => { - expect(req.body).toStrictEqual({ + http.post('https://api.discogs.com/users/rodneyfool/wants/130076', async ({ request }) => { + const body = await request.json(); + + expect(body).toStrictEqual({ notes: 'My favorite release', rating: 4, }); - return res(ctx.status(200), ctx.json({})); + return HttpResponse.json({}, { status: 200 }); }) ); @@ -53,9 +59,9 @@ describe('Wantlist', () => { test('Remove release from wantlist', async () => { server.use( - rest.delete('https://api.discogs.com/users/rodneyfool/wants/130076', (req, res, ctx) => { - expect(req.method).toBeDefined(); - return res(ctx.status(204), ctx.json({})); + http.delete('https://api.discogs.com/users/rodneyfool/wants/130076', ({ request }) => { + expect(request.method).toBeDefined(); + return new Response(null, { status: 204 }); }) );