msw 0.28.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1453,7 +1453,7 @@ function parseMultipartData(data, headers) {
1453
1453
  if (!contentType) {
1454
1454
  return undefined;
1455
1455
  }
1456
- const [, ...directives] = contentType.split('; ');
1456
+ const [, ...directives] = contentType.split(/; */);
1457
1457
  const boundary = directives
1458
1458
  .filter((d) => d.startsWith('boundary='))
1459
1459
  .map((s) => s.replace(/^boundary=/, ''))[0];
package/lib/esm/index.js CHANGED
@@ -690,9 +690,17 @@ const getResponse = (request, handlers) => __awaiter(void 0, void 0, void 0, fun
690
690
  return acc;
691
691
  }
692
692
  const result = yield handler.run(request);
693
- if (result === null || !result.response || result.handler.shouldSkip) {
693
+ if (result === null || result.handler.shouldSkip) {
694
694
  return null;
695
695
  }
696
+ if (!result.response) {
697
+ return {
698
+ request: result.request,
699
+ handler: result.handler,
700
+ response: undefined,
701
+ parsedResult: result.parsedResult,
702
+ };
703
+ }
696
704
  if (result.response.once) {
697
705
  handler.markAsSkipped(true);
698
706
  }
@@ -1458,8 +1466,8 @@ function requestIntegrityCheck(context, serviceWorker) {
1458
1466
  const { payload: actualChecksum } = yield context.events.once('INTEGRITY_CHECK_RESPONSE');
1459
1467
  // Compare the response from the Service Worker and the
1460
1468
  // global variable set by webpack upon build.
1461
- if (actualChecksum !== "795882c72c7304f6fa1d4a65a2418900") {
1462
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"795882c72c7304f6fa1d4a65a2418900"}).`);
1469
+ if (actualChecksum !== "82ef9b96d8393b6da34527d1d6e19187") {
1470
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"82ef9b96d8393b6da34527d1d6e19187"}).`);
1463
1471
  }
1464
1472
  return serviceWorker;
1465
1473
  });
@@ -7,7 +7,7 @@
7
7
  /* eslint-disable */
8
8
  /* tslint:disable */
9
9
 
10
- const INTEGRITY_CHECKSUM = '795882c72c7304f6fa1d4a65a2418900'
10
+ const INTEGRITY_CHECKSUM = '82ef9b96d8393b6da34527d1d6e19187'
11
11
  const bypassHeaderName = 'x-msw-bypass'
12
12
  const activeClientIds = new Set()
13
13
 
@@ -114,7 +114,7 @@ async function handleRequest(event, requestId) {
114
114
  // Send back the response clone for the "response:*" life-cycle events.
115
115
  // Ensure MSW is active and ready to handle the message, otherwise
116
116
  // this message will pend indefinitely.
117
- if (activeClientIds.has(client.id)) {
117
+ if (client && activeClientIds.has(client.id)) {
118
118
  ;(async function () {
119
119
  const clonedResponse = response.clone()
120
120
  sendToClient(client, {
package/lib/iife/index.js CHANGED
@@ -20,4 +20,4 @@ var MockServiceWorker=function(e){"use strict";var t={100:"Continue",101:"Switch
20
20
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21
21
  PERFORMANCE OF THIS SOFTWARE.
22
22
  ***************************************************************************** */
23
- function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}(t,["operations","map"]),o=C(r)||{};if(!o.query)return null;const s=C(n||"")||{},a=o.variables?function(e,t,r){const n={variables:e};for(const[e,i]of Object.entries(t)){if(!(e in r))throw new Error(`Given files do not have a key '${e}' .`);for(const t of i){const[i,...o]=t.split(".").reverse(),s=o.reverse();let a=n;for(const e of s){if(!(e in a))throw new Error(`Property '${s}' is not in operations.`);a=a[e]}a[i]=r[e]}}return n.variables}(o.variables,s,i):{};return{query:o.query,variables:a}}default:return null}}function Ft(e){const t=Mt(e);if(!t||!t.query)return;const{query:r,variables:n}=t,i=Pt(r);if(i instanceof Error){const t=Dt(e);return console.error(`[MSW] Failed to intercept a GraphQL request to "${e.method} ${t}": cannot parse query. See the error message from the parser below.`),void console.error(i)}return{operationType:i.operationType,operationName:i.operationName,variables:n}}function Ut(e,t){return e.toLowerCase()===t.toLowerCase()}function qt(e){return e<300?"#69AB32":e<400?"#F0BB4B":"#E95F5D"}function Bt(){const e=new Date;return[e.getHours(),e.getMinutes(),e.getSeconds()].map(String).map((e=>e.slice(0,2))).map((e=>e.padStart(2,"0"))).join(":")}function Ht(e){return Object.assign(Object.assign({},e),{headers:e.headers.all()})}function Kt(e){var t,r;const n=T.stringToHeaders(e),i=n.get("content-type")||"text/plain",o=n.get("content-disposition");if(!o)throw new Error('"Content-Disposition" header is required.');const s=o.split(";").reduce(((e,t)=>{const[r,...n]=t.trim().split("=");return e[r]=n.join("="),e}),{});return{name:null===(t=s.name)||void 0===t?void 0:t.slice(1,-1),filename:null===(r=s.filename)||void 0===r?void 0:r.slice(1,-1),contentType:i}}function $t(e,t){if(e){const r=null==t?void 0:t.get("content-type");if((null==r?void 0:r.startsWith("multipart/form-data"))&&"object"!=typeof e)return function(e,t){const r=null==t?void 0:t.get("content-type");if(!r)return;const[,...n]=r.split("; "),i=n.filter((e=>e.startsWith("boundary="))).map((e=>e.replace(/^boundary=/,"")))[0];if(!i)return;const o=new RegExp(`--+${i}`),s=e.split(o).filter((e=>e.startsWith("\r\n")&&e.endsWith("\r\n"))).map((e=>e.trimStart().replace(/\r\n$/,"")));if(!s.length)return;const a={};try{for(const e of s){const[t,...r]=e.split("\r\n\r\n"),n=r.join("\r\n\r\n"),{contentType:i,filename:o,name:s}=Kt(t),c=void 0===o?n:new File([n],o,{type:i}),u=a[s];void 0===u?a[s]=c:Array.isArray(u)?a[s]=[...u,c]:a[s]=[u,c]}return a}catch(e){return}}(e,t)||e;return(null==r?void 0:r.includes("json"))&&"object"!=typeof e&&C(e)||e}return e}function Wt(e){const t=T.listToHeaders(e.headers);return Object.assign(Object.assign({},e),{body:$t(e.body,t)})}const Vt=(e,t)=>{const r=(e instanceof RegExp?e:(e=>{const t=e.replace(/\./g,"\\.").replace(/\//g,"/").replace(/\?/g,"\\?").replace(/\/+$/,"").replace(/\*+/g,".*").replace(/:([^\d|^\/][a-zA-Z0-9_]*(?=(?:\/|\\.)|$))/g,((e,t)=>`(?<${t}>[^/]+?)`)).concat("(\\/|$)");return new RegExp(t,"gi")})(e)).exec(t)||!1,n=e instanceof RegExp?!!r:!!r&&r[0]===r.input;return{matches:n,params:r&&n&&r.groups||null}};var Yt=i((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.getCleanUrl=void 0,t.getCleanUrl=function(e,t){return void 0===t&&(t=!0),[t&&e.origin,e.pathname].filter(Boolean).join("")}}));const Gt=e=>{const t="undefined"!=typeof location;return"string"==typeof e&&e.startsWith("/")?`${t?location.origin:""}${e}`:e};function Jt(e){if(e instanceof RegExp||e.includes("*"))return e;try{return new URL(Gt(e))}catch(t){return e}}function zt(e,t){const r=function(e){return e instanceof URL?Yt.getCleanUrl(e):e instanceof RegExp?e:Gt(e)}(Jt(t)),n=Yt.getCleanUrl(e);return Vt(r,n)}function Qt(...e){return(...t)=>e.reduceRight(((e,t)=>e instanceof Promise?Promise.resolve(e).then(t):t(e)),t[0])}class Xt extends Error{constructor(e){super(e),this.name="NetworkError"}}const Zt={status:200,statusText:"OK",body:null,delay:0,once:!1},er=[];function tr(e,t=er){return(...r)=>pe(this,void 0,void 0,(function*(){const n=Object.assign({},Zt,{headers:new T.Headers({"x-powered-by":"msw"})},e),i=[...t,...r].filter(Boolean);return i.length>0?Qt(...i)(n):n}))}const rr=Object.assign(tr(),{once:tr({once:!0}),networkError(e){throw new Xt(e)}});const nr={status:r,set:O,delay:q,fetch:$};class ir{constructor(e){this.shouldSkip=!1,this.ctx=e.ctx||nr,this.resolver=e.resolver;const t=function(){const e=((new Error).stack||"").split("\n"),t=/(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/,r=e.slice(1).find((e=>!t.test(e)));if(!r)return;return r.replace(/\s*at [^()]*\(([^)]+)\)/,"$1").replace(/^@/,"")}();this.info=Object.assign(Object.assign({},e.info),{callFrame:t})}parse(e){return null}test(e){return this.predicate(e,this.parse(e))}getPublicRequest(e,t){return e}markAsSkipped(e=!0){this.shouldSkip=e}run(e){return pe(this,void 0,void 0,(function*(){if(this.shouldSkip)return null;const t=this.parse(e);if(!this.predicate(e,t))return null;const r=this.getPublicRequest(e,t),n=yield this.resolver(r,rr,this.ctx);return this.createExecutionResult(t,r,n)}))}createExecutionResult(e,t,r){return{handler:this,parsedResult:e||null,request:t,response:r||null}}}var or;e.RESTMethods=void 0,(or=e.RESTMethods||(e.RESTMethods={})).HEAD="HEAD",or.GET="GET",or.POST="POST",or.PUT="PUT",or.PATCH="PATCH",or.OPTIONS="OPTIONS",or.DELETE="DELETE";const sr={set:O,status:r,cookie:A,body:R,text:W,json:D,xml:V,delay:q,fetch:$};class ar extends ir{constructor(e,t,r){super({info:{header:`${e} ${t}`,mask:t,method:e},ctx:sr,resolver:r}),this.checkRedundantQueryParameters()}checkRedundantQueryParameters(){const{method:e,mask:t}=this.info,r=Jt(t);if(r instanceof URL&&""!==r.search){const n=[];r.searchParams.forEach(((e,t)=>{n.push(t)})),console.warn(`[MSW] Found a redundant usage of query parameters in the request handler URL for "${e} ${t}". Please match against a path instead, and access query parameters in the response resolver function:\n\nrest.${e.toLowerCase()}("${r.pathname}", (req, res, ctx) => {\n const query = req.url.searchParams\n${n.map((e=>` const ${e} = query.get("${e}")`)).join("\n")}\n}) `)}}parse(e){return zt(e.url,this.info.mask)}getPublicRequest(e,t){return Object.assign(Object.assign({},e),{params:t.params})}predicate(e,t){return Ut(this.info.method,e.method)&&t.matches}log(e,t){const r=Dt(e),n=Ht(e),i=Wt(t);console.groupCollapsed("[MSW] %s %s %s (%c%s%c)",Bt(),e.method,r,`color:${qt(t.status)}`,t.status,"color:inherit"),console.log("Request",n),console.log("Handler:",{mask:this.info.mask,resolver:this.resolver}),console.log("Response",i),console.groupEnd()}}const cr={set:O,status:r,delay:q,fetch:$,data:P,errors:B};class ur extends ir{constructor(e,t,r,n){super({info:{header:"all"===e?`${e} (origin: ${r.toString()})`:`${e} ${t} (origin: ${r.toString()})`,operationType:e,operationName:t},ctx:cr,resolver:n}),this.endpoint=r}parse(e){return Ft(e)}getPublicRequest(e,t){return Object.assign(Object.assign({},e),{variables:(null==t?void 0:t.variables)||{}})}predicate(e,t){if(!t)return!1;if(!t.operationName){const t=Dt(e);return console.warn(`[MSW] Failed to intercept a GraphQL request at "${e.method} ${t}": unnamed GraphQL operations are not supported.\n\nConsider naming this operation or using "graphql.operation" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation `),!1}const r=zt(e.url,this.endpoint),n="all"===this.info.operationType||t.operationType===this.info.operationType,i=this.info.operationName instanceof RegExp?this.info.operationName.test(t.operationName):t.operationName===this.info.operationName;return r.matches&&n&&i}log(e,t){const r=Ht(e),n=Wt(t);console.groupCollapsed("[MSW] %s %s (%c%s%c)",Bt(),this.info.operationName,`color:${qt(t.status)}`,t.status,"color:inherit"),console.log("Request:",r),console.log("Handler:",this),console.log("Response:",n),console.groupEnd()}}function lr(e,t,r="bypass"){if("function"==typeof r)return void r(e);const n=Ft(e),i=function(e){return e.reduce(((e,t)=>(t instanceof ar&&e.rest.push(t),t instanceof ur&&e.graphql.push(t),e)),{rest:[],graphql:[]})}(t),o=function(e,t,r){return t.reduce(((t,n)=>{const i=r(e,n);return t.concat([[i,n]])}),[]).sort((([e],[t])=>e-t)).filter((([e])=>e<=3)).slice(0,4).map((([,e])=>e))}(e,n?i.graphql:i.rest,n?(s=n,(e,t)=>{if(void 0===s.operationName)return 1/0;const{operationType:r,operationName:n}=t.info,i=s.operationType===r?.5:0;return ye(s.operationName,n)-i}):(e,t)=>{const{mask:r,method:n}=t.info;if(r instanceof RegExp)return 1/0;const i=Ut(e.method,n)?.5:0,o=Dt(e);return ye(o,r)-i});var s;const a=o.length>0?function(e){return e.length>1?`Did you mean to request one of the following resources instead?\n\n${e.map((e=>` • ${e.info.header}`)).join("\n")}`:`Did you mean to request "${e[0].info.header}" instead?`}(o):"",c=Dt(e),u=["captured a request without a matching request handler:",` • ${n?`${n.operationType} ${n.operationName} (${e.method} ${c})`:`${e.method} ${c}`}`,a,"If you still wish to intercept this unhandled request, please create a request handler for it.\nRead more: https://mswjs.io/docs/getting-started/mocks"].filter(Boolean).join("\n\n");switch(r){case"error":console.error(`[MSW] Error: ${u}`);break;case"warn":console.warn(`[MSW] Warning: ${u}`);break;default:return}}var hr={decodeValues:!0,map:!1,silent:!1};function pr(e){return"string"==typeof e&&!!e.trim()}function fr(e,t){var r=e.split(";").filter(pr),n=r.shift().split("="),i=n.shift(),o=n.join("=");t=t?Object.assign({},hr,t):hr;try{o=t.decodeValues?decodeURIComponent(o):o}catch(e){console.error("set-cookie-parser encountered an error while decoding a cookie with value '"+o+"'. Set options.decodeValues to false to disable this feature.",e)}var s={name:i,value:o};return r.forEach((function(e){var t=e.split("="),r=t.shift().trimLeft().toLowerCase(),n=t.join("=");"expires"===r?s.expires=new Date(n):"max-age"===r?s.maxAge=parseInt(n,10):"secure"===r?s.secure=!0:"httponly"===r?s.httpOnly=!0:"samesite"===r?s.sameSite=n:s[r]=n})),s}function dr(e,t){if(t=t?Object.assign({},hr,t):hr,!e)return t.map?{}:[];if(e.headers&&e.headers["set-cookie"])e=e.headers["set-cookie"];else if(e.headers){var r=e.headers[Object.keys(e.headers).find((function(e){return"set-cookie"===e.toLowerCase()}))];r||!e.headers.cookie||t.silent||console.warn("Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."),e=r}if(Array.isArray(e)||(e=[e]),(t=t?Object.assign({},hr,t):hr).map){return e.filter(pr).reduce((function(e,r){var n=fr(r,t);return e[n.name]=n,e}),{})}return e.filter(pr).map((function(e){return fr(e,t)}))}var vr=dr,yr=dr,mr=fr,gr=function(e){if(Array.isArray(e))return e;if("string"!=typeof e)return[];var t,r,n,i,o,s=[],a=0;function c(){for(;a<e.length&&/\s/.test(e.charAt(a));)a+=1;return a<e.length}for(;a<e.length;){for(t=a,o=!1;c();)if(","===(r=e.charAt(a))){for(n=a,a+=1,c(),i=a;a<e.length&&"="!==(r=e.charAt(a))&&";"!==r&&","!==r;)a+=1;a<e.length&&"="===e.charAt(a)?(o=!0,a=i,s.push(e.substring(t,n)),t=a):a=n+1}else a+=1;(!o||a>=e.length)&&s.push(e.substring(t,e.length))}return s};vr.parse=yr,vr.parseString=mr,vr.splitCookiesString=gr;var Er=i((function(e,t){var r=n&&n.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r};Object.defineProperty(t,"__esModule",{value:!0}),t.PERSISTENCY_KEY=void 0,t.PERSISTENCY_KEY="MSW_COOKIE_STORE";t.default=new class{constructor(){this.store=new Map,this.supportsPersistency="undefined"!=typeof window}add(e,t){if("omit"===e.credentials)return;const n=new URL(e.url),i=t.headers.get("set-cookie");if(!i)return;const o=Date.now(),s=vr.parse(i).map((e=>{var{maxAge:t}=e,n=r(e,["maxAge"]);return Object.assign(Object.assign({},n),{expires:void 0===t?n.expires:new Date(o+1e3*t),maxAge:t})})).filter((({expires:e})=>void 0===e||e.getTime()>o)),a=this.store.get(n.origin)||new Map;s.forEach((e=>{this.store.set(n.origin,a.set(e.name,e))}))}get(e){this.deleteExpiredCookies();const t=new URL(e.url),r=this.store.get(t.origin)||new Map;switch(e.credentials){case"include":return vr.parse(document.cookie).forEach((e=>{r.set(e.name,e)})),r;case"same-origin":return r;default:return new Map}}getAll(){return this.deleteExpiredCookies(),this.store}deleteAll(e){const t=new URL(e.url);this.store.delete(t.origin)}clear(){this.store.clear()}hydrate(){if(!this.supportsPersistency)return;const e=localStorage.getItem(t.PERSISTENCY_KEY);if(e)try{JSON.parse(e).forEach((([e,t])=>{this.store.set(e,new Map(t.map((e=>{var[t,n]=e,{expires:i}=n,o=r(n,["expires"]);return[t,void 0===i?o:Object.assign(Object.assign({},o),{expires:new Date(i)})]}))))}))}catch(e){console.warn(`\n[virtual-cookie] Failed to parse a stored cookie from the localStorage (key "${t.PERSISTENCY_KEY}").\n\nStored value:\n${localStorage.getItem(t.PERSISTENCY_KEY)}\n\nThrown exception:\n${e}\n\nInvalid value has been removed from localStorage to prevent subsequent failed parsing attempts.`),localStorage.removeItem(t.PERSISTENCY_KEY)}}persist(){if(!this.supportsPersistency)return;const e=Array.from(this.store.entries()).map((([e,t])=>[e,Array.from(t.entries())]));localStorage.setItem(t.PERSISTENCY_KEY,JSON.stringify(e))}deleteExpiredCookies(){const e=Date.now();this.store.forEach(((t,r)=>{t.forEach((({expires:r,name:n})=>{void 0!==r&&r.getTime()<=e&&t.delete(n)})),0===t.size&&this.store.delete(r)}))}}})),br=i((function(e,t){var r=n&&n.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PERSISTENCY_KEY=t.store=void 0,Object.defineProperty(t,"store",{enumerable:!0,get:function(){return r(Er).default}}),Object.defineProperty(t,"PERSISTENCY_KEY",{enumerable:!0,get:function(){return Er.PERSISTENCY_KEY}})}));function Tr(){return w(document.cookie)}function Or(e){var t;br.store.hydrate(),e.cookies=Object.assign(Object.assign({},function(e){if("undefined"==typeof location)return{};switch(e.credentials){case"same-origin":return location.origin===e.url.origin?Tr():{};case"include":return Tr();default:return{}}}(e)),Array.from(null===(t=br.store.get(Object.assign(Object.assign({},e),{url:e.url.toString()})))||void 0===t?void 0:t.entries()).reduce(((e,[t,{value:r}])=>Object.assign(e,{[t]:r})),{})),e.headers.set("cookie",Object.entries(e.cookies).map((([e,t])=>`${e}=${t}`)).join("; "))}function wr(e){if(!e.method||!Ut(e.method,"GET")||""!==e.body)return e.body}const _r=(e,t)=>(r,n)=>pe(void 0,void 0,void 0,(function*(){const i=(e=>{const t=e.ports[0];return{send(e){t&&t.postMessage(e)}}})(r);try{const r=function(e){const t={id:e.id,cache:e.cache,credentials:e.credentials,method:e.method,url:new URL(e.url),referrer:e.referrer,referrerPolicy:e.referrerPolicy,redirect:e.redirect,mode:e.mode,params:{},cookies:{},integrity:e.integrity,keepalive:e.keepalive,destination:e.destination,body:wr(e),bodyUsed:e.bodyUsed,headers:new T.Headers(e.headers)};return Or(t),t.body=$t(t.body,t.headers),t}(n.payload);e.emitter.emit("request:start",r),Or(r);const{response:o,handler:s,publicRequest:a,parsedRequest:c}=yield((e,t)=>pe(void 0,void 0,void 0,(function*(){const r=t.filter((t=>t.test(e)));if(0===r.length)return{handler:void 0,response:void 0};const n=yield r.reduce(((t,r)=>pe(void 0,void 0,void 0,(function*(){const n=yield t;if(null==n?void 0:n.response)return t;const i=yield r.run(e);return null===i||!i.response||i.handler.shouldSkip?null:(i.response.once&&r.markAsSkipped(!0),i)}))),Promise.resolve(null));return n?{handler:n.handler,publicRequest:n.request,parsedRequest:n.parsedResult,response:n.response}:{handler:void 0,response:void 0}})))(r,e.requestHandlers);if(!s)return lr(r,e.requestHandlers,t.onUnhandledRequest),e.emitter.emit("request:unhandled",r),e.emitter.emit("request:end",r),i.send({type:"MOCK_NOT_FOUND"});if(e.emitter.emit("request:match",r),!o)return console.warn("[MSW] Expected a mocking resolver function to return a mocked response Object, but got: %s. Original response is going to be used instead.",o),e.emitter.emit("request:end",r),i.send({type:"MOCK_NOT_FOUND"});!function(e,t){br.store.add(Object.assign(Object.assign({},e),{url:e.url.toString()}),t),br.store.persist()}(r,o);const u=Object.assign(Object.assign({},o),{headers:T.headersToList(o.headers)});t.quiet||setTimeout((()=>{s.log(a,u,s,c)}),o.delay),e.emitter.emit("request:end",r),i.send({type:"MOCK_SUCCESS",payload:u})}catch(e){if(e instanceof Xt)return i.send({type:"NETWORK_ERROR",payload:{name:e.name,message:e.message}});i.send({type:"INTERNAL_ERROR",payload:{status:500,body:JSON.stringify({errorType:e.constructor.name,message:e.message,location:e.stack})}})}}));const Nr={serviceWorker:{url:"/mockServiceWorker.js",options:null},quiet:!1,waitUntilReady:!0,onUnhandledRequest:"bypass",findWorker:(e,t)=>e===t},Sr=e=>function(t){const r=j(Nr,t||{});e.startOptions=r;const n=(()=>pe(this,void 0,void 0,(function*(){if(!("serviceWorker"in navigator))throw new Error("[MSW] Failed to register a Service Worker: this browser does not support Service Workers (see https://caniuse.com/serviceworkers), or your application is running on an insecure host (consider using HTTPS for custom hostnames).");e.events.removeAllListeners(),e.workerChannel.on("REQUEST",_r(e,r)),e.workerChannel.on("RESPONSE",function(e){return(t,r)=>{var n;const{payload:i}=r;if(null===(n=i.type)||void 0===n?void 0:n.includes("opaque"))return;const o=new Response(i.body||null,i);"msw"===o.headers.get("x-powered-by")?e.emitter.emit("response:mocked",o,i.requestId):e.emitter.emit("response:bypass",o,i.requestId)}}(e));const n=yield ve(r.serviceWorker.url,r.serviceWorker.options,r.findWorker),[i,o]=n;if(!i){const e=(null==t?void 0:t.findWorker)?`[MSW] Failed to locate the Service Worker registration using a custom "findWorker" predicate.\n\nPlease ensure that the custom predicate properly locates the Service Worker registration at "${r.serviceWorker.url}".\nMore details: https://mswjs.io/docs/api/setup-worker/start#findworker\n`:`[MSW] Failed to locate the Service Worker registration.\n\nThis most likely means that the worker script URL "${r.serviceWorker.url}" cannot resolve against the actual public hostname (${location.host}). This may happen if your application runs behind a proxy, or has a dynamic hostname.\n\nPlease consider using a custom "serviceWorker.url" option to point to the actual worker script location, or a custom "findWorker" option to resolve the Service Worker registration manually. More details: https://mswjs.io/docs/api/setup-worker/start`;throw new Error(e)}e.worker=i,e.registration=o,e.events.addListener(window,"beforeunload",(()=>{"redundant"!==i.state&&e.workerChannel.send("CLIENT_CLOSED"),window.clearInterval(e.keepAliveInterval)}));const[s]=yield fe((()=>function(e,t){return pe(this,void 0,void 0,(function*(){e.workerChannel.send("INTEGRITY_CHECK_REQUEST");const{payload:r}=yield e.events.once("INTEGRITY_CHECK_RESPONSE");if("795882c72c7304f6fa1d4a65a2418900"!==r)throw new Error(`Currently active Service Worker (${r}) is behind the latest published one (795882c72c7304f6fa1d4a65a2418900).`);return t}))}(e,i)));return s&&console.error(`[MSW] Detected outdated Service Worker: ${s.message}\n\nThe mocking is still enabled, but it's highly recommended that you update your Service Worker by running:\n\n$ npx msw init <PUBLIC_DIR>\n\nThis is necessary to ensure that the Service Worker is in sync with the library to guarantee its stability.\nIf this message still persists after updating, please report an issue: https://github.com/open-draft/msw/issues `),yield((e,t)=>pe(void 0,void 0,void 0,(function*(){return e.workerChannel.send("MOCK_ACTIVATE"),e.events.once("MOCKING_ENABLED").then((()=>{(null==t?void 0:t.quiet)||(console.groupCollapsed("%c[MSW] Mocking enabled.","color:orangered;font-weight:bold;"),console.log("%cDocumentation: %chttps://mswjs.io/docs","font-weight:bold","font-weight:normal"),console.log("Found an issue? https://github.com/mswjs/msw/issues"),console.groupEnd())}))})))(e,t).catch((e=>{throw new Error(`Failed to enable mocking: ${null==e?void 0:e.message}`)})),e.keepAliveInterval=window.setInterval((()=>e.workerChannel.send("KEEPALIVE_REQUEST")),5e3),o})))();return r.waitUntilReady&&function(e){const t=window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.send=function(...r){fe((()=>e)).then((()=>{window.XMLHttpRequest.prototype.send=t,this.send(...r)}))};const r=window.fetch;window.fetch=(...t)=>pe(this,void 0,void 0,(function*(){return yield fe((()=>e)),window.fetch=r,window.fetch(...t)}))}(n),n},kr=e=>function(){var t;e.workerChannel.send("MOCK_DEACTIVATE"),e.events.removeAllListeners(),e.emitter.removeAllListeners(),window.clearInterval(e.keepAliveInterval),(null===(t=e.startOptions)||void 0===t?void 0:t.quiet)||console.log("%c[MSW] Mocking disabled.","color:orangered;font-weight:bold;")};let Ir=[];function xr(e){return(t,r)=>new ar(e,t,r)}const Ar={head:xr(e.RESTMethods.HEAD),get:xr(e.RESTMethods.GET),post:xr(e.RESTMethods.POST),put:xr(e.RESTMethods.PUT),delete:xr(e.RESTMethods.DELETE),patch:xr(e.RESTMethods.PATCH),options:xr(e.RESTMethods.OPTIONS)};function Rr(e,t){return(r,n)=>new ur(e,r,t,n)}function Cr(e){return t=>new ur("all",new RegExp(".*"),e,t)}const Lr={operation:Cr("*"),query:Rr("query","*"),mutation:Rr("mutation","*")};const jr=Object.assign(Object.assign({},Lr),{link:function(e){return{operation:Cr(e),query:Rr("query",e),mutation:Rr("mutation",e)}}});return e.GraphQLHandler=ur,e.RequestHandler=ir,e.RestHandler=ar,e.compose=Qt,e.context=G,e.createResponseComposition=tr,e.defaultContext=nr,e.defaultResponse=Zt,e.graphql=jr,e.graphqlContext=cr,e.matchRequestUrl=zt,e.response=rr,e.rest=Ar,e.restContext=sr,e.setupWorker=function(...e){e.forEach((e=>{if(Array.isArray(e))throw new Error('[MSW] Failed to call "setupWorker" given an Array of request handlers (setupWorker([a, b])), expected to receive each handler individually: setupWorker(a, b).')}));const t={startOptions:void 0,worker:null,registration:null,requestHandlers:[...e],emitter:new he.StrictEventEmitter,workerChannel:{on(e,r){t.events.addListener(navigator.serviceWorker,"message",(n=>{if(n.source!==t.worker)return;const i=C(n.data);i&&i.type===e&&r(n,i)}))},send(e){var r;null===(r=t.worker)||void 0===r||r.postMessage(e)}},events:{addListener:(e,t,r)=>(e.addEventListener(t,r),Ir.push({eventType:t,target:e,callback:r}),()=>{e.removeEventListener(t,r)}),removeAllListeners(){for(const{target:e,eventType:t,callback:r}of Ir)e.removeEventListener(t,r);Ir=[]},once(e){const r=[];return new Promise(((n,i)=>{r.push(t.events.addListener(navigator.serviceWorker,"message",(t=>{try{const r=JSON.parse(t.data);r.type===e&&n(r)}catch(e){i(e)}})),t.events.addListener(navigator.serviceWorker,"messageerror",i))})).finally((()=>{r.forEach((e=>e()))}))}}};if(M())throw new Error("[MSW] Failed to execute `setupWorker` in a non-browser environment. Consider using `setupServer` for Node.js environment instead.");return{start:Sr(t),stop:kr(t),use(...e){console.log("adding new handlers",e),function(e,...t){e.unshift(...t)}(t.requestHandlers,...e)},restoreHandlers(){t.requestHandlers.forEach((e=>{e.markAsSkipped(!1)}))},resetHandlers(...r){t.requestHandlers=function(e,...t){return t.length>0?[...t]:[...e]}(e,...r)},printHandlers(){t.requestHandlers.forEach((e=>{const{header:t,callFrame:r}=e.info,n=e.info.hasOwnProperty("operationType")?"[graphql]":"[rest]";console.groupCollapsed(`${n} ${t}`),r&&console.log(`Declaration: ${r}`),console.log("Handler:",e),e instanceof ar&&console.log("Match:",`https://mswjs.io/repl?path=${e.info.mask}`),console.groupEnd()}))},on(e,r){t.emitter.addListener(e,r)}}},e}({});
23
+ function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}(t,["operations","map"]),o=C(r)||{};if(!o.query)return null;const s=C(n||"")||{},a=o.variables?function(e,t,r){const n={variables:e};for(const[e,i]of Object.entries(t)){if(!(e in r))throw new Error(`Given files do not have a key '${e}' .`);for(const t of i){const[i,...o]=t.split(".").reverse(),s=o.reverse();let a=n;for(const e of s){if(!(e in a))throw new Error(`Property '${s}' is not in operations.`);a=a[e]}a[i]=r[e]}}return n.variables}(o.variables,s,i):{};return{query:o.query,variables:a}}default:return null}}function Ft(e){const t=Mt(e);if(!t||!t.query)return;const{query:r,variables:n}=t,i=Pt(r);if(i instanceof Error){const t=Dt(e);return console.error(`[MSW] Failed to intercept a GraphQL request to "${e.method} ${t}": cannot parse query. See the error message from the parser below.`),void console.error(i)}return{operationType:i.operationType,operationName:i.operationName,variables:n}}function Ut(e,t){return e.toLowerCase()===t.toLowerCase()}function qt(e){return e<300?"#69AB32":e<400?"#F0BB4B":"#E95F5D"}function Bt(){const e=new Date;return[e.getHours(),e.getMinutes(),e.getSeconds()].map(String).map((e=>e.slice(0,2))).map((e=>e.padStart(2,"0"))).join(":")}function Ht(e){return Object.assign(Object.assign({},e),{headers:e.headers.all()})}function Kt(e){var t,r;const n=T.stringToHeaders(e),i=n.get("content-type")||"text/plain",o=n.get("content-disposition");if(!o)throw new Error('"Content-Disposition" header is required.');const s=o.split(";").reduce(((e,t)=>{const[r,...n]=t.trim().split("=");return e[r]=n.join("="),e}),{});return{name:null===(t=s.name)||void 0===t?void 0:t.slice(1,-1),filename:null===(r=s.filename)||void 0===r?void 0:r.slice(1,-1),contentType:i}}function $t(e,t){if(e){const r=null==t?void 0:t.get("content-type");if((null==r?void 0:r.startsWith("multipart/form-data"))&&"object"!=typeof e)return function(e,t){const r=null==t?void 0:t.get("content-type");if(!r)return;const[,...n]=r.split(/; */),i=n.filter((e=>e.startsWith("boundary="))).map((e=>e.replace(/^boundary=/,"")))[0];if(!i)return;const o=new RegExp(`--+${i}`),s=e.split(o).filter((e=>e.startsWith("\r\n")&&e.endsWith("\r\n"))).map((e=>e.trimStart().replace(/\r\n$/,"")));if(!s.length)return;const a={};try{for(const e of s){const[t,...r]=e.split("\r\n\r\n"),n=r.join("\r\n\r\n"),{contentType:i,filename:o,name:s}=Kt(t),c=void 0===o?n:new File([n],o,{type:i}),u=a[s];void 0===u?a[s]=c:Array.isArray(u)?a[s]=[...u,c]:a[s]=[u,c]}return a}catch(e){return}}(e,t)||e;return(null==r?void 0:r.includes("json"))&&"object"!=typeof e&&C(e)||e}return e}function Wt(e){const t=T.listToHeaders(e.headers);return Object.assign(Object.assign({},e),{body:$t(e.body,t)})}const Vt=(e,t)=>{const r=(e instanceof RegExp?e:(e=>{const t=e.replace(/\./g,"\\.").replace(/\//g,"/").replace(/\?/g,"\\?").replace(/\/+$/,"").replace(/\*+/g,".*").replace(/:([^\d|^\/][a-zA-Z0-9_]*(?=(?:\/|\\.)|$))/g,((e,t)=>`(?<${t}>[^/]+?)`)).concat("(\\/|$)");return new RegExp(t,"gi")})(e)).exec(t)||!1,n=e instanceof RegExp?!!r:!!r&&r[0]===r.input;return{matches:n,params:r&&n&&r.groups||null}};var Yt=i((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.getCleanUrl=void 0,t.getCleanUrl=function(e,t){return void 0===t&&(t=!0),[t&&e.origin,e.pathname].filter(Boolean).join("")}}));const Gt=e=>{const t="undefined"!=typeof location;return"string"==typeof e&&e.startsWith("/")?`${t?location.origin:""}${e}`:e};function Jt(e){if(e instanceof RegExp||e.includes("*"))return e;try{return new URL(Gt(e))}catch(t){return e}}function zt(e,t){const r=function(e){return e instanceof URL?Yt.getCleanUrl(e):e instanceof RegExp?e:Gt(e)}(Jt(t)),n=Yt.getCleanUrl(e);return Vt(r,n)}function Qt(...e){return(...t)=>e.reduceRight(((e,t)=>e instanceof Promise?Promise.resolve(e).then(t):t(e)),t[0])}class Xt extends Error{constructor(e){super(e),this.name="NetworkError"}}const Zt={status:200,statusText:"OK",body:null,delay:0,once:!1},er=[];function tr(e,t=er){return(...r)=>pe(this,void 0,void 0,(function*(){const n=Object.assign({},Zt,{headers:new T.Headers({"x-powered-by":"msw"})},e),i=[...t,...r].filter(Boolean);return i.length>0?Qt(...i)(n):n}))}const rr=Object.assign(tr(),{once:tr({once:!0}),networkError(e){throw new Xt(e)}});const nr={status:r,set:O,delay:q,fetch:$};class ir{constructor(e){this.shouldSkip=!1,this.ctx=e.ctx||nr,this.resolver=e.resolver;const t=function(){const e=((new Error).stack||"").split("\n"),t=/(node_modules)?[\/\\]lib[\/\\](umd|esm|iief|cjs)[\/\\]|^[^\/\\]*$/,r=e.slice(1).find((e=>!t.test(e)));if(!r)return;return r.replace(/\s*at [^()]*\(([^)]+)\)/,"$1").replace(/^@/,"")}();this.info=Object.assign(Object.assign({},e.info),{callFrame:t})}parse(e){return null}test(e){return this.predicate(e,this.parse(e))}getPublicRequest(e,t){return e}markAsSkipped(e=!0){this.shouldSkip=e}run(e){return pe(this,void 0,void 0,(function*(){if(this.shouldSkip)return null;const t=this.parse(e);if(!this.predicate(e,t))return null;const r=this.getPublicRequest(e,t),n=yield this.resolver(r,rr,this.ctx);return this.createExecutionResult(t,r,n)}))}createExecutionResult(e,t,r){return{handler:this,parsedResult:e||null,request:t,response:r||null}}}var or;e.RESTMethods=void 0,(or=e.RESTMethods||(e.RESTMethods={})).HEAD="HEAD",or.GET="GET",or.POST="POST",or.PUT="PUT",or.PATCH="PATCH",or.OPTIONS="OPTIONS",or.DELETE="DELETE";const sr={set:O,status:r,cookie:A,body:R,text:W,json:D,xml:V,delay:q,fetch:$};class ar extends ir{constructor(e,t,r){super({info:{header:`${e} ${t}`,mask:t,method:e},ctx:sr,resolver:r}),this.checkRedundantQueryParameters()}checkRedundantQueryParameters(){const{method:e,mask:t}=this.info,r=Jt(t);if(r instanceof URL&&""!==r.search){const n=[];r.searchParams.forEach(((e,t)=>{n.push(t)})),console.warn(`[MSW] Found a redundant usage of query parameters in the request handler URL for "${e} ${t}". Please match against a path instead, and access query parameters in the response resolver function:\n\nrest.${e.toLowerCase()}("${r.pathname}", (req, res, ctx) => {\n const query = req.url.searchParams\n${n.map((e=>` const ${e} = query.get("${e}")`)).join("\n")}\n}) `)}}parse(e){return zt(e.url,this.info.mask)}getPublicRequest(e,t){return Object.assign(Object.assign({},e),{params:t.params})}predicate(e,t){return Ut(this.info.method,e.method)&&t.matches}log(e,t){const r=Dt(e),n=Ht(e),i=Wt(t);console.groupCollapsed("[MSW] %s %s %s (%c%s%c)",Bt(),e.method,r,`color:${qt(t.status)}`,t.status,"color:inherit"),console.log("Request",n),console.log("Handler:",{mask:this.info.mask,resolver:this.resolver}),console.log("Response",i),console.groupEnd()}}const cr={set:O,status:r,delay:q,fetch:$,data:P,errors:B};class ur extends ir{constructor(e,t,r,n){super({info:{header:"all"===e?`${e} (origin: ${r.toString()})`:`${e} ${t} (origin: ${r.toString()})`,operationType:e,operationName:t},ctx:cr,resolver:n}),this.endpoint=r}parse(e){return Ft(e)}getPublicRequest(e,t){return Object.assign(Object.assign({},e),{variables:(null==t?void 0:t.variables)||{}})}predicate(e,t){if(!t)return!1;if(!t.operationName){const t=Dt(e);return console.warn(`[MSW] Failed to intercept a GraphQL request at "${e.method} ${t}": unnamed GraphQL operations are not supported.\n\nConsider naming this operation or using "graphql.operation" request handler to intercept GraphQL requests regardless of their operation name/type. Read more: https://mswjs.io/docs/api/graphql/operation `),!1}const r=zt(e.url,this.endpoint),n="all"===this.info.operationType||t.operationType===this.info.operationType,i=this.info.operationName instanceof RegExp?this.info.operationName.test(t.operationName):t.operationName===this.info.operationName;return r.matches&&n&&i}log(e,t){const r=Ht(e),n=Wt(t);console.groupCollapsed("[MSW] %s %s (%c%s%c)",Bt(),this.info.operationName,`color:${qt(t.status)}`,t.status,"color:inherit"),console.log("Request:",r),console.log("Handler:",this),console.log("Response:",n),console.groupEnd()}}function lr(e,t,r="bypass"){if("function"==typeof r)return void r(e);const n=Ft(e),i=function(e){return e.reduce(((e,t)=>(t instanceof ar&&e.rest.push(t),t instanceof ur&&e.graphql.push(t),e)),{rest:[],graphql:[]})}(t),o=function(e,t,r){return t.reduce(((t,n)=>{const i=r(e,n);return t.concat([[i,n]])}),[]).sort((([e],[t])=>e-t)).filter((([e])=>e<=3)).slice(0,4).map((([,e])=>e))}(e,n?i.graphql:i.rest,n?(s=n,(e,t)=>{if(void 0===s.operationName)return 1/0;const{operationType:r,operationName:n}=t.info,i=s.operationType===r?.5:0;return ye(s.operationName,n)-i}):(e,t)=>{const{mask:r,method:n}=t.info;if(r instanceof RegExp)return 1/0;const i=Ut(e.method,n)?.5:0,o=Dt(e);return ye(o,r)-i});var s;const a=o.length>0?function(e){return e.length>1?`Did you mean to request one of the following resources instead?\n\n${e.map((e=>` • ${e.info.header}`)).join("\n")}`:`Did you mean to request "${e[0].info.header}" instead?`}(o):"",c=Dt(e),u=["captured a request without a matching request handler:",` • ${n?`${n.operationType} ${n.operationName} (${e.method} ${c})`:`${e.method} ${c}`}`,a,"If you still wish to intercept this unhandled request, please create a request handler for it.\nRead more: https://mswjs.io/docs/getting-started/mocks"].filter(Boolean).join("\n\n");switch(r){case"error":console.error(`[MSW] Error: ${u}`);break;case"warn":console.warn(`[MSW] Warning: ${u}`);break;default:return}}var hr={decodeValues:!0,map:!1,silent:!1};function pr(e){return"string"==typeof e&&!!e.trim()}function fr(e,t){var r=e.split(";").filter(pr),n=r.shift().split("="),i=n.shift(),o=n.join("=");t=t?Object.assign({},hr,t):hr;try{o=t.decodeValues?decodeURIComponent(o):o}catch(e){console.error("set-cookie-parser encountered an error while decoding a cookie with value '"+o+"'. Set options.decodeValues to false to disable this feature.",e)}var s={name:i,value:o};return r.forEach((function(e){var t=e.split("="),r=t.shift().trimLeft().toLowerCase(),n=t.join("=");"expires"===r?s.expires=new Date(n):"max-age"===r?s.maxAge=parseInt(n,10):"secure"===r?s.secure=!0:"httponly"===r?s.httpOnly=!0:"samesite"===r?s.sameSite=n:s[r]=n})),s}function dr(e,t){if(t=t?Object.assign({},hr,t):hr,!e)return t.map?{}:[];if(e.headers&&e.headers["set-cookie"])e=e.headers["set-cookie"];else if(e.headers){var r=e.headers[Object.keys(e.headers).find((function(e){return"set-cookie"===e.toLowerCase()}))];r||!e.headers.cookie||t.silent||console.warn("Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."),e=r}if(Array.isArray(e)||(e=[e]),(t=t?Object.assign({},hr,t):hr).map){return e.filter(pr).reduce((function(e,r){var n=fr(r,t);return e[n.name]=n,e}),{})}return e.filter(pr).map((function(e){return fr(e,t)}))}var vr=dr,yr=dr,mr=fr,gr=function(e){if(Array.isArray(e))return e;if("string"!=typeof e)return[];var t,r,n,i,o,s=[],a=0;function c(){for(;a<e.length&&/\s/.test(e.charAt(a));)a+=1;return a<e.length}for(;a<e.length;){for(t=a,o=!1;c();)if(","===(r=e.charAt(a))){for(n=a,a+=1,c(),i=a;a<e.length&&"="!==(r=e.charAt(a))&&";"!==r&&","!==r;)a+=1;a<e.length&&"="===e.charAt(a)?(o=!0,a=i,s.push(e.substring(t,n)),t=a):a=n+1}else a+=1;(!o||a>=e.length)&&s.push(e.substring(t,e.length))}return s};vr.parse=yr,vr.parseString=mr,vr.splitCookiesString=gr;var Er=i((function(e,t){var r=n&&n.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r};Object.defineProperty(t,"__esModule",{value:!0}),t.PERSISTENCY_KEY=void 0,t.PERSISTENCY_KEY="MSW_COOKIE_STORE";t.default=new class{constructor(){this.store=new Map,this.supportsPersistency="undefined"!=typeof window}add(e,t){if("omit"===e.credentials)return;const n=new URL(e.url),i=t.headers.get("set-cookie");if(!i)return;const o=Date.now(),s=vr.parse(i).map((e=>{var{maxAge:t}=e,n=r(e,["maxAge"]);return Object.assign(Object.assign({},n),{expires:void 0===t?n.expires:new Date(o+1e3*t),maxAge:t})})).filter((({expires:e})=>void 0===e||e.getTime()>o)),a=this.store.get(n.origin)||new Map;s.forEach((e=>{this.store.set(n.origin,a.set(e.name,e))}))}get(e){this.deleteExpiredCookies();const t=new URL(e.url),r=this.store.get(t.origin)||new Map;switch(e.credentials){case"include":return vr.parse(document.cookie).forEach((e=>{r.set(e.name,e)})),r;case"same-origin":return r;default:return new Map}}getAll(){return this.deleteExpiredCookies(),this.store}deleteAll(e){const t=new URL(e.url);this.store.delete(t.origin)}clear(){this.store.clear()}hydrate(){if(!this.supportsPersistency)return;const e=localStorage.getItem(t.PERSISTENCY_KEY);if(e)try{JSON.parse(e).forEach((([e,t])=>{this.store.set(e,new Map(t.map((e=>{var[t,n]=e,{expires:i}=n,o=r(n,["expires"]);return[t,void 0===i?o:Object.assign(Object.assign({},o),{expires:new Date(i)})]}))))}))}catch(e){console.warn(`\n[virtual-cookie] Failed to parse a stored cookie from the localStorage (key "${t.PERSISTENCY_KEY}").\n\nStored value:\n${localStorage.getItem(t.PERSISTENCY_KEY)}\n\nThrown exception:\n${e}\n\nInvalid value has been removed from localStorage to prevent subsequent failed parsing attempts.`),localStorage.removeItem(t.PERSISTENCY_KEY)}}persist(){if(!this.supportsPersistency)return;const e=Array.from(this.store.entries()).map((([e,t])=>[e,Array.from(t.entries())]));localStorage.setItem(t.PERSISTENCY_KEY,JSON.stringify(e))}deleteExpiredCookies(){const e=Date.now();this.store.forEach(((t,r)=>{t.forEach((({expires:r,name:n})=>{void 0!==r&&r.getTime()<=e&&t.delete(n)})),0===t.size&&this.store.delete(r)}))}}})),br=i((function(e,t){var r=n&&n.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PERSISTENCY_KEY=t.store=void 0,Object.defineProperty(t,"store",{enumerable:!0,get:function(){return r(Er).default}}),Object.defineProperty(t,"PERSISTENCY_KEY",{enumerable:!0,get:function(){return Er.PERSISTENCY_KEY}})}));function Tr(){return w(document.cookie)}function Or(e){var t;br.store.hydrate(),e.cookies=Object.assign(Object.assign({},function(e){if("undefined"==typeof location)return{};switch(e.credentials){case"same-origin":return location.origin===e.url.origin?Tr():{};case"include":return Tr();default:return{}}}(e)),Array.from(null===(t=br.store.get(Object.assign(Object.assign({},e),{url:e.url.toString()})))||void 0===t?void 0:t.entries()).reduce(((e,[t,{value:r}])=>Object.assign(e,{[t]:r})),{})),e.headers.set("cookie",Object.entries(e.cookies).map((([e,t])=>`${e}=${t}`)).join("; "))}function wr(e){if(!e.method||!Ut(e.method,"GET")||""!==e.body)return e.body}const _r=(e,t)=>(r,n)=>pe(void 0,void 0,void 0,(function*(){const i=(e=>{const t=e.ports[0];return{send(e){t&&t.postMessage(e)}}})(r);try{const r=function(e){const t={id:e.id,cache:e.cache,credentials:e.credentials,method:e.method,url:new URL(e.url),referrer:e.referrer,referrerPolicy:e.referrerPolicy,redirect:e.redirect,mode:e.mode,params:{},cookies:{},integrity:e.integrity,keepalive:e.keepalive,destination:e.destination,body:wr(e),bodyUsed:e.bodyUsed,headers:new T.Headers(e.headers)};return Or(t),t.body=$t(t.body,t.headers),t}(n.payload);e.emitter.emit("request:start",r),Or(r);const{response:o,handler:s,publicRequest:a,parsedRequest:c}=yield((e,t)=>pe(void 0,void 0,void 0,(function*(){const r=t.filter((t=>t.test(e)));if(0===r.length)return{handler:void 0,response:void 0};const n=yield r.reduce(((t,r)=>pe(void 0,void 0,void 0,(function*(){const n=yield t;if(null==n?void 0:n.response)return t;const i=yield r.run(e);return null===i||i.handler.shouldSkip?null:i.response?(i.response.once&&r.markAsSkipped(!0),i):{request:i.request,handler:i.handler,response:void 0,parsedResult:i.parsedResult}}))),Promise.resolve(null));return n?{handler:n.handler,publicRequest:n.request,parsedRequest:n.parsedResult,response:n.response}:{handler:void 0,response:void 0}})))(r,e.requestHandlers);if(!s)return lr(r,e.requestHandlers,t.onUnhandledRequest),e.emitter.emit("request:unhandled",r),e.emitter.emit("request:end",r),i.send({type:"MOCK_NOT_FOUND"});if(e.emitter.emit("request:match",r),!o)return console.warn("[MSW] Expected a mocking resolver function to return a mocked response Object, but got: %s. Original response is going to be used instead.",o),e.emitter.emit("request:end",r),i.send({type:"MOCK_NOT_FOUND"});!function(e,t){br.store.add(Object.assign(Object.assign({},e),{url:e.url.toString()}),t),br.store.persist()}(r,o);const u=Object.assign(Object.assign({},o),{headers:T.headersToList(o.headers)});t.quiet||setTimeout((()=>{s.log(a,u,s,c)}),o.delay),e.emitter.emit("request:end",r),i.send({type:"MOCK_SUCCESS",payload:u})}catch(e){if(e instanceof Xt)return i.send({type:"NETWORK_ERROR",payload:{name:e.name,message:e.message}});i.send({type:"INTERNAL_ERROR",payload:{status:500,body:JSON.stringify({errorType:e.constructor.name,message:e.message,location:e.stack})}})}}));const Nr={serviceWorker:{url:"/mockServiceWorker.js",options:null},quiet:!1,waitUntilReady:!0,onUnhandledRequest:"bypass",findWorker:(e,t)=>e===t},Sr=e=>function(t){const r=j(Nr,t||{});e.startOptions=r;const n=(()=>pe(this,void 0,void 0,(function*(){if(!("serviceWorker"in navigator))throw new Error("[MSW] Failed to register a Service Worker: this browser does not support Service Workers (see https://caniuse.com/serviceworkers), or your application is running on an insecure host (consider using HTTPS for custom hostnames).");e.events.removeAllListeners(),e.workerChannel.on("REQUEST",_r(e,r)),e.workerChannel.on("RESPONSE",function(e){return(t,r)=>{var n;const{payload:i}=r;if(null===(n=i.type)||void 0===n?void 0:n.includes("opaque"))return;const o=new Response(i.body||null,i);"msw"===o.headers.get("x-powered-by")?e.emitter.emit("response:mocked",o,i.requestId):e.emitter.emit("response:bypass",o,i.requestId)}}(e));const n=yield ve(r.serviceWorker.url,r.serviceWorker.options,r.findWorker),[i,o]=n;if(!i){const e=(null==t?void 0:t.findWorker)?`[MSW] Failed to locate the Service Worker registration using a custom "findWorker" predicate.\n\nPlease ensure that the custom predicate properly locates the Service Worker registration at "${r.serviceWorker.url}".\nMore details: https://mswjs.io/docs/api/setup-worker/start#findworker\n`:`[MSW] Failed to locate the Service Worker registration.\n\nThis most likely means that the worker script URL "${r.serviceWorker.url}" cannot resolve against the actual public hostname (${location.host}). This may happen if your application runs behind a proxy, or has a dynamic hostname.\n\nPlease consider using a custom "serviceWorker.url" option to point to the actual worker script location, or a custom "findWorker" option to resolve the Service Worker registration manually. More details: https://mswjs.io/docs/api/setup-worker/start`;throw new Error(e)}e.worker=i,e.registration=o,e.events.addListener(window,"beforeunload",(()=>{"redundant"!==i.state&&e.workerChannel.send("CLIENT_CLOSED"),window.clearInterval(e.keepAliveInterval)}));const[s]=yield fe((()=>function(e,t){return pe(this,void 0,void 0,(function*(){e.workerChannel.send("INTEGRITY_CHECK_REQUEST");const{payload:r}=yield e.events.once("INTEGRITY_CHECK_RESPONSE");if("82ef9b96d8393b6da34527d1d6e19187"!==r)throw new Error(`Currently active Service Worker (${r}) is behind the latest published one (82ef9b96d8393b6da34527d1d6e19187).`);return t}))}(e,i)));return s&&console.error(`[MSW] Detected outdated Service Worker: ${s.message}\n\nThe mocking is still enabled, but it's highly recommended that you update your Service Worker by running:\n\n$ npx msw init <PUBLIC_DIR>\n\nThis is necessary to ensure that the Service Worker is in sync with the library to guarantee its stability.\nIf this message still persists after updating, please report an issue: https://github.com/open-draft/msw/issues `),yield((e,t)=>pe(void 0,void 0,void 0,(function*(){return e.workerChannel.send("MOCK_ACTIVATE"),e.events.once("MOCKING_ENABLED").then((()=>{(null==t?void 0:t.quiet)||(console.groupCollapsed("%c[MSW] Mocking enabled.","color:orangered;font-weight:bold;"),console.log("%cDocumentation: %chttps://mswjs.io/docs","font-weight:bold","font-weight:normal"),console.log("Found an issue? https://github.com/mswjs/msw/issues"),console.groupEnd())}))})))(e,t).catch((e=>{throw new Error(`Failed to enable mocking: ${null==e?void 0:e.message}`)})),e.keepAliveInterval=window.setInterval((()=>e.workerChannel.send("KEEPALIVE_REQUEST")),5e3),o})))();return r.waitUntilReady&&function(e){const t=window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.send=function(...r){fe((()=>e)).then((()=>{window.XMLHttpRequest.prototype.send=t,this.send(...r)}))};const r=window.fetch;window.fetch=(...t)=>pe(this,void 0,void 0,(function*(){return yield fe((()=>e)),window.fetch=r,window.fetch(...t)}))}(n),n},kr=e=>function(){var t;e.workerChannel.send("MOCK_DEACTIVATE"),e.events.removeAllListeners(),e.emitter.removeAllListeners(),window.clearInterval(e.keepAliveInterval),(null===(t=e.startOptions)||void 0===t?void 0:t.quiet)||console.log("%c[MSW] Mocking disabled.","color:orangered;font-weight:bold;")};let Ir=[];function xr(e){return(t,r)=>new ar(e,t,r)}const Ar={head:xr(e.RESTMethods.HEAD),get:xr(e.RESTMethods.GET),post:xr(e.RESTMethods.POST),put:xr(e.RESTMethods.PUT),delete:xr(e.RESTMethods.DELETE),patch:xr(e.RESTMethods.PATCH),options:xr(e.RESTMethods.OPTIONS)};function Rr(e,t){return(r,n)=>new ur(e,r,t,n)}function Cr(e){return t=>new ur("all",new RegExp(".*"),e,t)}const Lr={operation:Cr("*"),query:Rr("query","*"),mutation:Rr("mutation","*")};const jr=Object.assign(Object.assign({},Lr),{link:function(e){return{operation:Cr(e),query:Rr("query",e),mutation:Rr("mutation",e)}}});return e.GraphQLHandler=ur,e.RequestHandler=ir,e.RestHandler=ar,e.compose=Qt,e.context=G,e.createResponseComposition=tr,e.defaultContext=nr,e.defaultResponse=Zt,e.graphql=jr,e.graphqlContext=cr,e.matchRequestUrl=zt,e.response=rr,e.rest=Ar,e.restContext=sr,e.setupWorker=function(...e){e.forEach((e=>{if(Array.isArray(e))throw new Error('[MSW] Failed to call "setupWorker" given an Array of request handlers (setupWorker([a, b])), expected to receive each handler individually: setupWorker(a, b).')}));const t={startOptions:void 0,worker:null,registration:null,requestHandlers:[...e],emitter:new he.StrictEventEmitter,workerChannel:{on(e,r){t.events.addListener(navigator.serviceWorker,"message",(n=>{if(n.source!==t.worker)return;const i=C(n.data);i&&i.type===e&&r(n,i)}))},send(e){var r;null===(r=t.worker)||void 0===r||r.postMessage(e)}},events:{addListener:(e,t,r)=>(e.addEventListener(t,r),Ir.push({eventType:t,target:e,callback:r}),()=>{e.removeEventListener(t,r)}),removeAllListeners(){for(const{target:e,eventType:t,callback:r}of Ir)e.removeEventListener(t,r);Ir=[]},once(e){const r=[];return new Promise(((n,i)=>{r.push(t.events.addListener(navigator.serviceWorker,"message",(t=>{try{const r=JSON.parse(t.data);r.type===e&&n(r)}catch(e){i(e)}})),t.events.addListener(navigator.serviceWorker,"messageerror",i))})).finally((()=>{r.forEach((e=>e()))}))}}};if(M())throw new Error("[MSW] Failed to execute `setupWorker` in a non-browser environment. Consider using `setupServer` for Node.js environment instead.");return{start:Sr(t),stop:kr(t),use(...e){console.log("adding new handlers",e),function(e,...t){e.unshift(...t)}(t.requestHandlers,...e)},restoreHandlers(){t.requestHandlers.forEach((e=>{e.markAsSkipped(!1)}))},resetHandlers(...r){t.requestHandlers=function(e,...t){return t.length>0?[...t]:[...e]}(e,...r)},printHandlers(){t.requestHandlers.forEach((e=>{const{header:t,callFrame:r}=e.info,n=e.info.hasOwnProperty("operationType")?"[graphql]":"[rest]";console.groupCollapsed(`${n} ${t}`),r&&console.log(`Declaration: ${r}`),console.log("Handler:",e),e instanceof ar&&console.log("Match:",`https://mswjs.io/repl?path=${e.info.mask}`),console.groupEnd()}))},on(e,r){t.emitter.addListener(e,r)}}},e}({});
@@ -7,7 +7,7 @@
7
7
  /* eslint-disable */
8
8
  /* tslint:disable */
9
9
 
10
- const INTEGRITY_CHECKSUM = '795882c72c7304f6fa1d4a65a2418900'
10
+ const INTEGRITY_CHECKSUM = '82ef9b96d8393b6da34527d1d6e19187'
11
11
  const bypassHeaderName = 'x-msw-bypass'
12
12
  const activeClientIds = new Set()
13
13
 
@@ -114,7 +114,7 @@ async function handleRequest(event, requestId) {
114
114
  // Send back the response clone for the "response:*" life-cycle events.
115
115
  // Ensure MSW is active and ready to handle the message, otherwise
116
116
  // this message will pend indefinitely.
117
- if (activeClientIds.has(client.id)) {
117
+ if (client && activeClientIds.has(client.id)) {
118
118
  ;(async function () {
119
119
  const clonedResponse = response.clone()
120
120
  sendToClient(client, {
package/lib/umd/index.js CHANGED
@@ -1822,9 +1822,17 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
1822
1822
  return acc;
1823
1823
  }
1824
1824
  const result = yield handler.run(request);
1825
- if (result === null || !result.response || result.handler.shouldSkip) {
1825
+ if (result === null || result.handler.shouldSkip) {
1826
1826
  return null;
1827
1827
  }
1828
+ if (!result.response) {
1829
+ return {
1830
+ request: result.request,
1831
+ handler: result.handler,
1832
+ response: undefined,
1833
+ parsedResult: result.parsedResult,
1834
+ };
1835
+ }
1828
1836
  if (result.response.once) {
1829
1837
  handler.markAsSkipped(true);
1830
1838
  }
@@ -6593,7 +6601,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
6593
6601
  if (!contentType) {
6594
6602
  return undefined;
6595
6603
  }
6596
- const [, ...directives] = contentType.split('; ');
6604
+ const [, ...directives] = contentType.split(/; */);
6597
6605
  const boundary = directives
6598
6606
  .filter((d) => d.startsWith('boundary='))
6599
6607
  .map((s) => s.replace(/^boundary=/, ''))[0];
@@ -7707,8 +7715,8 @@ Invalid value has been removed from localStorage to prevent subsequent failed pa
7707
7715
  const { payload: actualChecksum } = yield context.events.once('INTEGRITY_CHECK_RESPONSE');
7708
7716
  // Compare the response from the Service Worker and the
7709
7717
  // global variable set by webpack upon build.
7710
- if (actualChecksum !== "795882c72c7304f6fa1d4a65a2418900") {
7711
- throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"795882c72c7304f6fa1d4a65a2418900"}).`);
7718
+ if (actualChecksum !== "82ef9b96d8393b6da34527d1d6e19187") {
7719
+ throw new Error(`Currently active Service Worker (${actualChecksum}) is behind the latest published one (${"82ef9b96d8393b6da34527d1d6e19187"}).`);
7712
7720
  }
7713
7721
  return serviceWorker;
7714
7722
  });
@@ -7,7 +7,7 @@
7
7
  /* eslint-disable */
8
8
  /* tslint:disable */
9
9
 
10
- const INTEGRITY_CHECKSUM = '795882c72c7304f6fa1d4a65a2418900'
10
+ const INTEGRITY_CHECKSUM = '82ef9b96d8393b6da34527d1d6e19187'
11
11
  const bypassHeaderName = 'x-msw-bypass'
12
12
  const activeClientIds = new Set()
13
13
 
@@ -114,7 +114,7 @@ async function handleRequest(event, requestId) {
114
114
  // Send back the response clone for the "response:*" life-cycle events.
115
115
  // Ensure MSW is active and ready to handle the message, otherwise
116
116
  // this message will pend indefinitely.
117
- if (activeClientIds.has(client.id)) {
117
+ if (client && activeClientIds.has(client.id)) {
118
118
  ;(async function () {
119
119
  const clonedResponse = response.clone()
120
120
  sendToClient(client, {
@@ -2218,9 +2218,17 @@ const getResponse = (request, handlers) => __awaiter(void 0, void 0, void 0, fun
2218
2218
  return acc;
2219
2219
  }
2220
2220
  const result = yield handler.run(request);
2221
- if (result === null || !result.response || result.handler.shouldSkip) {
2221
+ if (result === null || result.handler.shouldSkip) {
2222
2222
  return null;
2223
2223
  }
2224
+ if (!result.response) {
2225
+ return {
2226
+ request: result.request,
2227
+ handler: result.handler,
2228
+ response: undefined,
2229
+ parsedResult: result.parsedResult,
2230
+ };
2231
+ }
2224
2232
  if (result.response.once) {
2225
2233
  handler.markAsSkipped(true);
2226
2234
  }
@@ -2812,7 +2820,7 @@ function parseMultipartData(data, headers) {
2812
2820
  if (!contentType) {
2813
2821
  return undefined;
2814
2822
  }
2815
- const [, ...directives] = contentType.split('; ');
2823
+ const [, ...directives] = contentType.split(/; */);
2816
2824
  const boundary = directives
2817
2825
  .filter((d) => d.startsWith('boundary='))
2818
2826
  .map((s) => s.replace(/^boundary=/, ''))[0];
@@ -7612,10 +7620,10 @@ function createSetupServer(...interceptors$1) {
7612
7620
  const { response, handler } = yield getResponse(mockedRequest, currentHandlers);
7613
7621
  if (!handler) {
7614
7622
  emitter.emit('request:unhandled', mockedRequest);
7623
+ onUnhandledRequest(mockedRequest, currentHandlers, resolvedOptions.onUnhandledRequest);
7615
7624
  }
7616
7625
  if (!response) {
7617
7626
  emitter.emit('request:end', mockedRequest);
7618
- onUnhandledRequest(mockedRequest, currentHandlers, resolvedOptions.onUnhandledRequest);
7619
7627
  return;
7620
7628
  }
7621
7629
  emitter.emit('request:match', mockedRequest);
package/node/lib/index.js CHANGED
@@ -2220,9 +2220,17 @@ const getResponse = (request, handlers) => __awaiter(void 0, void 0, void 0, fun
2220
2220
  return acc;
2221
2221
  }
2222
2222
  const result = yield handler.run(request);
2223
- if (result === null || !result.response || result.handler.shouldSkip) {
2223
+ if (result === null || result.handler.shouldSkip) {
2224
2224
  return null;
2225
2225
  }
2226
+ if (!result.response) {
2227
+ return {
2228
+ request: result.request,
2229
+ handler: result.handler,
2230
+ response: undefined,
2231
+ parsedResult: result.parsedResult,
2232
+ };
2233
+ }
2226
2234
  if (result.response.once) {
2227
2235
  handler.markAsSkipped(true);
2228
2236
  }
@@ -2814,7 +2822,7 @@ function parseMultipartData(data, headers) {
2814
2822
  if (!contentType) {
2815
2823
  return undefined;
2816
2824
  }
2817
- const [, ...directives] = contentType.split('; ');
2825
+ const [, ...directives] = contentType.split(/; */);
2818
2826
  const boundary = directives
2819
2827
  .filter((d) => d.startsWith('boundary='))
2820
2828
  .map((s) => s.replace(/^boundary=/, ''))[0];
@@ -7614,10 +7622,10 @@ function createSetupServer(...interceptors$1) {
7614
7622
  const { response, handler } = yield getResponse(mockedRequest, currentHandlers);
7615
7623
  if (!handler) {
7616
7624
  emitter.emit('request:unhandled', mockedRequest);
7625
+ onUnhandledRequest(mockedRequest, currentHandlers, resolvedOptions.onUnhandledRequest);
7617
7626
  }
7618
7627
  if (!response) {
7619
7628
  emitter.emit('request:end', mockedRequest);
7620
- onUnhandledRequest(mockedRequest, currentHandlers, resolvedOptions.onUnhandledRequest);
7621
7629
  return;
7622
7630
  }
7623
7631
  emitter.emit('request:match', mockedRequest);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "msw",
3
- "version": "0.28.0",
3
+ "version": "0.28.1",
4
4
  "description": "Seamless REST/GraphQL API mocking library for browser and Node.js.",
5
5
  "main": "lib/umd/index.js",
6
6
  "module": "lib/esm/index.js",
@@ -92,7 +92,6 @@
92
92
  "@rollup/plugin-json": "^4.1.0",
93
93
  "@rollup/plugin-node-resolve": "^11.1.0",
94
94
  "@rollup/plugin-replace": "^2.4.1",
95
- "@types/express": "^4.17.11",
96
95
  "@types/fs-extra": "^9.0.6",
97
96
  "@types/jest": "^26.0.20",
98
97
  "@types/json-bigint": "^1.0.0",
@@ -109,15 +108,13 @@
109
108
  "eslint": "^7.18.0",
110
109
  "eslint-config-prettier": "^8.1.0",
111
110
  "eslint-plugin-prettier": "^3.3.1",
112
- "express": "^4.17.1",
113
111
  "fs-extra": "^9.1.0",
114
112
  "fs-teardown": "^0.1.1",
115
113
  "husky": "^5.1.1",
116
- "ignore-loader": "^0.1.2",
117
114
  "jest": "^26.6.3",
118
115
  "json-bigint": "^1.0.0",
119
116
  "lint-staged": "^10.5.1",
120
- "page-with": "^0.2.6",
117
+ "page-with": "^0.3.4",
121
118
  "prettier": "^2.2.1",
122
119
  "regenerator-runtime": "^0.13.7",
123
120
  "rimraf": "^3.0.2",