@mockyeah/fetch
Advanced tools
Comparing version 1.0.0-alpha.6 to 1.0.0-alpha.7
@@ -1,2 +0,2 @@ | ||
import { MatchObject, Match, Matcher, VerifyCallback, RunHandlerOrPromise, RequestForHandler, MatchString } from './types'; | ||
import { MatchObject, Match, Matcher, VerifyCallback, RunHandlerOrPromise, RequestForHandler, MatcherDeepObjectOfStrings } from './types'; | ||
declare class Expectation { | ||
@@ -21,4 +21,4 @@ prefix: string; | ||
header(name: string, value: Matcher<string>): this; | ||
params(value: Matcher<Record<string, MatchString>>): this; | ||
query(value: Matcher<Record<string, MatchString>>): this; | ||
params(value: MatcherDeepObjectOfStrings): this; | ||
query(value: MatcherDeepObjectOfStrings): this; | ||
body(value: any): this; | ||
@@ -25,0 +25,0 @@ verifier(done: (err?: Error) => void): (err?: Error | undefined) => void; |
@@ -19,3 +19,3 @@ "use strict"; | ||
const originalNormal = match.$meta && match.$meta.originalNormal ? match.$meta.originalNormal : match; | ||
this.prefix = `[${originalNormal.method || 'get'}] ${originalNormal.path || | ||
this.prefix = `[${originalNormal.method || 'all'}] ${originalNormal.path || | ||
originalNormal.url} --`; | ||
@@ -22,0 +22,0 @@ this.called = 0; |
@@ -1,2 +0,2 @@ | ||
import { BootOptions, FetchOptions, MockNormal, MockFunction, MockReturn, Match, ResponseOptions } from './types'; | ||
import { BootOptions, FetchOptions, MockFunction, MockReturn, Match, ResponseOptions, MakeMockOptions, MakeMockReturn } from './types'; | ||
declare class Mockyeah { | ||
@@ -7,3 +7,3 @@ private __private; | ||
fetch(input: RequestInfo, init?: RequestInit, fetchOptions?: FetchOptions): Promise<Response>; | ||
fallbackFetch(input: RequestInfo, init?: RequestInit, fetchOptions?: FetchOptions): Promise<Response>; | ||
fallbackFetch(input: RequestInfo, init?: RequestInit, fetchOptions?: FetchOptions): Promise<any>; | ||
expect(match: Match): import("./types").Expectation; | ||
@@ -18,6 +18,11 @@ all(match: Match, res?: ResponseOptions): MockReturn; | ||
reset(): void; | ||
makeMock(match: Match, res?: ResponseOptions): MockNormal; | ||
makeMock(match: Match, res?: ResponseOptions, options?: MakeMockOptions): MakeMockReturn; | ||
mock(match: Match, res?: ResponseOptions): MockReturn; | ||
/** | ||
* Returns true if unmocked, false if not. | ||
* @param id | ||
*/ | ||
unmock(id: string): boolean; | ||
connectWebSocket(): Promise<void>; | ||
} | ||
export default Mockyeah; |
@@ -11,3 +11,2 @@ "use strict"; | ||
const flatten_1 = __importDefault(require("lodash/flatten")); | ||
const fromPairs_1 = __importDefault(require("lodash/fromPairs")); | ||
const cookie_1 = __importDefault(require("cookie")); | ||
@@ -20,3 +19,7 @@ const debug_1 = __importDefault(require("debug")); | ||
const Expectation_1 = require("./Expectation"); | ||
const parseBody_1 = require("./parseBody"); | ||
const handleEmptyBody_1 = require("./handleEmptyBody"); | ||
const parseResponseBody_1 = require("./parseResponseBody"); | ||
const headersToObject_1 = require("./headersToObject"); | ||
const uuid_1 = require("./uuid"); | ||
const types_1 = require("./types"); | ||
const debugMock = debug_1.default('mockyeah:fetch:mock'); | ||
@@ -37,7 +40,6 @@ const debugHit = debug_1.default('mockyeah:fetch:hit'); | ||
const getDefaultBootOptions = (bootOptions) => { | ||
const { name = 'default', noProxy = false, prependServerURL = false, noPolyfill = false, noWebSocket = false, webSocketReconnectInterval = 5000, host = 'localhost', port = 4001, portHttps, // e.g., 4443 | ||
adminHost = host, adminPort = 4777, suiteHeader = 'x-mockyeah-suite', suiteCookie = 'mockyeahSuite', ignorePrefix = `http${portHttps ? 's' : ''}://${host}:${portHttps || port}/`, aliases = [], responseHeaders = true, | ||
// This is the fallback fetch when no mocks match. | ||
const { name = 'default', noProxy = false, prependServerURL = false, noPolyfill = false, noWebSocket = false, host = 'localhost', port = 4001, portHttps, // e.g., 4443 | ||
adminHost = host, adminPort = 4777, suiteHeader = 'x-mockyeah-suite', suiteCookie = 'mockyeahSuite', latency, ignorePrefix = `http${portHttps ? 's' : ''}://${host}:${portHttps || port}/`, aliases = [], responseHeaders = true, | ||
// @ts-ignore | ||
fetch = global.fetch, fileResolver, fixtureResolver, mockSuiteResolver } = bootOptions; | ||
fetch = global.fetch, fileResolver, fixtureResolver, mockSuiteResolver, devTools = false, devToolsTimeout = 1000, devToolsInterval = 100 } = bootOptions; | ||
const defaultBootOptions = { | ||
@@ -49,3 +51,2 @@ name, | ||
noWebSocket, | ||
webSocketReconnectInterval, | ||
host, | ||
@@ -58,2 +59,3 @@ port, | ||
suiteCookie, | ||
latency, | ||
ignorePrefix, | ||
@@ -65,3 +67,6 @@ aliases, | ||
fixtureResolver, | ||
mockSuiteResolver | ||
mockSuiteResolver, | ||
devTools, | ||
devToolsTimeout, | ||
devToolsInterval | ||
}; | ||
@@ -110,3 +115,3 @@ return defaultBootOptions; | ||
const { logPrefix, mocks, bootOptions, aliasReplacements } = this.__private; | ||
const { noWebSocket, ignorePrefix, noProxy: bootNoProxy, prependServerURL, suiteCookie, suiteHeader, port, portHttps, host, mockSuiteResolver } = bootOptions; | ||
const { noWebSocket, ignorePrefix, noProxy: bootNoProxy, prependServerURL, suiteCookie, suiteHeader, port, portHttps, host, mockSuiteResolver, devTools, devToolsTimeout, devToolsInterval } = bootOptions; | ||
const { dynamicMocks, dynamicMockSuite, noProxy = bootNoProxy } = fetchOptions; | ||
@@ -121,2 +126,17 @@ if (!noWebSocket) { | ||
} | ||
if (devTools) { | ||
await new Promise(resolve => { | ||
let times = 0; | ||
const interval = setInterval(() => { | ||
times += 1; | ||
if ( | ||
// @ts-ignore | ||
window.__MOCKYEAH_DEVTOOLS_EXTENSION__?.loadedMocks || | ||
times > devToolsTimeout / devToolsInterval) { | ||
resolve(); | ||
clearInterval(interval); | ||
} | ||
}, devToolsInterval); | ||
}); | ||
} | ||
// TODO: Support `Request` `input` object instead of `init`. | ||
@@ -126,3 +146,3 @@ let url = typeof input === 'string' ? input : input.url; | ||
const dynamicMocksNormal = (dynamicMocks || []) | ||
.map(dynamicMock => dynamicMock && this.makeMock(...dynamicMock)) | ||
.map(dynamicMock => dynamicMock && this.makeMock(dynamicMock[0], dynamicMock[1], { keepExisting: true }).mock) | ||
.filter(Boolean); | ||
@@ -141,10 +161,3 @@ const parsed = url_1.parse(url); | ||
} | ||
// TODO: Does this handle lowercase `content-type`? | ||
const contentType = inHeaders && inHeaders.get('Content-Type'); | ||
// TODO: More robust content-type parsing. | ||
const isBodyJson = contentType && contentType.includes('application/json'); | ||
const inBody = options.body && isBodyJson | ||
? JSON.parse(options.body) | ||
: // TODO: Support forms as key/value object (see https://expressjs.com/en/api.html#req.body) | ||
options.body; | ||
const inBody = inHeaders && parseResponseBody_1.parseResponseBody(inHeaders, options.body); | ||
const query = parsed.query ? qs_1.default.parse(parsed.query) : undefined; | ||
@@ -178,4 +191,3 @@ const method = options.method ? options.method.toLowerCase() : 'get'; | ||
const name = mockSuiteNames[index]; | ||
const { default: mockSuite } = mockSuiteLoaded; | ||
mockSuite.forEach(mock => { | ||
(mockSuiteLoaded.default || mockSuiteLoaded).forEach(mock => { | ||
const [match, response] = mock; | ||
@@ -194,3 +206,3 @@ const newMatch = (isPlainObject_1.default(match) | ||
}; | ||
dynamicMocksNormal.push(this.makeMock(newMatch, response)); | ||
dynamicMocksNormal.push(this.makeMock(newMatch, response, { keepExisting: true }).mock); | ||
}); | ||
@@ -240,3 +252,4 @@ }); | ||
}); | ||
const pathname = parsed.pathname || '/'; | ||
const pathname = `${parsed.protocol ? `${parsed.protocol}//` : ''}${parsed.host || | ||
''}${parsed.pathname || '/'}`; | ||
const requestForHandler = { | ||
@@ -256,3 +269,18 @@ url: pathname, | ||
} | ||
const { response, json } = await respond_1.respond(matchingMock, requestForHandler, bootOptions); | ||
let realRes; | ||
const resOpts = matchingMock[1]; | ||
const intercept = resOpts && | ||
types_1.responseOptionsResponderKeys.some(option => | ||
// @ts-ignore | ||
typeof resOpts[option] === 'function' && resOpts[option].length > 1); | ||
if (intercept) { | ||
const realResponse = await this.fallbackFetch(url, options); | ||
const body = parseResponseBody_1.parseResponseBody(realResponse.headers, await realResponse.text()); | ||
realRes = { | ||
status: realResponse.status, | ||
body, | ||
headers: headersToObject_1.headersToObject(realResponse.headers) | ||
}; | ||
} | ||
const { response, json } = await respond_1.respond(matchingMock, requestForHandler, bootOptions, realRes); | ||
debugHit(`${logPrefix} @mockyeah/fetch matched mock for`, url, { | ||
@@ -293,3 +321,3 @@ request: requestForHandler, | ||
const { noProxy } = fetchOptions; | ||
const { responseHeaders } = this.__private.bootOptions; | ||
const { responseHeaders, fetch } = this.__private.bootOptions; | ||
const url = typeof input === 'string' ? input : input.url; | ||
@@ -308,9 +336,7 @@ if (noProxy || !url.startsWith('http')) { | ||
let res = await fetch(input, init); | ||
const body = await parseBody_1.parseBody(res); | ||
const body = await handleEmptyBody_1.handleEmptyBody(res); | ||
const { ws, recording } = this.__private; | ||
if (recording) { | ||
const { status } = res; | ||
// @ts-ignore | ||
const entries = res.headers.entries(); | ||
const headers = fromPairs_1.default([...entries].map(e => [e[0].toLowerCase(), e[1]])); | ||
const headers = headersToObject_1.headersToObject(res.headers); | ||
if (ws) { | ||
@@ -376,8 +402,15 @@ const action = { | ||
} | ||
makeMock(match, res) { | ||
makeMock(match, res, options = {}) { | ||
const { keepExisting } = options; | ||
const matchNormal = normalize_1.normalize(match); | ||
const { mocks } = this.__private; | ||
const existingIndex = mocks.findIndex(m => isMockEqual_1.isMockEqual(matchNormal, m[0])); | ||
if (existingIndex >= 0) { | ||
mocks.splice(existingIndex, 1); | ||
const removed = []; | ||
let firstExistingIndex; | ||
if (!keepExisting) { | ||
const existingIndex = mocks.findIndex(m => isMockEqual_1.isMockEqual(matchNormal, m[0])); | ||
if (existingIndex >= 0) { | ||
firstExistingIndex = firstExistingIndex ?? existingIndex; | ||
removed.push(mocks[existingIndex]); | ||
mocks.splice(existingIndex, 1); | ||
} | ||
} | ||
@@ -388,17 +421,42 @@ let resObj = typeof res === 'string' ? { text: res } : res; | ||
matchNormal.$meta.expectation = new Expectation_1.Expectation(matchNormal); | ||
matchNormal.$meta.id = uuid_1.uuid(); | ||
} | ||
return [matchNormal, resObj]; | ||
return { mock: [matchNormal, resObj], removed, removedIndex: firstExistingIndex }; | ||
} | ||
mock(match, res) { | ||
const mockNormal = this.makeMock(match, res); | ||
const { mock: mockNormal, removed, removedIndex } = this.makeMock(match, res); | ||
const id = mockNormal[0].$meta?.id; | ||
const { mocks, logPrefix } = this.__private; | ||
debugMock(`${logPrefix} mocked`, match, res); | ||
mocks.push(mockNormal); | ||
if (removedIndex != null) { | ||
mocks.splice(removedIndex, 0, mockNormal); | ||
} | ||
else { | ||
mocks.push(mockNormal); | ||
} | ||
const expectation = (mockNormal[0].$meta && mockNormal[0].$meta.expectation); | ||
const removedIds = removed.map(mock => mock[0]?.$meta?.id); | ||
const api = expectation.api.bind(expectation); | ||
const expect = (_match) => api(_match); | ||
return { | ||
expect: expect.bind(expectation) | ||
id, | ||
removedIds, | ||
expect | ||
}; | ||
} | ||
/** | ||
* Returns true if unmocked, false if not. | ||
* @param id | ||
*/ | ||
unmock(id) { | ||
const { mocks, logPrefix } = this.__private; | ||
const index = mocks.findIndex(m => m[0].$meta?.id === id); | ||
if (index === -1) { | ||
debugMock(`${logPrefix} didn't find id to unmock`, id); | ||
return false; | ||
} | ||
mocks.splice(index, 1); | ||
debugMock(`${logPrefix} unmocked`, id); | ||
return true; | ||
} | ||
async connectWebSocket() { | ||
@@ -409,3 +467,3 @@ if (typeof WebSocket === 'undefined') | ||
return; | ||
const { webSocketReconnectInterval, adminPort, adminHost } = this.__private.bootOptions; | ||
const { adminPort, adminHost } = this.__private.bootOptions; | ||
const webSocketUrl = `ws://${adminHost}:${adminPort}`; | ||
@@ -435,5 +493,5 @@ debugAdmin(`WebSocket trying to connect to '${webSocketUrl}'.`); | ||
debugAdminError('WebSocket closed'); | ||
this.__private.recording = false; | ||
delete this.__private.ws; | ||
reject(new Error('WebSocket closed')); | ||
this.__private.recording = false; | ||
}; | ||
@@ -440,0 +498,0 @@ ws.onmessage = (event) => { |
@@ -1,1 +0,1 @@ | ||
module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=21)}([function(e,t){e.exports=require("@babel/runtime/regenerator")},function(e,t){e.exports=require("lodash/isPlainObject")},function(e,t){e.exports=require("assert")},function(e,t){e.exports=require("debug")},function(e,t){e.exports=require("@babel/runtime/helpers/defineProperty")},function(e,t){e.exports=require("@babel/runtime/helpers/toConsumableArray")},function(e,t){e.exports=require("@babel/runtime/helpers/slicedToArray")},function(e,t){e.exports=require("url")},function(e,t){e.exports=require("match-deep")},function(e,t){e.exports=require("lodash/isEmpty")},function(e,t){e.exports=require("lodash/isEqual")},function(e,t){e.exports=require("@babel/runtime/helpers/classCallCheck")},function(e,t){e.exports=require("@babel/runtime/helpers/createClass")},function(e,t){e.exports=require("qs")},function(e,t){e.exports=require("cookie")},function(e,t){e.exports=require("lodash/flatten")},function(e,t){e.exports=require("lodash/fromPairs")},function(e,t){e.exports=require("path-to-regexp")},function(e,t){e.exports=require("lodash/isRegExp")},function(e,t){e.exports=require("mime")},function(e,t){e.exports=require("@babel/runtime/helpers/typeof")},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=r(6),i=r.n(a),c=r(5),s=r.n(c),u=r(11),l=r.n(u),p=r(12),f=r.n(p),h=r(4),d=r.n(h),m=r(7),y=r(13),v=r.n(y),b=r(1),k=r.n(b),x=r(15),g=r.n(x),w=r(16),P=r.n(w),O=r(14),q=r.n(O),j=r(3),S=r.n(j),_=r(8),E=r.n(_),$=r(17),R=r.n($),W=r(9),H=r.n(W),C=r(18),T=r.n(C);function D(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?D(r,!0).forEach((function(t){d()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):D(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var M=/^(\/?https?.{3}[^/:?]+):/,N=/^(\/?https?).{3}/,F=/^(\/?https?.{3}[^/:?]+)~/,U=/^(\/?https?).{3}/,J=function(e){return e.replace(U,"$1://").replace(F,"$1:")},A=function(e){return e.replace(M,"$1~").replace(N,"$1~~~")},B=/^\//,K=/^(https?)%3A%2F%2F/,I=function(e){return/^\/+https?[:~][/~]{2}/.test(e)?J(function(e){return e.replace(B,"")}(e).replace(K,(function(e,t){return"".concat(t,"://")}))):e},z=function(e,t){if("function"==typeof e)return e;var r=k()(e)?L({},e):e;(e=k()(e)?L({},e):{url:e}).query=H()(e.query)?void 0:e.query,e.headers=H()(e.headers)?void 0:Object.entries(e.headers).reduce((function(e,t){var r=i()(t,2),n=r[0],o=r[1];return e[n.toLowerCase()]=o,e}),{}),e.method?"all"===e.method||"ALL"===e.method||"*"===e.method?delete e.method:"string"==typeof e.method&&(e.method=e.method.toLowerCase()):e.method="get";var n,o,a=L({},e.$meta||{});if(e.path&&(e.url=e.path,delete e.path),"*"===e.url&&delete e.url,"string"==typeof e.url){e.url=I(e.url);var c=(n=e.url,/^https?:/.test(n)?(o=Object(m.parse)(n),n="".concat(o.protocol||"http:","//").concat(o.hostname).concat(o.port&&!["80","443"].includes(o.port)?":".concat(o.port):"").concat(o.pathname)):(o=Object(m.parse)("http://example.com".concat(n.startsWith("/")?n:"/".concat(n))),n=o.pathname||""),{url:n,query:o.query?v.a.parse(o.query):void 0});e.url=c.url.replace(/\/+$/,"")||"/",e.query=k()(e.query)?L({},c.query,{},e.query):e.query||c.query}H()(e.query)&&delete e.query,H()(e.cookies)&&delete e.cookies;var s=L({},e);if(a.original=r,a.originalNormal=s,"string"==typeof e.url){if(!t){var u=[],l=R()(A(e.url),u);e.url=function(e){return l.test(A(e)||A("/".concat(e)))},a.regex=l,a.matchKeys=u,a.fn=e.url.toString()}}else if(T()(e.url)){if(!t){var p=e.url;e.url=function(e){return p.test(J(e))||p.test(J("/".concat(e)))},a.regex=p,a.fn=e.url.toString()}}else if("function"==typeof e.url){var f=e.url;e.url=function(e){return f(e)||f("/".concat(e))}}return L({},e,{$meta:a})},G=r(10),Q=r.n(G),V=r(19),X=r.n(V);function Y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Z(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Y(r,!0).forEach((function(t){d()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Y(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var ee=function(e,t){return"function"==typeof e?e(t):e},te=function(e,t,r){var n,a,i,c,s,u,l,p,f,h,d,m,y,v,b;return o.a.async((function(k){for(;;)switch(k.prev=k.next){case 0:if(n=r.responseHeaders,a=e[1]||{},k.t1=a.status,!k.t1){k.next=7;break}return k.next=6,o.a.awrap(ee(a.status,t));case 6:k.t1=k.sent;case 7:if(k.t0=k.t1,k.t0){k.next=10;break}k.t0=200;case 10:if(i=k.t0,k.t2=a.type,!k.t2){k.next=16;break}return k.next=15,o.a.awrap(a.type);case 15:k.t2=k.sent;case 16:if(s=k.t2,u="function"==typeof s?s(t):s,!a.fixture){k.next=35;break}if(r.fixtureResolver){k.next=21;break}throw new Error("Using `fixture` in mock response options requires a `fixtureResolver`.");case 21:return k.next=23,o.a.awrap(ee(a.fixture,t));case 23:if(f=k.sent,u=u||f,!f){k.next=31;break}return k.next=28,o.a.awrap(r.fixtureResolver(f));case 28:k.t3=k.sent,k.next=32;break;case 31:k.t3=void 0;case 32:c=k.t3,k.next=79;break;case 35:if(!a.filePath){k.next=52;break}if(r.fileResolver){k.next=38;break}throw new Error("Using `filePath` in mock response options requires a `fileResolver`.");case 38:return k.next=40,o.a.awrap(ee(a.filePath,t));case 40:if(h=k.sent,u=u||h,!h){k.next=48;break}return k.next=45,o.a.awrap(r.fileResolver(h));case 45:k.t4=k.sent,k.next=49;break;case 48:k.t4=void 0;case 49:c=k.t4,k.next=79;break;case 52:if(!a.json){k.next=60;break}return k.next=55,o.a.awrap(ee(a.json,t));case 55:p=k.sent,c=JSON.stringify(p),l="application/json; charset=UTF-8",k.next=79;break;case 60:if(!a.text){k.next=67;break}return k.next=63,o.a.awrap(ee(a.text,t));case 63:c=k.sent,l="text/plain; charset=UTF-8",k.next=79;break;case 67:if(!a.html){k.next=74;break}return k.next=70,o.a.awrap(ee(a.html,t));case 70:c=k.sent,l="text/html; charset=UTF-8",k.next=79;break;case 74:if(!a.raw){k.next=79;break}return k.next=77,o.a.awrap(ee(a.raw,t));case 77:c=k.sent,l=void 0;case 79:if(c=c||"",l=u?X.a.getType(u):l,!a.headers){k.next=90;break}return k.t6=Z,k.t7={},k.next=86,o.a.awrap(ee(a.headers,t));case 86:k.t8=k.sent,k.t5=(0,k.t6)(k.t7,k.t8),k.next=91;break;case 90:k.t5={};case 91:if(d=k.t5,n&&(d["x-mockyeah-mocked"]="true"),l&&(d["content-type"]=l),m={status:i,headers:d},!(y=a.latency||r.latency)){k.next=102;break}return k.next=99,o.a.awrap(ee(y,t));case 99:return v=k.sent,k.next=102,o.a.awrap(new Promise((function(e){return setTimeout(e,v)})));case 102:return b=new Response(c,m),k.abrupt("return",{response:b,json:p});case 104:case"end":return k.stop()}}))},re=r(20),ne=r.n(re),oe=r(2),ae=r.n(oe),ie=function(e){return e&&(e instanceof Promise||!(!e.then||!e.catch))},ce=function(e,t,r){var n=E()(e,t,{skipKeys:["$meta"]}),o=n.result,a=n.message;ae()(o,"".concat(r,": ").concat(a))},se=function(){function e(t){l()(this,e);var r=t.$meta&&t.$meta.originalNormal?t.$meta.originalNormal:t;this.prefix="[".concat(r.method||"get","] ").concat(r.path||r.url," --"),this.called=0,this.assertions=[],this.handlers=[],this.verifier=this.verifier.bind(this),this.run=this.run.bind(this),this.verify=this.verify.bind(this)}return f()(e,[{key:"request",value:function(e){var t=this;this.called+=1,this.handlers.forEach((function(r){t.assertions.push(r.bind(t,e))}))}},{key:"api",value:function(e){var t=this;if("function"==typeof e){var r=e;this.handlers.push((function(e){try{var n=r(e);if(void 0!==n&&!n)throw new Error("function returned false")}catch(e){var o="".concat(t.prefix," Expect function did not match").concat(e&&e.message?": ".concat(e.message):"");ae()(!1,o)}}))}else if("object"===ne()(e)){var n=z(e);this.handlers.push((function(e){var t=E()(e,n,{skipKeys:["$meta"]}),r=t.result,o=t.message;ae()(r,"Expect object did not match: ".concat(o))}))}return this}},{key:"atLeast",value:function(e){var t=this;return this.assertions.push((function(){ae()(t.called>=e,"".concat(t.prefix," Expected route to be called at least ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"atMost",value:function(e){var t=this;return this.assertions.push((function(){ae()(t.called<=e,"".concat(t.prefix," Expected route to be called at most ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"never",value:function(){var e=this;return this.assertions.push((function(){ae()(0===e.called,"".concat(e.prefix," Expected route to be called never, but it was called ").concat(e.called," times"))})),this}},{key:"once",value:function(){var e=this;return this.assertions.push((function(){ae()(1===e.called,"".concat(e.prefix," Expected route to be called once, but it was called ").concat(e.called," times"))})),this}},{key:"twice",value:function(){var e=this;return this.assertions.push((function(){ae()(2===e.called,"".concat(e.prefix," Expected route to be called twice, but it was called ").concat(e.called," times"))})),this}},{key:"thrice",value:function(){var e=this;return this.assertions.push((function(){ae()(3===e.called,"".concat(e.prefix," Expected route to be called thrice, but it was called ").concat(e.called," times"))})),this}},{key:"exactly",value:function(e){var t=this;return this.assertions.push((function(){ae()(t.called===e,"".concat(t.prefix," Expected route to be called ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"path",value:function(e){var t="".concat(this.prefix," Path did not match expected");return this.handlers.push((function(r){var n=r.path;ce(n,e,t)})),this}},{key:"url",value:function(e){return this.path(e)}},{key:"header",value:function(e,t){var r="".concat(this.prefix,' Header "').concat(e,'" did not match expected');return this.handlers.push((function(n){ce(n.headers&&(n.headers[e]||n.headers[e.toLowerCase()]),t,r)})),this}},{key:"params",value:function(e){var t="".concat(this.prefix," Params did not match expected");return this.handlers.push((function(r){ce(r.query||{},e||{},t)})),this}},{key:"query",value:function(e){return this.params(e)}},{key:"body",value:function(e){var t="".concat(this.prefix," Body did not match expected");return this.handlers.push((function(r){ce(r.body,e,t)})),this}},{key:"verifier",value:function(e){var t=this;return function(r){r?e(r):t.verify(e)}}},{key:"run",value:function(e){return ie(e)?this.runPromise=e:this.runPromise=new Promise((function(t,r){setTimeout((function(){var n=e((function(e){e?r(e):t()}));ie(n)&&n.then(t).catch(r)}))})),this}},{key:"verify",value:function(e){var t=this,r=function(t){if(!e)throw t;e(t)},n=function(){try{t.assertions.forEach((function(e){return e()})),e&&e()}catch(e){r(e)}};if(this.runPromise)return this.runPromise.then(n).catch(r);n()}}]),e}(),ue=function(e){return o.a.async((function(t){for(;;)switch(t.prev=t.next){case 0:if(204!==e.status){t.next=3;break}return t.abrupt("return","");case 3:return t.abrupt("return",e.text()||"");case 4:case"end":return t.stop()}}))};function le(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function pe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?le(r,!0).forEach((function(t){d()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):le(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var fe=S()("mockyeah:fetch:mock"),he=S()("mockyeah:fetch:hit"),de=S()("mockyeah:fetch:miss"),me=S()("mockyeah:fetch:miss:each"),ye=S()("mockyeah:fetch:error"),ve=S()("mockyeah:fetch:admin"),be=S()("mockyeah:fetch:admin:error"),ke={},xe=function(e,t){return pe({},k()(e)?e:{url:e},{method:t})},ge=function(e){var t=e.name,r=void 0===t?"default":t,n=e.noProxy,o=void 0!==n&&n,a=e.prependServerURL,i=void 0!==a&&a,c=e.noPolyfill,s=void 0!==c&&c,u=e.noWebSocket,l=void 0!==u&&u,p=e.host,f=void 0===p?"localhost":p,h=e.port,d=void 0===h?4001:h,m=e.portHttps,y=e.adminHost,v=void 0===y?f:y,b=e.adminPort,k=void 0===b?4777:b,x=e.suiteHeader,g=void 0===x?"x-mockyeah-suite":x,w=e.suiteCookie,P=void 0===w?"mockyeahSuite":w,O=e.ignorePrefix,q=void 0===O?"http".concat(m?"s":"","://").concat(f,":").concat(m||d,"/"):O,j=e.aliases,S=void 0===j?[]:j,_=e.responseHeaders,E=void 0===_||_,$=e.fetch;return{name:r,noProxy:o,prependServerURL:i,noPolyfill:s,noWebSocket:l,host:f,port:d,portHttps:m,adminHost:v,adminPort:k,suiteHeader:g,suiteCookie:P,ignorePrefix:q,aliases:S,responseHeaders:E,fetch:void 0===$?global.fetch:$,fileResolver:e.fileResolver,fixtureResolver:e.fixtureResolver,mockSuiteResolver:e.mockSuiteResolver}},we=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ke;l()(this,e);var r=ge(t),n=r.name,o=r.noPolyfill,a=r.aliases,i=r.fetch;this.__private={recording:!1,bootOptions:r,logPrefix:"[".concat(n,"]"),mocks:[]};var c=this.__private.logPrefix;if(!i){var s="".concat(c," @mockyeah/fetch requires a fetch implementation");throw ye(s),new Error(s)}var u={};(a||[]).forEach((function(e){e.forEach((function(t){u[t]=e}))})),this.__private.aliasReplacements=u,o||(global.fetch=this.fetch.bind(this));var p={all:this.all.bind(this),get:this.get.bind(this),post:this.post.bind(this),put:this.put.bind(this),delete:this.delete.bind(this),options:this.options.bind(this),patch:this.patch.bind(this)};this.methods=p}return f()(e,[{key:"fetch",value:function(e,t){var r,n,a,c,u,l,p,f,h,y,b,x,w,P,O,j,S,_,$,R,W,H,C,T,D,L,M,N,F,U,J,A,B,K,I,G,Q,V,X,Y,Z,ee,re,ne,oe,ae,ie,ce,se=this,ue=arguments;return o.a.async((function(le){for(;;)switch(le.prev=le.next){case 0:if(r=ue.length>2&&void 0!==ue[2]?ue[2]:{},n=this.__private,a=n.logPrefix,c=n.mocks,u=n.bootOptions,l=n.aliasReplacements,p=u.noWebSocket,f=u.ignorePrefix,h=u.noProxy,y=u.prependServerURL,b=u.suiteCookie,x=u.suiteHeader,w=u.port,P=u.portHttps,O=u.host,j=u.mockSuiteResolver,S=r.dynamicMocks,_=r.dynamicMockSuite,$=r.noProxy,R=void 0===$?h:$,p){le.next=12;break}return le.prev=5,le.next=8,o.a.awrap(this.connectWebSocket());case 8:le.next=12;break;case 10:le.prev=10,le.t0=le.catch(5);case 12:if(W="string"==typeof e?e:e.url,H=t||{},C=(S||[]).map((function(e){return e&&se.makeMock.apply(se,s()(e))})).filter(Boolean),T=Object(m.parse)(W),D=H.headers?H.headers instanceof Headers?H.headers:new Headers(H.headers):void 0,!H.body||"string"==typeof H.body){le.next=20;break}return ye("".concat(a," @mockyeah/fetch does not yet support non-string request bodies, falling back to normal fetch")),le.abrupt("return",this.fallbackFetch(W,t,{noProxy:R}));case 20:if(L=D&&D.get("Content-Type"),M=L&&L.includes("application/json"),N=H.body&&M?JSON.parse(H.body):H.body,F=T.query?v.a.parse(T.query):void 0,U=H.method?H.method.toLowerCase():"get",!H.headers||k()(H.headers)){le.next=28;break}return ye("".concat(a," @mockyeah/fetch does not yet support non-object request headers, falling back to normal fetch")),le.abrupt("return",this.fallbackFetch(W,t,{noProxy:R}));case 28:J=H.headers;try{(B=J&&(J.cookie||J.Cookie))?A=q.a.parse(B):"undefined"!=typeof window&&(A=q.a.parse(window.document.cookie))}catch(e){ye("".concat(a," @mockyeah/fetch couldn't parse cookies: ").concat(e.message))}if(!(K=_||A&&A[b])||!j){le.next=38;break}return I=K.split(",").map((function(e){return e.trim()})),G=I.map(j),le.next=36,o.a.awrap(Promise.all(G));case 36:le.sent.forEach((function(e,t){var r=I[t];e.default.forEach((function(e){var t=i()(e,2),n=t[0],o=t[1],a=k()(n)?pe({},n):{url:n};a.cookies=pe({},a.cookies,{mockSuite:function(e){return!!e&&e.split(",").map((function(e){return e.trim()})).includes(r)}}),C.push(se.makeMock(a,o))}))}));case 38:if(Q={url:W.replace(f,""),query:F,headers:J,body:N,method:U,cookies:A},[V=z(Q,!0)].concat(s()(k()(V)?g()(l&&Object.entries(l).map((function(e){var t=i()(e,2),r=t[0],n=t[1],o=V.url;return"string"==typeof o&&o.replace(/^\//,"").startsWith(r)?n.map((function(e){return pe({},V,{url:o.replace(r,e)})})):[]}))):[])).filter(Boolean).find((function(e){return[].concat(s()((C||[]).filter(Boolean)),s()(c)).find((function(t){var r=z(t[0]),n=E()(e,r,{skipKeys:["$meta"]});return n.result?(X=t,!0):(me("".concat(a," @mockyeah/fetch missed mock for"),W,n.message,{request:Q}),!1)}))})),Y=T.pathname||"/",Z={url:Y,path:Y,query:F,method:U,headers:J,body:N,cookies:A},!X){le.next=52;break}return X[0]&&X[0].$meta&&X[0].$meta.expectation&&X[0].$meta.expectation.request(Z),le.next=47,o.a.awrap(te(X,Z,u));case 47:return ee=le.sent,re=ee.response,ne=ee.json,he("".concat(a," @mockyeah/fetch matched mock for"),W,{request:Z,response:re,json:ne,mock:X}),le.abrupt("return",re);case 52:return de("".concat(a," @mockyeah/fetch missed all mocks for"),W,{request:Z}),oe="http".concat(P?"s":"","://").concat(O,":").concat(P||w),ae=H,y&&oe&&(W="".concat(oe,"/").concat(W.replace("://","~~~")),"undefined"!=typeof document&&(ce=document.cookie.match("\\b".concat(b,"=([^;]+)\\b")),ie=ce&&ce[1]),ae=pe({},H,{headers:pe({},H.headers,{},ie&&d()({},x,ie))})),le.abrupt("return",this.fallbackFetch(W,ae,{noProxy:R}));case 57:case"end":return le.stop()}}),null,this,[[5,10]])}},{key:"fallbackFetch",value:function(e,t){var r,n,a,i,c,u,l,p,f,h,d,m,y,v,b,k,x,g,w,O=arguments;return o.a.async((function(q){for(;;)switch(q.prev=q.next){case 0:if(r=O.length>2&&void 0!==O[2]?O[2]:{},n=r.noProxy,a=this.__private.bootOptions.responseHeaders,i="string"==typeof e?e:e.url,!n&&i.startsWith("http")){q.next=8;break}return c={},a&&(c["x-mockyeah-missed"]="true"),q.abrupt("return",new Response("",{status:404,headers:c}));case 8:return u=(new Date).getTime(),q.next=11,o.a.awrap(fetch(e,t));case 11:return l=q.sent,q.next=14,o.a.awrap(ue(l));case 14:return p=q.sent,f=this.__private,h=f.ws,f.recording&&(d=l.status,m=l.headers.entries(),y=P()(s()(m).map((function(e){return[e[0].toLowerCase(),e[1]]}))),h&&(v={type:"recordPush",payload:{reqUrl:i,req:{method:t&&t.method,body:t&&t.body},startTime:u,body:p,headers:y,status:d}},h.send(JSON.stringify(v)))),a&&(k=(b=l).status,x=b.statusText,g=b.headers,(w=g&&new Headers(g))&&(w.set("x-mockyeah-proxied","true"),w.set("x-mockyeah-missed","true")),l=new Response(p,{headers:w,status:k,statusText:x})),q.abrupt("return",l);case 19:case"end":return q.stop()}}),null,this)}},{key:"expect",value:function(e){return this.all("*").expect(e)}},{key:"all",value:function(e,t){return this.mock(e,t)}},{key:"get",value:function(e,t){return this.mock(xe(e,"get"),t)}},{key:"post",value:function(e,t){return this.mock(xe(e,"post"),t)}},{key:"put",value:function(e,t){return this.mock(xe(e,"put"),t)}},{key:"delete",value:function(e,t){return this.mock(xe(e,"delete"),t)}},{key:"options",value:function(e,t){return this.mock(xe(e,"options"),t)}},{key:"patch",value:function(e,t){return this.mock(xe(e,"patch"),t)}},{key:"reset",value:function(){this.__private.mocks=[]}},{key:"makeMock",value:function(e,t){var r=z(e),n=this.__private.mocks,o=n.findIndex((function(e){return t=r,n=e[0],o=t.$meta?t.$meta.originalNormal:void 0,a=n.$meta?n.$meta.originalNormal:void 0,k()(o)&&k()(a)?!(!o||!a)&&o.url===a.url&&o.path===a.path&&o.method===a.method&&Q()(o.query,a.query)&&Q()(o.body,a.body)&&Q()(o.headers,a.headers)&&Q()(o.cookies,a.cookies):o===a;var t,n,o,a}));o>=0&&n.splice(o,1);var a="string"==typeof t?{text:t}:t;return a=a||{status:200},r.$meta&&(r.$meta.expectation=new se(r)),[r,a]}},{key:"mock",value:function(e,t){var r=this.makeMock(e,t),n=this.__private,o=n.mocks,a=n.logPrefix;fe("".concat(a," mocked"),e,t),o.push(r);var i=r[0].$meta&&r[0].$meta.expectation,c=i.api.bind(i);return{expect:function(e){return c(e)}.bind(i)}}},{key:"connectWebSocket",value:function(){var e,t,r,n,a=this;return o.a.async((function(i){for(;;)switch(i.prev=i.next){case 0:if("undefined"!=typeof WebSocket){i.next=2;break}return i.abrupt("return");case 2:if(!this.__private.ws){i.next=4;break}return i.abrupt("return");case 4:e=this.__private.bootOptions,t=e.adminPort,r=e.adminHost,n="ws://".concat(r,":").concat(t),ve("WebSocket trying to connect to '".concat(n,"'.")),i.prev=7,this.__private.ws=new WebSocket(n),i.next=16;break;case 11:throw i.prev=11,i.t0=i.catch(7),be("WebSocket couldn't connect to '".concat(n,"':"),i.t0),delete this.__private.ws,i.t0;case 16:return i.next=18,o.a.awrap(new Promise((function(e,t){var r=a.__private.ws;r&&(r.onopen=function(){ve("WebSocket opened"),r.send(JSON.stringify({type:"opened"})),e()},r.onerror=function(e){be("WebSocket errored",e),t(e)},r.onclose=function(){be("WebSocket closed"),a.__private.recording=!1,delete a.__private.ws,t(new Error("WebSocket closed"))},r.onmessage=function(e){var t;ve("WebSocket message",e);try{t=JSON.parse(e.data)}catch(t){return void be("Couldn't parse WebSocket message data '".concat(e.data,"':"),t)}t&&(ve("WebSocket action",t),"record"===t.type?a.__private.recording=!0:"recordStop"===t.type&&(a.__private.recording=!1))})})));case 18:case"end":return i.stop()}}),null,this,[[7,11]])}}]),e}();t.default=we}]).default; | ||
module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=23)}([function(e,t){e.exports=require("@babel/runtime/regenerator")},function(e,t){e.exports=require("lodash/isPlainObject")},function(e,t){e.exports=require("assert")},function(e,t){e.exports=require("@babel/runtime/helpers/asyncToGenerator")},function(e,t){e.exports=require("debug")},function(e,t){e.exports=require("@babel/runtime/helpers/defineProperty")},function(e,t){e.exports=require("qs")},function(e,t){e.exports=require("@babel/runtime/helpers/toConsumableArray")},function(e,t){e.exports=require("@babel/runtime/helpers/slicedToArray")},function(e,t){e.exports=require("url")},function(e,t){e.exports=require("match-deep")},function(e,t){e.exports=require("lodash/isEmpty")},function(e,t){e.exports=require("lodash/isEqual")},function(e,t){e.exports=require("@babel/runtime/helpers/classCallCheck")},function(e,t){e.exports=require("@babel/runtime/helpers/createClass")},function(e,t){e.exports=require("cookie")},function(e,t){e.exports=require("lodash/isRegExp")},function(e,t){e.exports=require("lodash/mapValues")},function(e,t){e.exports=require("lodash/flatten")},function(e,t){e.exports=require("path-to-regexp")},function(e,t){e.exports=require("mime")},function(e,t){e.exports=require("@babel/runtime/helpers/typeof")},function(e,t){e.exports=require("lodash/fromPairs")},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=r(7),i=r.n(a),c=r(8),s=r.n(c),u=r(3),l=r.n(u),f=r(13),p=r.n(f),h=r(14),d=r.n(h),m=r(5),v=r.n(m),x=r(9),y=r(6),b=r.n(y),k=r(1),g=r.n(k),w=r(18),O=r.n(w),P=r(15),q=r.n(P),j=r(4),S=r.n(j),_=r(10),E=r.n(_),T=r(19),$=r.n(T),R=r(11),W=r.n(R),H=r(16),C=r.n(H),D=r(17),M=r.n(D);function F(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?F(Object(r),!0).forEach((function(t){v()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):F(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var N=/^(\/?https?.{3}[^/:?]+):/,I=/^(\/?https?).{3}/,U=/^(\/?https?.{3}[^/:?]+)~/,A=/^(\/?https?).{3}/,J=function(e){return e.replace(A,"$1://").replace(U,"$1:")},K=function(e){return e.replace(N,"$1~").replace(I,"$1~~~")},B=/^\//,V=/^(https?)%3A%2F%2F/,z=function(e){return/^\/+https?[:~][/~]{2}/.test(e)?J(function(e){return e.replace(B,"")}(e).replace(V,(function(e,t){return"".concat(t,"://")}))):e},G=function(e,t){if("function"==typeof e)return e;var r,n=g()(e)?L({},e):e;(r=g()(e)?L({},e):{url:e}).query=W()(r.query)?void 0:r.query,r.headers=W()(r.headers)?void 0:Object.entries(r.headers).reduce((function(e,t){var r=s()(t,2),n=r[0],o=r[1];return e[n.toLowerCase()]=o,e}),{}),r.method&&"all"!==r.method&&"ALL"!==r.method&&"*"!==r.method?"string"==typeof r.method&&(r.method=r.method.toLowerCase()):delete r.method;var o=L({},r.$meta||{});if(r.path&&(r.url=r.path,delete r.path),"*"===r.url&&delete r.url,"string"==typeof r.url){r.url=z(r.url);var a=function(e){var t;return/^https?:/.test(e)?(t=Object(x.parse)(e),e="".concat(t.protocol||"http:","//").concat(t.hostname).concat(t.port&&!["80","443"].includes(t.port)?":".concat(t.port):"").concat(t.pathname)):(t=Object(x.parse)("http://example.com".concat(e.startsWith("/")?e:"/".concat(e))),e=t.pathname||""),{url:e,query:t.query?b.a.parse(t.query):void 0}}(r.url);r.url=a.url.replace(/\/+$/,"")||"/",r.query=g()(r.query)?L({},a.query,{},r.query):r.query||a.query}W()(r.query)&&delete r.query,W()(r.cookies)&&delete r.cookies;var i=L({},r);r.url||(i.url="*"),o.original=n,o.originalNormal=i,o.originalSerialized=function e(t){return M()(t,(function(t){return C()(t)?{$regex:{source:t.source,flags:t.flags}}:g()(t)?M()(t,(function(t){return e(t)})):t}))}(i);var c=r.url;if("string"==typeof r.url){if(!t){var u=[],l=$()(K(r.url),u);r.url=function(e){return l.test(K(e)||K("/".concat(e)))},o.regex=l,o.matchKeys=u,o.fn=r.url.toString(),r.url.toStringForMatchDeep=function(){return'"'.concat(null==c?void 0:c.toString(),'"')}}}else if(C()(r.url)){if(!t){var f=r.url;r.url=function(e){return f.test(J(e))||f.test(J("/".concat(e)))},o.regex=f,o.fn=r.url.toString(),r.url.toStringForMatchDeep=function(){return null==c?void 0:c.toString()}}}else if("function"==typeof r.url){var p=r.url;r.url=function(e){return p(e)||p("/".concat(e))}}return L({},r,{$meta:o})},X=r(12),Y=r.n(X),Q=function(e,t){var r=e.$meta?e.$meta.originalNormal:void 0,n=t.$meta?t.$meta.originalNormal:void 0;return g()(r)&&g()(n)?!(!r||!n)&&(r.url===n.url&&r.path===n.path&&r.method===n.method&&Y()(r.query,n.query)&&Y()(r.body,n.body)&&Y()(r.headers,n.headers)&&Y()(r.cookies,n.cookies)):r===n},Z=r(20),ee=r.n(Z);function te(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function re(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?te(Object(r),!0).forEach((function(t){v()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):te(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var ne=function(e,t,r){return"function"==typeof e?e(t,r):e},oe=function(){var e=l()(o.a.mark((function e(t,r,n,a){var i,c,s,u,l,f,p,h,d,m,v,x,y,b,k,g;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=n.responseHeaders,c=n.fixtureResolver,s=n.fileResolver,u=t[1]||{},e.t1=u.status,!e.t1){e.next=7;break}return e.next=6,ne(u.status,r,a);case 6:e.t1=e.sent;case 7:if(e.t0=e.t1,e.t0){e.next=10;break}e.t0=200;case 10:if(l=e.t0,e.t2=u.type,!e.t2){e.next=16;break}return e.next=15,ne(u.type,r,a);case 15:e.t2=e.sent;case 16:if(p=e.t2,!u.fixture){e.next=34;break}if(c){e.next=20;break}throw new Error("Using `fixture` in mock response options requires a `fixtureResolver`.");case 20:return e.next=22,ne(u.fixture,r,a);case 22:if(m=e.sent,p=p||m,!m){e.next=30;break}return e.next=27,c(m);case 27:e.t3=e.sent,e.next=31;break;case 30:e.t3=void 0;case 31:f=e.t3,e.next=78;break;case 34:if(!u.filePath){e.next=51;break}if(s){e.next=37;break}throw new Error("Using `filePath` in mock response options requires a `fileResolver`.");case 37:return e.next=39,ne(u.filePath,r,a);case 39:if(v=e.sent,p=p||v,!v){e.next=47;break}return e.next=44,s(v);case 44:e.t4=e.sent,e.next=48;break;case 47:e.t4=void 0;case 48:f=e.t4,e.next=78;break;case 51:if(!u.json){e.next=59;break}return e.next=54,ne(u.json,r,a);case 54:d=e.sent,f=JSON.stringify(d),h="application/json; charset=UTF-8",e.next=78;break;case 59:if(!u.text){e.next=66;break}return e.next=62,ne(u.text,r,a);case 62:f=e.sent,h="text/plain; charset=UTF-8",e.next=78;break;case 66:if(!u.html){e.next=73;break}return e.next=69,ne(u.html,r,a);case 69:f=e.sent,h="text/html; charset=UTF-8",e.next=78;break;case 73:if(!u.raw){e.next=78;break}return e.next=76,ne(u.raw,r,a);case 76:f=e.sent,h=void 0;case 78:if(f=f||"",h=p?ee.a.getType(p)||p:h,!u.headers){e.next=89;break}return e.t6=re,e.t7={},e.next=85,ne(u.headers,r,a);case 85:e.t8=e.sent,e.t5=(0,e.t6)(e.t7,e.t8),e.next=90;break;case 89:e.t5={};case 90:if(x=e.t5,i&&(x["x-mockyeah-mocked"]="true"),h&&(x["content-type"]=h),y={status:l,headers:x},!(b=u.latency||n.latency)){e.next=101;break}return e.next=98,ne(b,r,a);case 98:return k=e.sent,e.next=101,new Promise((function(e){return setTimeout(e,k)}));case 101:return g=new Response(f,y),e.abrupt("return",{response:g,json:d});case 103:case"end":return e.stop()}}),e)})));return function(t,r,n,o){return e.apply(this,arguments)}}(),ae=r(21),ie=r.n(ae),ce=r(2),se=r.n(ce),ue=function(e){return e&&(e instanceof Promise||!(!e.then||!e.catch))},le=function(e,t,r){var n=E()(e,t,{skipKeys:["$meta"]}),o=n.result,a=n.message;se()(o,"".concat(r,": ").concat(a))},fe=function(){function e(t){p()(this,e);var r=t.$meta&&t.$meta.originalNormal?t.$meta.originalNormal:t;this.prefix="[".concat(r.method||"all","] ").concat(r.path||r.url," --"),this.called=0,this.assertions=[],this.handlers=[],this.verifier=this.verifier.bind(this),this.run=this.run.bind(this),this.verify=this.verify.bind(this)}return d()(e,[{key:"request",value:function(e){var t=this;this.called+=1,this.handlers.forEach((function(r){t.assertions.push(r.bind(t,e))}))}},{key:"api",value:function(e){var t=this;if("function"==typeof e){var r=e;this.handlers.push((function(e){try{var n=r(e);if(void 0!==n&&!n)throw new Error("function returned false")}catch(e){var o="".concat(t.prefix," Expect function did not match").concat(e&&e.message?": ".concat(e.message):"");se()(!1,o)}}))}else if("object"===ie()(e)){var n=G(e);this.handlers.push((function(e){var t=E()(e,n,{skipKeys:["$meta"]}),r=t.result,o=t.message;se()(r,"Expect object did not match: ".concat(o))}))}return this}},{key:"atLeast",value:function(e){var t=this;return this.assertions.push((function(){se()(t.called>=e,"".concat(t.prefix," Expected route to be called at least ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"atMost",value:function(e){var t=this;return this.assertions.push((function(){se()(t.called<=e,"".concat(t.prefix," Expected route to be called at most ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"never",value:function(){var e=this;return this.assertions.push((function(){se()(0===e.called,"".concat(e.prefix," Expected route to be called never, but it was called ").concat(e.called," times"))})),this}},{key:"once",value:function(){var e=this;return this.assertions.push((function(){se()(1===e.called,"".concat(e.prefix," Expected route to be called once, but it was called ").concat(e.called," times"))})),this}},{key:"twice",value:function(){var e=this;return this.assertions.push((function(){se()(2===e.called,"".concat(e.prefix," Expected route to be called twice, but it was called ").concat(e.called," times"))})),this}},{key:"thrice",value:function(){var e=this;return this.assertions.push((function(){se()(3===e.called,"".concat(e.prefix," Expected route to be called thrice, but it was called ").concat(e.called," times"))})),this}},{key:"exactly",value:function(e){var t=this;return this.assertions.push((function(){se()(t.called===e,"".concat(t.prefix," Expected route to be called ").concat(e," times, but it was called ").concat(t.called," times"))})),this}},{key:"path",value:function(e){var t="".concat(this.prefix," Path did not match expected");return this.handlers.push((function(r){var n=r.path;le(n,e,t)})),this}},{key:"url",value:function(e){return this.path(e)}},{key:"header",value:function(e,t){var r="".concat(this.prefix,' Header "').concat(e,'" did not match expected');return this.handlers.push((function(n){le(n.headers&&(n.headers[e]||n.headers[e.toLowerCase()]),t,r)})),this}},{key:"params",value:function(e){var t="".concat(this.prefix," Params did not match expected");return this.handlers.push((function(r){le(r.query||{},e||{},t)})),this}},{key:"query",value:function(e){return this.params(e)}},{key:"body",value:function(e){var t="".concat(this.prefix," Body did not match expected");return this.handlers.push((function(r){le(r.body,e,t)})),this}},{key:"verifier",value:function(e){var t=this;return function(r){r?e(r):t.verify(e)}}},{key:"run",value:function(e){return ue(e)?this.runPromise=e:this.runPromise=new Promise((function(t,r){setTimeout((function(){var n=e((function(e){e?r(e):t()}));ue(n)&&n.then(t).catch(r)}))})),this}},{key:"verify",value:function(e){var t=this,r=function(t){if(!e)throw t;e(t)},n=function(){try{t.assertions.forEach((function(e){return e()})),e&&e()}catch(e){r(e)}};if(this.runPromise)return this.runPromise.then(n).catch(r);n()}}]),e}(),pe=function(){var e=l()(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(204!==t.status){e.next=3;break}return e.abrupt("return","");case 3:return e.abrupt("return",t.text()||"");case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),he=function(e,t){var r=e&&e.get("Content-Type"),n=null==r?void 0:r.includes("application/json"),o=null==r?void 0:r.includes("application/x-www-form-urlencoded");if(t){if(n)return JSON.parse(t);if(o)return b.a.parse(t)}return t},de=r(22),me=r.n(de),ve=function(e){if(!e)return{};if(e.entries){var t=e.entries();return me()(i()(t).map((function(e){return[e[0].toLowerCase(),e[1]]})))}if(e.forEach){var r={};return e.forEach((function(e,t){r[t]=e})),r}return{}},xe=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},ye=["json","text","html","raw","filePath","fixture","status","type","latency","headers"];function be(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ke(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?be(Object(r),!0).forEach((function(t){v()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):be(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var ge=S()("mockyeah:fetch:mock"),we=S()("mockyeah:fetch:hit"),Oe=S()("mockyeah:fetch:miss"),Pe=S()("mockyeah:fetch:miss:each"),qe=S()("mockyeah:fetch:error"),je=S()("mockyeah:fetch:admin"),Se=S()("mockyeah:fetch:admin:error"),_e={},Ee=function(e,t){return ke({},g()(e)?e:{url:e},{method:t})},Te=function(e){var t=e.name,r=void 0===t?"default":t,n=e.noProxy,o=void 0!==n&&n,a=e.prependServerURL,i=void 0!==a&&a,c=e.noPolyfill,s=void 0!==c&&c,u=e.noWebSocket,l=void 0!==u&&u,f=e.host,p=void 0===f?"localhost":f,h=e.port,d=void 0===h?4001:h,m=e.portHttps,v=e.adminHost,x=void 0===v?p:v,y=e.adminPort,b=void 0===y?4777:y,k=e.suiteHeader,g=void 0===k?"x-mockyeah-suite":k,w=e.suiteCookie,O=void 0===w?"mockyeahSuite":w,P=e.latency,q=e.ignorePrefix,j=void 0===q?"http".concat(m?"s":"","://").concat(p,":").concat(m||d,"/"):q,S=e.aliases,_=void 0===S?[]:S,E=e.responseHeaders,T=void 0===E||E,$=e.fetch,R=void 0===$?global.fetch:$,W=e.fileResolver,H=e.fixtureResolver,C=e.mockSuiteResolver,D=e.devTools,M=void 0!==D&&D,F=e.devToolsTimeout,L=void 0===F?1e3:F,N=e.devToolsInterval;return{name:r,noProxy:o,prependServerURL:i,noPolyfill:s,noWebSocket:l,host:p,port:d,portHttps:m,adminHost:x,adminPort:b,suiteHeader:g,suiteCookie:O,latency:P,ignorePrefix:j,aliases:_,responseHeaders:T,fetch:R,fileResolver:W,fixtureResolver:H,mockSuiteResolver:C,devTools:M,devToolsTimeout:L,devToolsInterval:void 0===N?100:N}},$e=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_e;p()(this,e);var r=Te(t),n=r.name,o=r.noPolyfill,a=r.aliases,i=r.fetch;this.__private={recording:!1,bootOptions:r,logPrefix:"[".concat(n,"]"),mocks:[]};var c=this.__private.logPrefix;if(!i){var s="".concat(c," @mockyeah/fetch requires a fetch implementation");throw qe(s),new Error(s)}var u={};(a||[]).forEach((function(e){e.forEach((function(t){u[t]=e}))})),this.__private.aliasReplacements=u,o||(global.fetch=this.fetch.bind(this));var l={all:this.all.bind(this),get:this.get.bind(this),post:this.post.bind(this),put:this.put.bind(this),delete:this.delete.bind(this),options:this.options.bind(this),patch:this.patch.bind(this)};this.methods=l}var t,r,n;return d()(e,[{key:"fetch",value:(n=l()(o.a.mark((function e(t,r){var n,a,c,u,l,f,p,h,d,m,y,k,w,P,j,S,_,T,$,R,W,H,C,D,M,F,L,N,I,U,A,J,K,B,V,z,X,Y,Q,Z,ee,te,re,ne,ae,ie,ce,se,ue,le,fe,pe,de,me=this,xe=arguments;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=xe.length>2&&void 0!==xe[2]?xe[2]:{},a=this.__private,c=a.logPrefix,u=a.mocks,l=a.bootOptions,f=a.aliasReplacements,p=l.noWebSocket,h=l.ignorePrefix,d=l.noProxy,m=l.prependServerURL,y=l.suiteCookie,k=l.suiteHeader,w=l.port,P=l.portHttps,j=l.host,S=l.mockSuiteResolver,_=l.devTools,T=l.devToolsTimeout,$=l.devToolsInterval,R=n.dynamicMocks,W=n.dynamicMockSuite,H=n.noProxy,C=void 0===H?d:H,p){e.next=12;break}return e.prev=5,e.next=8,this.connectWebSocket();case 8:e.next=12;break;case 10:e.prev=10,e.t0=e.catch(5);case 12:if(!_){e.next=15;break}return e.next=15,new Promise((function(e){var t=0,r=setInterval((function(){var n;t+=1,((null===(n=window.__MOCKYEAH_DEVTOOLS_EXTENSION__)||void 0===n?void 0:n.loadedMocks)||t>T/$)&&(e(),clearInterval(r))}),$)}));case 15:if(D="string"==typeof t?t:t.url,M=r||{},F=(R||[]).map((function(e){return e&&me.makeMock(e[0],e[1],{keepExisting:!0}).mock})).filter(Boolean),L=Object(x.parse)(D),N=M.headers?M.headers instanceof Headers?M.headers:new Headers(M.headers):void 0,!M.body||"string"==typeof M.body){e.next=23;break}return qe("".concat(c," @mockyeah/fetch does not yet support non-string request bodies, falling back to normal fetch")),e.abrupt("return",this.fallbackFetch(D,r,{noProxy:C}));case 23:if(I=N&&he(N,M.body),U=L.query?b.a.parse(L.query):void 0,A=M.method?M.method.toLowerCase():"get",!M.headers||g()(M.headers)){e.next=29;break}return qe("".concat(c," @mockyeah/fetch does not yet support non-object request headers, falling back to normal fetch")),e.abrupt("return",this.fallbackFetch(D,r,{noProxy:C}));case 29:J=M.headers;try{(B=J&&(J.cookie||J.Cookie))?K=q.a.parse(B):"undefined"!=typeof window&&(K=q.a.parse(window.document.cookie))}catch(e){qe("".concat(c," @mockyeah/fetch couldn't parse cookies: ").concat(e.message))}if(!(V=W||K&&K[y])||!S){e.next=39;break}return z=V.split(",").map((function(e){return e.trim()})),X=z.map(S),e.next=37,Promise.all(X);case 37:e.sent.forEach((function(e,t){var r=z[t];(e.default||e).forEach((function(e){var t=s()(e,2),n=t[0],o=t[1],a=g()(n)?ke({},n):{url:n};a.cookies=ke({},a.cookies,{mockSuite:function(e){return!!e&&e.split(",").map((function(e){return e.trim()})).includes(r)}}),F.push(me.makeMock(a,o,{keepExisting:!0}).mock)}))}));case 39:if(Y={url:D.replace(h,""),query:U,headers:J,body:I,method:A,cookies:K},[Q=G(Y,!0)].concat(i()(g()(Q)?O()(f&&Object.entries(f).map((function(e){var t=s()(e,2),r=t[0],n=t[1],o=Q.url;return"string"==typeof o&&o.replace(/^\//,"").startsWith(r)?n.map((function(e){return ke({},Q,{url:o.replace(r,e)})})):[]}))):[])).filter(Boolean).find((function(e){return[].concat(i()((F||[]).filter(Boolean)),i()(u)).find((function(t){var r=G(t[0]),n=E()(e,r,{skipKeys:["$meta"]});return n.result?(Z=t,!0):(Pe("".concat(c," @mockyeah/fetch missed mock for"),D,n.message,{request:Y}),!1)}))})),ee="".concat(L.protocol?"".concat(L.protocol,"//"):"").concat(L.host||"").concat(L.pathname||"/"),te={url:ee,path:ee,query:U,method:A,headers:J,body:I,cookies:K},!Z){e.next=66;break}if(Z[0]&&Z[0].$meta&&Z[0].$meta.expectation&&Z[0].$meta.expectation.request(te),!(ne=Z[1])||!ye.some((function(e){return"function"==typeof ne[e]&&ne[e].length>1}))){e.next=59;break}return e.next=51,this.fallbackFetch(D,M);case 51:return ae=e.sent,e.t1=he,e.t2=ae.headers,e.next=56,ae.text();case 56:e.t3=e.sent,ie=(0,e.t1)(e.t2,e.t3),re={status:ae.status,body:ie,headers:ve(ae.headers)};case 59:return e.next=61,oe(Z,te,l,re);case 61:return ce=e.sent,se=ce.response,ue=ce.json,we("".concat(c," @mockyeah/fetch matched mock for"),D,{request:te,response:se,json:ue,mock:Z}),e.abrupt("return",se);case 66:return Oe("".concat(c," @mockyeah/fetch missed all mocks for"),D,{request:te}),le="http".concat(P?"s":"","://").concat(j,":").concat(P||w),fe=M,m&&le&&(D="".concat(le,"/").concat(D.replace("://","~~~")),"undefined"!=typeof document&&(de=document.cookie.match("\\b".concat(y,"=([^;]+)\\b")),pe=de&&de[1]),fe=ke({},M,{headers:ke({},M.headers,{},pe&&v()({},k,pe))})),e.abrupt("return",this.fallbackFetch(D,fe,{noProxy:C}));case 71:case"end":return e.stop()}}),e,this,[[5,10]])}))),function(e,t){return n.apply(this,arguments)})},{key:"fallbackFetch",value:(r=l()(o.a.mark((function e(t,r){var n,a,i,c,s,u,l,f,p,h,d,m,v,x,y,b,k,g,w,O,P=arguments;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=P.length>2&&void 0!==P[2]?P[2]:{},a=n.noProxy,i=this.__private.bootOptions,c=i.responseHeaders,s=i.fetch,u="string"==typeof t?t:t.url,!a&&u.startsWith("http")){e.next=8;break}return l={},c&&(l["x-mockyeah-missed"]="true"),e.abrupt("return",new Response("",{status:404,headers:l}));case 8:return f=(new Date).getTime(),e.next=11,s(t,r);case 11:return p=e.sent,e.next=14,pe(p);case 14:return h=e.sent,d=this.__private,m=d.ws,d.recording&&(v=p.status,x=ve(p.headers),m&&(y={type:"recordPush",payload:{reqUrl:u,req:{method:r&&r.method,body:r&&r.body},startTime:f,body:h,headers:x,status:v}},m.send(JSON.stringify(y)))),c&&(k=(b=p).status,g=b.statusText,w=b.headers,(O=w&&new Headers(w))&&(O.set("x-mockyeah-proxied","true"),O.set("x-mockyeah-missed","true")),p=new Response(h,{headers:O,status:k,statusText:g})),e.abrupt("return",p);case 19:case"end":return e.stop()}}),e,this)}))),function(e,t){return r.apply(this,arguments)})},{key:"expect",value:function(e){return this.all("*").expect(e)}},{key:"all",value:function(e,t){return this.mock(e,t)}},{key:"get",value:function(e,t){return this.mock(Ee(e,"get"),t)}},{key:"post",value:function(e,t){return this.mock(Ee(e,"post"),t)}},{key:"put",value:function(e,t){return this.mock(Ee(e,"put"),t)}},{key:"delete",value:function(e,t){return this.mock(Ee(e,"delete"),t)}},{key:"options",value:function(e,t){return this.mock(Ee(e,"options"),t)}},{key:"patch",value:function(e,t){return this.mock(Ee(e,"patch"),t)}},{key:"reset",value:function(){this.__private.mocks=[]}},{key:"makeMock",value:function(e,t){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.keepExisting,a=G(e),i=this.__private.mocks,c=[];if(!o){var s,u=i.findIndex((function(e){return Q(a,e[0])}));if(u>=0)r=null!==(s=r)&&void 0!==s?s:u,c.push(i[u]),i.splice(u,1)}var l="string"==typeof t?{text:t}:t;return l=l||{status:200},a.$meta&&(a.$meta.expectation=new fe(a),a.$meta.id=xe()),{mock:[a,l],removed:c,removedIndex:r}}},{key:"mock",value:function(e,t){var r,n=this.makeMock(e,t),o=n.mock,a=n.removed,i=n.removedIndex,c=null===(r=o[0].$meta)||void 0===r?void 0:r.id,s=this.__private,u=s.mocks,l=s.logPrefix;ge("".concat(l," mocked"),e,t),null!=i?u.splice(i,0,o):u.push(o);var f=o[0].$meta&&o[0].$meta.expectation,p=a.map((function(e){var t,r;return null===(t=e[0])||void 0===t?void 0:null===(r=t.$meta)||void 0===r?void 0:r.id})),h=f.api.bind(f);return{id:c,removedIds:p,expect:function(e){return h(e)}}}},{key:"unmock",value:function(e){var t=this.__private,r=t.mocks,n=t.logPrefix,o=r.findIndex((function(t){var r;return(null===(r=t[0].$meta)||void 0===r?void 0:r.id)===e}));return-1===o?(ge("".concat(n," didn't find id to unmock"),e),!1):(r.splice(o,1),ge("".concat(n," unmocked"),e),!0)}},{key:"connectWebSocket",value:(t=l()(o.a.mark((function e(){var t,r,n,a,i=this;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("undefined"!=typeof WebSocket){e.next=2;break}return e.abrupt("return");case 2:if(!this.__private.ws){e.next=4;break}return e.abrupt("return");case 4:t=this.__private.bootOptions,r=t.adminPort,n=t.adminHost,a="ws://".concat(n,":").concat(r),je("WebSocket trying to connect to '".concat(a,"'.")),e.prev=7,this.__private.ws=new WebSocket(a),e.next=16;break;case 11:throw e.prev=11,e.t0=e.catch(7),Se("WebSocket couldn't connect to '".concat(a,"':"),e.t0),delete this.__private.ws,e.t0;case 16:return e.next=18,new Promise((function(e,t){var r=i.__private.ws;r&&(r.onopen=function(){je("WebSocket opened"),r.send(JSON.stringify({type:"opened"})),e()},r.onerror=function(e){Se("WebSocket errored",e),t(e)},r.onclose=function(){Se("WebSocket closed"),i.__private.recording=!1,delete i.__private.ws,t(new Error("WebSocket closed"))},r.onmessage=function(e){var t;je("WebSocket message",e);try{t=JSON.parse(e.data)}catch(t){return void Se("Couldn't parse WebSocket message data '".concat(e.data,"':"),t)}t&&(je("WebSocket action",t),"record"===t.type?i.__private.recording=!0:"recordStop"===t.type&&(i.__private.recording=!1))})}));case 18:case"end":return e.stop()}}),e,this,[[7,11]])}))),function(){return t.apply(this,arguments)})}]),e}();t.default=$e}]).default; |
@@ -6,4 +6,4 @@ import { MatchNormal, Match } from './types'; | ||
}; | ||
declare const normalize: (match: Match, incoming?: boolean | undefined) => MatchNormal; | ||
declare const normalize: (_match: Match, incoming?: boolean | undefined) => MatchNormal; | ||
export { stripQuery }; | ||
export { normalize }; |
@@ -12,2 +12,3 @@ "use strict"; | ||
const isRegExp_1 = __importDefault(require("lodash/isRegExp")); | ||
const mapValues_1 = __importDefault(require("lodash/mapValues")); | ||
const decodedPortRegex = /^(\/?https?.{3}[^/:?]+):/; | ||
@@ -38,2 +39,18 @@ const decodedProtocolRegex = /^(\/?https?).{3}/; | ||
exports.stripQuery = stripQuery; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
const serializeObject = (object) => | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
mapValues_1.default(object, (value) => { | ||
if (isRegExp_1.default(value)) { | ||
return { | ||
$regex: { | ||
source: value.source, | ||
flags: value.flags | ||
} | ||
}; | ||
} | ||
if (isPlainObject_1.default(value)) | ||
return mapValues_1.default(value, v => serializeObject(v)); | ||
return value; | ||
}); | ||
const leadingSlashRegex = /^\//; | ||
@@ -48,9 +65,10 @@ const leadUrlEncodedProtocolRegex = /^(https?)%3A%2F%2F/; | ||
}; | ||
const normalize = (match, incoming) => { | ||
if (typeof match === 'function') | ||
return match; | ||
const originalMatch = isPlainObject_1.default(match) ? { ...match } : match; | ||
if (!isPlainObject_1.default(match)) { | ||
const normalize = (_match, incoming) => { | ||
if (typeof _match === 'function') | ||
return _match; | ||
const originalMatch = isPlainObject_1.default(_match) ? { ..._match } : _match; | ||
let match; | ||
if (!isPlainObject_1.default(_match)) { | ||
match = { | ||
url: match | ||
url: _match | ||
}; | ||
@@ -62,3 +80,3 @@ } | ||
// @ts-ignore | ||
...match | ||
..._match | ||
}; | ||
@@ -73,6 +91,3 @@ } | ||
}, {}); | ||
if (!match.method) { | ||
match.method = 'get'; | ||
} | ||
else if (match.method === 'all' || match.method === 'ALL' || match.method === '*') { | ||
if (!match.method || match.method === 'all' || match.method === 'ALL' || match.method === '*') { | ||
delete match.method; | ||
@@ -108,4 +123,9 @@ } | ||
}; | ||
if (!match.url) { | ||
originalNormal.url = '*'; | ||
} | ||
$meta.original = originalMatch; | ||
$meta.originalNormal = originalNormal; | ||
$meta.originalSerialized = serializeObject(originalNormal); | ||
const { url } = match; | ||
if (typeof match.url === 'string') { | ||
@@ -120,2 +140,3 @@ if (!incoming) { | ||
$meta.fn = match.url.toString(); | ||
match.url.toStringForMatchDeep = () => `"${url?.toString()}"`; | ||
} | ||
@@ -129,2 +150,3 @@ } | ||
$meta.fn = match.url.toString(); | ||
match.url.toStringForMatchDeep = () => url?.toString(); | ||
} | ||
@@ -131,0 +153,0 @@ } |
@@ -85,3 +85,3 @@ module.exports = | ||
/******/ // Load entry module and return exports | ||
/******/ return __webpack_require__(__webpack_require__.s = 8); | ||
/******/ return __webpack_require__(__webpack_require__.s = 9); | ||
/******/ }) | ||
@@ -93,3 +93,3 @@ /************************************************************************/ | ||
module.exports = require("lodash/isEmpty"); | ||
module.exports = require("lodash/isPlainObject"); | ||
@@ -100,3 +100,3 @@ /***/ }), | ||
module.exports = require("lodash/isPlainObject"); | ||
module.exports = require("lodash/isEmpty"); | ||
@@ -113,3 +113,3 @@ /***/ }), | ||
module.exports = require("@babel/runtime/helpers/slicedToArray"); | ||
module.exports = require("lodash/isRegExp"); | ||
@@ -120,3 +120,3 @@ /***/ }), | ||
module.exports = require("@babel/runtime/helpers/defineProperty"); | ||
module.exports = require("lodash/mapValues"); | ||
@@ -127,3 +127,3 @@ /***/ }), | ||
module.exports = require("qs"); | ||
module.exports = require("@babel/runtime/helpers/slicedToArray"); | ||
@@ -134,3 +134,3 @@ /***/ }), | ||
module.exports = require("path-to-regexp"); | ||
module.exports = require("@babel/runtime/helpers/defineProperty"); | ||
@@ -141,6 +141,12 @@ /***/ }), | ||
module.exports = require("lodash/isRegExp"); | ||
module.exports = require("qs"); | ||
/***/ }), | ||
/* 8 */ | ||
/***/ (function(module, exports) { | ||
module.exports = require("path-to-regexp"); | ||
/***/ }), | ||
/* 9 */ | ||
/***/ (function(module, __webpack_exports__, __webpack_require__) { | ||
@@ -152,18 +158,20 @@ | ||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalize", function() { return normalize; }); | ||
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); | ||
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); | ||
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); | ||
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); | ||
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); | ||
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__); | ||
/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2); | ||
/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(url__WEBPACK_IMPORTED_MODULE_2__); | ||
/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); | ||
/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7); | ||
/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(qs__WEBPACK_IMPORTED_MODULE_3__); | ||
/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); | ||
/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8); | ||
/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_4__); | ||
/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1); | ||
/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(0); | ||
/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5__); | ||
/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(0); | ||
/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1); | ||
/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6__); | ||
/* harmony import */ var lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7); | ||
/* harmony import */ var lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3); | ||
/* harmony import */ var lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7__); | ||
/* harmony import */ var lodash_mapValues__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4); | ||
/* harmony import */ var lodash_mapValues__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(lodash_mapValues__WEBPACK_IMPORTED_MODULE_8__); | ||
@@ -174,3 +182,3 @@ | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
@@ -183,2 +191,3 @@ | ||
var decodedPortRegex = /^(\/?https?.{3}[^/:?]+):/; | ||
@@ -213,2 +222,23 @@ var decodedProtocolRegex = /^(\/?https?).{3}/; | ||
}; | ||
}; // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
var serializeObject = function serializeObject(object) { | ||
return (// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
lodash_mapValues__WEBPACK_IMPORTED_MODULE_8___default()(object, function (value) { | ||
if (lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7___default()(value)) { | ||
return { | ||
$regex: { | ||
source: value.source, | ||
flags: value.flags | ||
} | ||
}; | ||
} | ||
if (lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default()(value)) return lodash_mapValues__WEBPACK_IMPORTED_MODULE_8___default()(value, function (v) { | ||
return serializeObject(v); | ||
}); | ||
return value; | ||
}) | ||
); | ||
}; | ||
@@ -230,13 +260,14 @@ | ||
var normalize = function normalize(match, incoming) { | ||
if (typeof match === 'function') return match; | ||
var originalMatch = lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default()(match) ? _objectSpread({}, match) : match; | ||
var normalize = function normalize(_match, incoming) { | ||
if (typeof _match === 'function') return _match; | ||
var originalMatch = lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default()(_match) ? _objectSpread({}, _match) : _match; | ||
var match; | ||
if (!lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default()(match)) { | ||
if (!lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_5___default()(_match)) { | ||
match = { | ||
url: match | ||
url: _match | ||
}; | ||
} else { | ||
// shallow copy | ||
match = _objectSpread({}, match); | ||
match = _objectSpread({}, _match); | ||
} | ||
@@ -254,5 +285,3 @@ | ||
if (!match.method) { | ||
match.method = 'get'; | ||
} else if (match.method === 'all' || match.method === 'ALL' || match.method === '*') { | ||
if (!match.method || match.method === 'all' || match.method === 'ALL' || match.method === '*') { | ||
delete match.method; | ||
@@ -291,4 +320,11 @@ } else if (typeof match.method === 'string') { | ||
if (!match.url) { | ||
originalNormal.url = '*'; | ||
} | ||
$meta.original = originalMatch; | ||
$meta.originalNormal = originalNormal; | ||
$meta.originalSerialized = serializeObject(originalNormal); | ||
var _match2 = match, | ||
url = _match2.url; | ||
@@ -308,2 +344,6 @@ if (typeof match.url === 'string') { | ||
$meta.fn = match.url.toString(); | ||
match.url.toStringForMatchDeep = function () { | ||
return "\"".concat(url === null || url === void 0 ? void 0 : url.toString(), "\""); | ||
}; | ||
} | ||
@@ -320,2 +360,6 @@ } else if (lodash_isRegExp__WEBPACK_IMPORTED_MODULE_7___default()(match.url)) { | ||
$meta.fn = match.url.toString(); | ||
match.url.toStringForMatchDeep = function () { | ||
return url === null || url === void 0 ? void 0 : url.toString(); | ||
}; | ||
} | ||
@@ -322,0 +366,0 @@ } else if (typeof match.url === 'function') { |
@@ -1,10 +0,9 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const parseBody = async (res) => { | ||
const { status } = res; | ||
if (status === 204) | ||
return ''; | ||
return res.text() || ''; | ||
'use strict'; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
const parseBody = async res => { | ||
const { status } = res; | ||
if (status === 204) return ''; | ||
return res.text() || ''; | ||
}; | ||
exports.parseBody = parseBody; | ||
//# sourceMappingURL=parseBody.js.map | ||
//# sourceMappingURL=parseBody.js.map |
@@ -1,2 +0,2 @@ | ||
import { MockNormal, RequestForHandler, BootOptions, Json } from './types'; | ||
import { MockNormal, RequestForHandler, BootOptions, Json, ResponseObject } from './types'; | ||
interface Respond { | ||
@@ -6,3 +6,3 @@ response: Response; | ||
} | ||
declare const respond: (matchingMock: MockNormal, requestForHandler: RequestForHandler, options: BootOptions) => Promise<Respond>; | ||
declare const respond: (matchingMock: MockNormal, requestForHandler: RequestForHandler, bootOptions: BootOptions, res?: ResponseObject | undefined) => Promise<Respond>; | ||
export { respond }; |
@@ -7,36 +7,29 @@ "use strict"; | ||
const mime_1 = __importDefault(require("mime")); | ||
const handler = (value, requestForHandler) => typeof value === 'function' ? value(requestForHandler) : value; | ||
const respond = async (matchingMock, requestForHandler, options) => { | ||
const { responseHeaders } = options; | ||
const handler = (value, requestForHandler, res) => typeof value === 'function' ? value(requestForHandler, res) : value; | ||
const respond = async (matchingMock, requestForHandler, bootOptions, res) => { | ||
const { responseHeaders, fixtureResolver, fileResolver } = bootOptions; | ||
const resOpts = matchingMock[1] || {}; | ||
const status = (resOpts.status && (await handler(resOpts.status, requestForHandler))) || 200; | ||
const status = (resOpts.status && (await handler(resOpts.status, requestForHandler, res))) || 200; | ||
let body; | ||
const awaitedType = (resOpts.type && (await resOpts.type)); | ||
let type; | ||
if (typeof awaitedType === 'function') { | ||
type = awaitedType(requestForHandler); | ||
} | ||
else { | ||
type = awaitedType; | ||
} | ||
let type = resOpts.type && (await handler(resOpts.type, requestForHandler, res)); | ||
let contentType; | ||
let json; | ||
if (resOpts.fixture) { | ||
if (!options.fixtureResolver) { | ||
if (!fixtureResolver) { | ||
throw new Error('Using `fixture` in mock response options requires a `fixtureResolver`.'); | ||
} | ||
const fixture = await handler(resOpts.fixture, requestForHandler); | ||
const fixture = await handler(resOpts.fixture, requestForHandler, res); | ||
type = type || fixture; // TODO: Use base name only to conceal file path? | ||
body = fixture ? await options.fixtureResolver(fixture) : undefined; | ||
body = fixture ? await fixtureResolver(fixture) : undefined; | ||
} | ||
else if (resOpts.filePath) { | ||
if (!options.fileResolver) { | ||
if (!fileResolver) { | ||
throw new Error('Using `filePath` in mock response options requires a `fileResolver`.'); | ||
} | ||
const filePath = await handler(resOpts.filePath, requestForHandler); | ||
const filePath = await handler(resOpts.filePath, requestForHandler, res); | ||
type = type || filePath; // TODO: Use base name only to conceal file path? | ||
body = filePath ? await options.fileResolver(filePath) : undefined; | ||
body = filePath ? await fileResolver(filePath) : undefined; | ||
} | ||
else if (resOpts.json) { | ||
json = await handler(resOpts.json, requestForHandler); | ||
json = await handler(resOpts.json, requestForHandler, res); | ||
body = JSON.stringify(json); | ||
@@ -46,19 +39,19 @@ contentType = 'application/json; charset=UTF-8'; | ||
else if (resOpts.text) { | ||
body = await handler(resOpts.text, requestForHandler); | ||
body = await handler(resOpts.text, requestForHandler, res); | ||
contentType = 'text/plain; charset=UTF-8'; | ||
} | ||
else if (resOpts.html) { | ||
body = await handler(resOpts.html, requestForHandler); | ||
body = await handler(resOpts.html, requestForHandler, res); | ||
contentType = 'text/html; charset=UTF-8'; | ||
} | ||
else if (resOpts.raw) { | ||
// TODO: This has different semantics that the Express version. | ||
body = await handler(resOpts.raw, requestForHandler); | ||
// TODO: This has different semantics than the Express version. | ||
body = await handler(resOpts.raw, requestForHandler, res); | ||
contentType = undefined; | ||
} | ||
body = body || ''; | ||
contentType = type ? mime_1.default.getType(type) : contentType; | ||
contentType = type ? mime_1.default.getType(type) || type : contentType; | ||
const headers = resOpts.headers | ||
? { | ||
...(await handler(resOpts.headers, requestForHandler)) | ||
...(await handler(resOpts.headers, requestForHandler, res)) | ||
} | ||
@@ -76,5 +69,5 @@ : {}; | ||
}; | ||
const latency = resOpts.latency || options.latency; | ||
const latency = resOpts.latency || bootOptions.latency; | ||
if (latency) { | ||
const latencyActual = await handler(latency, requestForHandler); | ||
const latencyActual = await handler(latency, requestForHandler, res); | ||
await new Promise(resolve => setTimeout(resolve, latencyActual)); | ||
@@ -81,0 +74,0 @@ } |
@@ -23,2 +23,5 @@ import pathToRegexp from 'path-to-regexp'; | ||
mockSuiteResolver?: MockSuiteResolver; | ||
devTools?: boolean; | ||
devToolsTimeout?: number; | ||
devToolsInterval?: number; | ||
} | ||
@@ -29,3 +32,7 @@ declare type MethodLower = 'get' | 'put' | 'delete' | 'post' | 'options' | 'patch'; | ||
declare type MethodOrAll = Method | 'all' | 'ALL' | '*'; | ||
declare type Json = Record<string, any>; | ||
interface JsonObject { | ||
[key: string]: Json; | ||
} | ||
declare type JsonPrimitive = string | number | boolean | null; | ||
declare type Json = JsonPrimitive | JsonPrimitive[] | JsonObject; | ||
interface RequestForHandler { | ||
@@ -35,3 +42,3 @@ url: string; | ||
method: Method; | ||
query?: Record<string, string>; | ||
query?: DeepObjectOfStrings; | ||
headers?: Record<string, string>; | ||
@@ -41,4 +48,9 @@ cookies?: Record<string, string>; | ||
} | ||
interface ResponseObject { | ||
status?: number; | ||
headers?: Record<string, string>; | ||
body?: any; | ||
} | ||
declare type ResponderResult<T> = T | Promise<T>; | ||
declare type ResponderFunction<T> = ((arg: RequestForHandler) => T) | ((arg: RequestForHandler) => Promise<T>); | ||
declare type ResponderFunction<T> = ((req: RequestForHandler, res?: ResponseObject) => T) | ((req: RequestForHandler, res?: ResponseObject) => Promise<T>); | ||
declare type Responder<T> = ResponderResult<T> | ResponderFunction<T>; | ||
@@ -55,7 +67,8 @@ interface ResponseOptionsObject { | ||
latency?: Responder<number>; | ||
headers?: Record<string, string>; | ||
headers?: Responder<Record<string, string>>; | ||
} | ||
declare const responseOptionsKeys: string[]; | ||
declare const responseOptionsResponderKeys: string[]; | ||
declare type ResponseOptions = string | ResponseOptionsObject; | ||
declare type Matcher<T> = T | ((arg: T) => boolean | undefined); | ||
declare type MatcherFunction<T> = (arg: T) => boolean | undefined; | ||
declare type Matcher<T> = T | MatcherFunction<T>; | ||
declare type MatchString<T = string> = Matcher<T> | RegExp; | ||
@@ -65,2 +78,12 @@ declare type VerifyCallback = (err?: Error) => void; | ||
declare type RunHandlerOrPromise = RunHandler | Promise<void>; | ||
interface DeepObjectOfStrings { | ||
[key: string]: string | DeepObjectOfStrings; | ||
} | ||
interface MatchDeepObjectOfStrings { | ||
[key: string]: MatchString | MatchDeepObjectOfStrings; | ||
} | ||
declare type MatcherDeepObjectOfStrings = MatchDeepObjectOfStrings | MatcherFunction<DeepObjectOfStrings>; | ||
declare type ObjectOfStrings = Record<string, string>; | ||
declare type MatchObjectOfStrings = Record<string, MatchString>; | ||
declare type MatcherObjectOfStrings = MatchObjectOfStrings | MatcherFunction<ObjectOfStrings>; | ||
interface Expectation { | ||
@@ -79,4 +102,4 @@ request(request: RequestForHandler): void; | ||
header(name: string, value: string): Expectation; | ||
params(match: Matcher<Record<string, MatchString>>): Expectation; | ||
query(match: Matcher<Record<string, MatchString>>): Expectation; | ||
params(match: MatcherDeepObjectOfStrings): Expectation; | ||
query(match: MatcherDeepObjectOfStrings): Expectation; | ||
body(match: any): Expectation; | ||
@@ -88,2 +111,3 @@ verifier(fn: () => void): (err?: Error) => void; | ||
interface MatchMeta { | ||
id?: string; | ||
fn?: string; | ||
@@ -94,11 +118,14 @@ regex?: RegExp; | ||
originalNormal?: MatchObject; | ||
originalSerialized?: MatchObject; | ||
expectation?: Expectation; | ||
} | ||
interface MatchObject { | ||
url?: MatchString<string>; | ||
path?: MatchString<string>; | ||
url?: MatchString & { | ||
toStringForMatchDeep?: () => string | undefined; | ||
}; | ||
path?: MatchString; | ||
method?: MatchString<MethodOrAll>; | ||
query?: Matcher<Record<string, MatchString>>; | ||
headers?: Matcher<Record<string, MatchString>>; | ||
cookies?: Matcher<Record<string, MatchString>>; | ||
query?: MatcherDeepObjectOfStrings; | ||
headers?: MatcherObjectOfStrings; | ||
cookies?: MatcherObjectOfStrings; | ||
body?: any; | ||
@@ -118,10 +145,20 @@ status?: Matcher<number>; | ||
declare type MockSuite = Mock[]; | ||
declare type MockSuiteResolver = (suiteName: string) => Promise<{ | ||
default: MockSuite; | ||
declare type MockSuiteResolver = (suiteName: string) => Promise<MockSuite & { | ||
default?: MockSuite; | ||
}>; | ||
declare type MockNormal = [MatchNormal, ResponseOptionsObject]; | ||
interface MockReturn { | ||
id: string; | ||
removedIds: string[]; | ||
expect(match: Match): Expectation; | ||
} | ||
declare type MockFunction = (match: Match, res?: ResponseOptions) => MockReturn; | ||
interface MakeMockOptions { | ||
keepExisting?: boolean; | ||
} | ||
interface MakeMockReturn { | ||
mock: MockNormal; | ||
removed: MockNormal[]; | ||
removedIndex?: number; | ||
} | ||
interface FetchOptions { | ||
@@ -136,2 +173,2 @@ dynamicMocks?: Mock[]; | ||
} | ||
export { Json, BootOptions, FetchOptions, Method, MethodOrAll, ResponseOptions, ResponseOptionsObject, Responder, ResponderFunction, ResponderResult, Matcher, Match, MatchFunction, MatchObject, MatchString, MatchNormal, Mock, MockSuite, MockSuiteResolver, MockNormal, MockFunction, MockReturn, RequestForHandler, responseOptionsKeys, Expectation, VerifyCallback, RunHandler, RunHandlerOrPromise, Action }; | ||
export { Json, BootOptions, FetchOptions, Method, MethodOrAll, ResponseOptions, ResponseOptionsObject, Responder, ResponderFunction, ResponderResult, ResponseObject, Matcher, MatcherDeepObjectOfStrings, MatcherObjectOfStrings, Match, MatchFunction, MatchObject, MatchString, MatchNormal, Mock, MockSuite, MockSuiteResolver, MockNormal, MockFunction, MockReturn, RequestForHandler, Expectation, VerifyCallback, RunHandler, RunHandlerOrPromise, Action, MakeMockOptions, MakeMockReturn, responseOptionsResponderKeys }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const responseOptionsKeys = [ | ||
'fixture', | ||
'filePath', | ||
'html', | ||
const responseOptionsResponderKeys = [ | ||
'json', | ||
'text', | ||
'html', | ||
'raw', | ||
'filePath', | ||
'fixture', | ||
'status', | ||
'headers', | ||
'raw', | ||
'type', | ||
'latency', | ||
'type' | ||
'headers' | ||
]; | ||
exports.responseOptionsKeys = responseOptionsKeys; | ||
exports.responseOptionsResponderKeys = responseOptionsResponderKeys; | ||
//# sourceMappingURL=types.js.map |
{ | ||
"name": "@mockyeah/fetch", | ||
"version": "1.0.0-alpha.6", | ||
"version": "1.0.0-alpha.7", | ||
"description": "fetch integration for mockyeah request mocking utility.", | ||
@@ -62,2 +62,3 @@ "main": "dist/main.js", | ||
"@babel/core": "^7.4.3", | ||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", | ||
"@babel/plugin-proposal-optional-chaining": "^7.7.4", | ||
@@ -68,3 +69,3 @@ "@babel/plugin-transform-runtime": "^7.6.2", | ||
"@babel/register": "^7.4.4", | ||
"@mockyeah/tools": "^1.0.0-alpha.6", | ||
"@mockyeah/tools": "^1.0.0-alpha.7", | ||
"@types/cookie": "^0.3.3", | ||
@@ -103,3 +104,3 @@ "@types/debug": "^4.1.5", | ||
"lodash": "^4.17.15", | ||
"match-deep": "^1.0.0-alpha.6", | ||
"match-deep": "^1.0.0-alpha.7", | ||
"mime": "^2.4.4", | ||
@@ -109,3 +110,3 @@ "path-to-regexp": "^3.1.0", | ||
}, | ||
"gitHead": "ec979464f201f110a8f69998b89d7a1742f207a4" | ||
"gitHead": "fd4afcb69ff03c7534386f9b7236bbf2af4de744" | ||
} |
Sorry, the diff of this file is too big to display
249774
31
2196
3
32
Updatedmatch-deep@^1.0.0-alpha.7