diff --git a/package.json b/package.json index a29ee21ca..b84dbc494 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,8 @@ "jsep": "1.4.0", "sha.js": "2.4.12", "pbkdf2": "3.1.3", - "ws": "8.17.1" + "ws": "8.17.1", + "path-to-regexp": "3.3.0" }, "devDependencies": { "@commitlint/cli": "^14.1.0", @@ -112,7 +113,7 @@ "eslint-plugin-prettier": "^4.2.1", "expect": "^27.5.1", "fast-glob": "^3.3.3", - "fetch-mock": "^9.11.0", + "fetch-mock": "^12.6.0", "file-entry-cache": "^6.0.1", "husky": "^7.0.4", "jest": "^29.7.0", diff --git a/packages/ruleset-bundler/package.json b/packages/ruleset-bundler/package.json index 3e85fae90..418f6ccfa 100644 --- a/packages/ruleset-bundler/package.json +++ b/packages/ruleset-bundler/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@types/validate-npm-package-name": "^3.0.3", - "fetch-mock": "^9.11.0", + "fetch-mock": "^12.6.0", "memfs": "^3.5.3", "prettier": "^2.4.1" } diff --git a/packages/ruleset-migrator/package.json b/packages/ruleset-migrator/package.json index ba4cfa498..8b87a8102 100644 --- a/packages/ruleset-migrator/package.json +++ b/packages/ruleset-migrator/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@stoplight/spectral-core": "*", "@stoplight/spectral-rulesets": "*", - "fetch-mock": "^9.11.0", + "fetch-mock": "^12.6.0", "json-schema-to-typescript": "^10.1.5", "memfs": "^3.5.3", "prettier": "^2.4.1" diff --git a/packages/ruleset-migrator/src/__tests__/ruleset.test.ts b/packages/ruleset-migrator/src/__tests__/ruleset.test.ts index a3ab2c5b6..f939217bf 100644 --- a/packages/ruleset-migrator/src/__tests__/ruleset.test.ts +++ b/packages/ruleset-migrator/src/__tests__/ruleset.test.ts @@ -4,7 +4,7 @@ import * as prettier from 'prettier/standalone'; import * as parserBabel from 'prettier/parser-babel'; import { Ruleset } from '@stoplight/spectral-core'; import { DiagnosticSeverity } from '@stoplight/types'; -import * as fetchMock from 'fetch-mock'; +import fetchMockLib, { FetchMock as FetchMockInstance } from 'fetch-mock'; import { serveAssets } from '@stoplight/spectral-test-utils'; import { migrateRuleset } from '..'; @@ -18,9 +18,18 @@ afterAll(() => { vol.reset(); }); -function createFetchMockSandbox() { - // something is off with default module interop in Karma :man_shrugging: - return ((fetchMock as { default?: typeof import('fetch-mock') }).default ?? fetchMock).sandbox(); +type FetchFn = ( + input: Parameters[0], + init?: Parameters[1], +) => ReturnType; + +type FetchMockSandbox = FetchMockInstance & FetchFn; + +function createFetchMockSandbox(): FetchMockSandbox { + const instance = fetchMockLib.createInstance(); + const sandbox = instance.fetchHandler as FetchMockSandbox; + Object.setPrototypeOf(sandbox, instance); + return sandbox; } const scenarios = Object.keys(fixtures) diff --git a/test-utils/browser/index.js b/test-utils/browser/index.js index 00b5e9e9c..7ce448626 100644 --- a/test-utils/browser/index.js +++ b/test-utils/browser/index.js @@ -1,19 +1,19 @@ import { dirname, isURL } from '@stoplight/path'; import * as fs from 'fs'; +import fetchMockLib from 'fetch-mock'; let fetchMock; let fetchDesc; beforeEach(() => { - fetchMock = require('fetch-mock').default.sandbox(); - // fetchMock.config.fetch = fetch; - fetchMock.config.fallbackToNetwork = false; + fetchMock = fetchMockLib.createInstance(); + fetchMock.config.fetch = global.fetch; fetchDesc = Object.getOwnPropertyDescriptor(global, 'fetch'); - window.fetch = fetchMock; + window.fetch = fetchMock.fetchHandler; }); afterEach(() => { - fetchMock.restore(); + fetchMock.hardReset(); Object.defineProperty(window, 'fetch', fetchDesc); }); @@ -26,7 +26,7 @@ export function serveAssets(mocks) { } for (const actualUrl of new Set([uri.replace(/([^/])\?/, '$1/?'), uri.replace(/([^/])\?/, '$1?')])) { - fetchMock.mock(actualUrl, { + fetchMock.route(actualUrl, { status: 200, body, }); @@ -38,7 +38,7 @@ export function mockResponses(mocks) { for (const [uri, responses] of Object.entries(mocks)) { for (const [code, body] of Object.entries(responses)) { for (const actualUrl of new Set([uri.replace(/([^/])\?/, '$1/?'), uri.replace(/([^/])\?/, '$1?')])) { - fetchMock.mock(actualUrl, { + fetchMock.route(actualUrl, { status: Number(code), body, }); diff --git a/yarn.lock b/yarn.lock index c48f3ed9f..a4a6d4567 100644 --- a/yarn.lock +++ b/yarn.lock @@ -80,7 +80,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.0.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.5": +"@babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.5": version: 7.18.9 resolution: "@babel/core@npm:7.18.9" dependencies: @@ -1331,7 +1331,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4": version: 7.22.5 resolution: "@babel/runtime@npm:7.22.5" dependencies: @@ -3092,7 +3092,7 @@ __metadata: "@stoplight/types": ^13.6.0 "@types/node": "*" "@types/validate-npm-package-name": ^3.0.3 - fetch-mock: ^9.11.0 + fetch-mock: ^12.6.0 memfs: ^3.5.3 pony-cause: 1.1.1 prettier: ^2.4.1 @@ -3119,7 +3119,7 @@ __metadata: ajv: ^8.17.1 ast-types: 0.14.2 astring: ^1.9.0 - fetch-mock: ^9.11.0 + fetch-mock: ^12.6.0 json-schema-to-typescript: ^10.1.5 memfs: ^3.5.3 prettier: ^2.4.1 @@ -3519,6 +3519,13 @@ __metadata: languageName: node linkType: hard +"@types/glob-to-regexp@npm:^0.4.4": + version: 0.4.4 + resolution: "@types/glob-to-regexp@npm:0.4.4" + checksum: be9c924d664592a16129c825aa392365335ce455c34e1c9d3f6dd8b45371088bb5d4a45bbb576559f2b63d4f8bcf464cbd5baafb08cdf89b71d3b6a79356b747 + languageName: node + linkType: hard + "@types/glob@npm:*": version: 7.1.3 resolution: "@types/glob@npm:7.1.3" @@ -5569,13 +5576,6 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.0.0": - version: 3.8.1 - resolution: "core-js@npm:3.8.1" - checksum: 0212b6d2d113d2ed50d5cfed467e1b64fa25b53f0d5c38eba4ac591a7d6d05bd74bab544fa982c07acaf781daab5f468e8b7d3f5a774bccdf6059bf0ce54b3d5 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -5996,6 +5996,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + "des.js@npm:^1.0.0": version: 1.0.0 resolution: "des.js@npm:1.0.0" @@ -7088,26 +7095,15 @@ __metadata: languageName: node linkType: hard -"fetch-mock@npm:^9.11.0": - version: 9.11.0 - resolution: "fetch-mock@npm:9.11.0" +"fetch-mock@npm:^12.6.0": + version: 12.6.0 + resolution: "fetch-mock@npm:12.6.0" dependencies: - "@babel/core": ^7.0.0 - "@babel/runtime": ^7.0.0 - core-js: ^3.0.0 - debug: ^4.1.1 - glob-to-regexp: ^0.4.0 - is-subset: ^0.1.1 - lodash.isequal: ^4.5.0 - path-to-regexp: ^2.2.1 - querystring: ^0.2.0 - whatwg-url: ^6.5.0 - peerDependencies: - node-fetch: "*" - peerDependenciesMeta: - node-fetch: - optional: true - checksum: debc4dd83bcda79b0aa71c38d08da6036906cdc49393343eb3426112314a7e57557255664f745d2e3f0b9b2a6e852bd3a564ae3f08332c27e422d3441bb865bd + "@types/glob-to-regexp": ^0.4.4 + dequal: ^2.0.3 + glob-to-regexp: ^0.4.1 + regexparam: ^3.0.0 + checksum: 7705aaa6ab149f59e10e9e0794175e31c3b6c52eb0aab22522a4d7689a1ff0e3a85b9f76a2079adfd23d515e4db228e9ab7d4293f5c4cfee157cd9f858e14ae1 languageName: node linkType: hard @@ -7647,7 +7643,7 @@ __metadata: languageName: node linkType: hard -"glob-to-regexp@npm:^0.4.0": +"glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 @@ -8606,13 +8602,6 @@ __metadata: languageName: node linkType: hard -"is-subset@npm:^0.1.1": - version: 0.1.1 - resolution: "is-subset@npm:0.1.1" - checksum: 97b8d7852af165269b7495095691a6ce6cf20bdfa1f846f97b4560ee190069686107af4e277fbd93aa0845c4d5db704391460ff6e9014aeb73264ba87893df44 - languageName: node - linkType: hard - "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -9954,13 +9943,6 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 - languageName: node - linkType: hard - "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" @@ -10003,13 +9985,6 @@ __metadata: languageName: node linkType: hard -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c - languageName: node - linkType: hard - "lodash.topath@npm:^4.5.2": version: 4.5.2 resolution: "lodash.topath@npm:4.5.2" @@ -11646,13 +11621,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^2.2.1": - version: 2.4.0 - resolution: "path-to-regexp@npm:2.4.0" - checksum: 581175bf2968e51452f2b8c71f10e75c995693668b4ecf7d0b48962fbe0c56830661ca5dd5fd6d8e2f0cc9a045ce07e89af504ab133e1d21887c2712df85b1f4 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -12034,7 +12002,7 @@ __metadata: languageName: node linkType: hard -"querystring@npm:0.2.0, querystring@npm:^0.2.0": +"querystring@npm:0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 @@ -12285,6 +12253,13 @@ __metadata: languageName: node linkType: hard +"regexparam@npm:^3.0.0": + version: 3.0.0 + resolution: "regexparam@npm:3.0.0" + checksum: c8649af1538ccc12b5c5d250525f61bd370227dce41f4fb908433a9651e18b7be21dd8f8518c322dd9ebd75f7caaaea4921e374c39a469c11d4f9d0c738043e0 + languageName: node + linkType: hard + "regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" @@ -12551,7 +12526,7 @@ __metadata: eslint-plugin-prettier: ^4.2.1 expect: ^27.5.1 fast-glob: ^3.3.3 - fetch-mock: ^9.11.0 + fetch-mock: ^12.6.0 file-entry-cache: ^6.0.1 husky: ^7.0.4 jest: ^29.7.0 @@ -13671,15 +13646,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^1.0.1": - version: 1.0.1 - resolution: "tr46@npm:1.0.1" - dependencies: - punycode: ^2.1.0 - checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a - languageName: node - linkType: hard - "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -14330,13 +14296,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -14347,17 +14306,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^6.5.0": - version: 6.5.0 - resolution: "whatwg-url@npm:6.5.0" - dependencies: - lodash.sortby: ^4.7.0 - tr46: ^1.0.1 - webidl-conversions: ^4.0.2 - checksum: a10bd5e29f4382cd19789c2a7bbce25416e606b6fefc241c7fe34a2449de5bc5709c165bd13634eda433942d917ca7386a52841780b82dc37afa8141c31a8ebd - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2"