New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@mockyeah/fetch

Package Overview
Dependencies
Maintainers
2
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mockyeah/fetch - npm Package Compare versions

Comparing version 1.0.0-alpha.6 to 1.0.0-alpha.7

dist/handleEmptyBody.d.ts

6

dist/Expectation.d.ts

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc