msw 2.1.7 → 2.2.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.
- package/cli/init.js +9 -13
- package/lib/browser/index.js +12 -8
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +12 -8
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/HttpResponse.js +14 -1
- package/lib/core/HttpResponse.js.map +1 -1
- package/lib/core/HttpResponse.mjs +14 -1
- package/lib/core/HttpResponse.mjs.map +1 -1
- package/lib/core/SetupApi.d.mts +15 -3
- package/lib/core/SetupApi.d.ts +15 -3
- package/lib/core/SetupApi.js +26 -8
- package/lib/core/SetupApi.js.map +1 -1
- package/lib/core/SetupApi.mjs +26 -8
- package/lib/core/SetupApi.mjs.map +1 -1
- package/lib/iife/index.js +48 -17
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.mts +10 -5
- package/lib/native/index.d.ts +10 -5
- package/lib/native/index.js +9 -9
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +9 -9
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.d.mts +26 -4
- package/lib/node/index.d.ts +26 -4
- package/lib/node/index.js +62 -13
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +62 -13
- package/lib/node/index.mjs.map +1 -1
- package/package.json +15 -7
- package/src/browser/setupWorker/glossary.ts +1 -19
- package/src/browser/setupWorker/setupWorker.ts +3 -11
- package/src/browser/setupWorker/start/createFallbackRequestListener.ts +1 -1
- package/src/browser/setupWorker/start/createRequestListener.ts +1 -1
- package/src/browser/setupWorker/start/createResponseListener.ts +13 -0
- package/src/core/HttpResponse.test.ts +34 -3
- package/src/core/HttpResponse.ts +24 -1
- package/src/core/SetupApi.ts +33 -9
- package/src/native/index.ts +5 -5
- package/src/node/SetupServerApi.ts +64 -95
- package/src/node/SetupServerCommonApi.ts +116 -0
- package/src/node/glossary.ts +17 -3
- package/src/node/setupServer.ts +3 -10
package/lib/core/HttpResponse.js
CHANGED
|
@@ -39,6 +39,12 @@ class HttpResponse extends Response {
|
|
|
39
39
|
if (!responseInit.headers.has("Content-Type")) {
|
|
40
40
|
responseInit.headers.set("Content-Type", "text/plain");
|
|
41
41
|
}
|
|
42
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
43
|
+
responseInit.headers.set(
|
|
44
|
+
"Content-Length",
|
|
45
|
+
body ? body.length.toString() : "0"
|
|
46
|
+
);
|
|
47
|
+
}
|
|
42
48
|
return new HttpResponse(body, responseInit);
|
|
43
49
|
}
|
|
44
50
|
/**
|
|
@@ -52,8 +58,15 @@ class HttpResponse extends Response {
|
|
|
52
58
|
if (!responseInit.headers.has("Content-Type")) {
|
|
53
59
|
responseInit.headers.set("Content-Type", "application/json");
|
|
54
60
|
}
|
|
61
|
+
const responseText = JSON.stringify(body);
|
|
62
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
63
|
+
responseInit.headers.set(
|
|
64
|
+
"Content-Length",
|
|
65
|
+
responseText ? responseText.length.toString() : "0"
|
|
66
|
+
);
|
|
67
|
+
}
|
|
55
68
|
return new HttpResponse(
|
|
56
|
-
|
|
69
|
+
responseText,
|
|
57
70
|
responseInit
|
|
58
71
|
);
|
|
59
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/HttpResponse.ts"],"sourcesContent":["import type { DefaultBodyType, JsonBodyType } from './handlers/RequestHandler'\nimport {\n decorateResponse,\n normalizeResponseInit,\n} from './utils/HttpResponse/decorators'\n\nexport interface HttpResponseInit extends ResponseInit {\n type?: ResponseType\n}\n\ndeclare const bodyType: unique symbol\n\nexport interface StrictRequest<BodyType extends DefaultBodyType>\n extends Request {\n json(): Promise<BodyType>\n}\n\n/**\n * Opaque `Response` type that supports strict body type.\n */\nexport interface StrictResponse<BodyType extends DefaultBodyType>\n extends Response {\n readonly [bodyType]: BodyType\n}\n\n/**\n * A drop-in replacement for the standard `Response` class\n * to allow additional features, like mocking the response `Set-Cookie` header.\n *\n * @example\n * new HttpResponse('Hello world', { status: 201 })\n * HttpResponse.json({ name: 'John' })\n * HttpResponse.formData(form)\n *\n * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference}\n */\nexport class HttpResponse extends Response {\n constructor(body?: BodyInit | null, init?: HttpResponseInit) {\n const responseInit = normalizeResponseInit(init)\n super(body, responseInit)\n decorateResponse(this, responseInit)\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"text/plain\"` body.\n * @example\n * HttpResponse.text('hello world')\n * HttpResponse.text('Error', { status: 500 })\n */\n static text<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/plain')\n }\n\n return new HttpResponse(body, responseInit) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/json\"` body.\n * @example\n * HttpResponse.json({ firstName: 'John' })\n * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 })\n */\n static json<BodyType extends JsonBodyType>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'application/json')\n }\n\n return
|
|
1
|
+
{"version":3,"sources":["../../src/core/HttpResponse.ts"],"sourcesContent":["import type { DefaultBodyType, JsonBodyType } from './handlers/RequestHandler'\nimport {\n decorateResponse,\n normalizeResponseInit,\n} from './utils/HttpResponse/decorators'\n\nexport interface HttpResponseInit extends ResponseInit {\n type?: ResponseType\n}\n\ndeclare const bodyType: unique symbol\n\nexport interface StrictRequest<BodyType extends DefaultBodyType>\n extends Request {\n json(): Promise<BodyType>\n}\n\n/**\n * Opaque `Response` type that supports strict body type.\n */\nexport interface StrictResponse<BodyType extends DefaultBodyType>\n extends Response {\n readonly [bodyType]: BodyType\n}\n\n/**\n * A drop-in replacement for the standard `Response` class\n * to allow additional features, like mocking the response `Set-Cookie` header.\n *\n * @example\n * new HttpResponse('Hello world', { status: 201 })\n * HttpResponse.json({ name: 'John' })\n * HttpResponse.formData(form)\n *\n * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference}\n */\nexport class HttpResponse extends Response {\n constructor(body?: BodyInit | null, init?: HttpResponseInit) {\n const responseInit = normalizeResponseInit(init)\n super(body, responseInit)\n decorateResponse(this, responseInit)\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"text/plain\"` body.\n * @example\n * HttpResponse.text('hello world')\n * HttpResponse.text('Error', { status: 500 })\n */\n static text<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/plain')\n }\n\n // Automatically set the \"Content-Length\" response header\n // for non-empty text responses. This enforces consistency and\n // brings mocked responses closer to production.\n if (!responseInit.headers.has('Content-Length')) {\n responseInit.headers.set(\n 'Content-Length',\n body ? body.length.toString() : '0',\n )\n }\n\n return new HttpResponse(body, responseInit) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/json\"` body.\n * @example\n * HttpResponse.json({ firstName: 'John' })\n * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 })\n */\n static json<BodyType extends JsonBodyType>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'application/json')\n }\n\n /**\n * @note TypeScript is incorrect here.\n * Stringifying undefined will return undefined.\n */\n const responseText = JSON.stringify(body) as string | undefined\n\n if (!responseInit.headers.has('Content-Length')) {\n responseInit.headers.set(\n 'Content-Length',\n responseText ? responseText.length.toString() : '0',\n )\n }\n\n return new HttpResponse(\n responseText,\n responseInit,\n ) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/xml\"` body.\n * @example\n * HttpResponse.xml(`<user name=\"John\" />`)\n * HttpResponse.xml(`<article id=\"abc-123\" />`, { status: 201 })\n */\n static xml<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): Response {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/xml')\n }\n\n return new HttpResponse(body, responseInit)\n }\n\n /**\n * Create a `Response` with an `ArrayBuffer` body.\n * @example\n * const buffer = new ArrayBuffer(3)\n * const view = new Uint8Array(buffer)\n * view.set([1, 2, 3])\n *\n * HttpResponse.arrayBuffer(buffer)\n */\n static arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response {\n const responseInit = normalizeResponseInit(init)\n\n if (body) {\n responseInit.headers.set('Content-Length', body.byteLength.toString())\n }\n\n return new HttpResponse(body, responseInit)\n }\n\n /**\n * Create a `Response` with a `FormData` body.\n * @example\n * const data = new FormData()\n * data.set('name', 'Alice')\n *\n * HttpResponse.formData(data)\n */\n static formData(body?: FormData, init?: HttpResponseInit): Response {\n return new HttpResponse(body, normalizeResponseInit(init))\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAGO;AAgCA,MAAM,qBAAqB,SAAS;AAAA,EACzC,YAAY,MAAwB,MAAyB;AAC3D,UAAM,mBAAe,yCAAsB,IAAI;AAC/C,UAAM,MAAM,YAAY;AACxB,4CAAiB,MAAM,YAAY;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KACL,MACA,MAC0B;AAC1B,UAAM,mBAAe,yCAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,YAAY;AAAA,IACvD;AAKA,QAAI,CAAC,aAAa,QAAQ,IAAI,gBAAgB,GAAG;AAC/C,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,OAAO,KAAK,OAAO,SAAS,IAAI;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KACL,MACA,MAC0B;AAC1B,UAAM,mBAAe,yCAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,kBAAkB;AAAA,IAC7D;AAMA,UAAM,eAAe,KAAK,UAAU,IAAI;AAExC,QAAI,CAAC,aAAa,QAAQ,IAAI,gBAAgB,GAAG;AAC/C,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,eAAe,aAAa,OAAO,SAAS,IAAI;AAAA,MAClD;AAAA,IACF;AAEA,WAAO,IAAI;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IACL,MACA,MACU;AACV,UAAM,mBAAe,yCAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,UAAU;AAAA,IACrD;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YAAY,MAAoB,MAAmC;AACxE,UAAM,mBAAe,yCAAsB,IAAI;AAE/C,QAAI,MAAM;AACR,mBAAa,QAAQ,IAAI,kBAAkB,KAAK,WAAW,SAAS,CAAC;AAAA,IACvE;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,SAAS,MAAiB,MAAmC;AAClE,WAAO,IAAI,aAAa,UAAM,yCAAsB,IAAI,CAAC;AAAA,EAC3D;AACF;","names":[]}
|
|
@@ -19,6 +19,12 @@ class HttpResponse extends Response {
|
|
|
19
19
|
if (!responseInit.headers.has("Content-Type")) {
|
|
20
20
|
responseInit.headers.set("Content-Type", "text/plain");
|
|
21
21
|
}
|
|
22
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
23
|
+
responseInit.headers.set(
|
|
24
|
+
"Content-Length",
|
|
25
|
+
body ? body.length.toString() : "0"
|
|
26
|
+
);
|
|
27
|
+
}
|
|
22
28
|
return new HttpResponse(body, responseInit);
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
@@ -32,8 +38,15 @@ class HttpResponse extends Response {
|
|
|
32
38
|
if (!responseInit.headers.has("Content-Type")) {
|
|
33
39
|
responseInit.headers.set("Content-Type", "application/json");
|
|
34
40
|
}
|
|
41
|
+
const responseText = JSON.stringify(body);
|
|
42
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
43
|
+
responseInit.headers.set(
|
|
44
|
+
"Content-Length",
|
|
45
|
+
responseText ? responseText.length.toString() : "0"
|
|
46
|
+
);
|
|
47
|
+
}
|
|
35
48
|
return new HttpResponse(
|
|
36
|
-
|
|
49
|
+
responseText,
|
|
37
50
|
responseInit
|
|
38
51
|
);
|
|
39
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/HttpResponse.ts"],"sourcesContent":["import type { DefaultBodyType, JsonBodyType } from './handlers/RequestHandler'\nimport {\n decorateResponse,\n normalizeResponseInit,\n} from './utils/HttpResponse/decorators'\n\nexport interface HttpResponseInit extends ResponseInit {\n type?: ResponseType\n}\n\ndeclare const bodyType: unique symbol\n\nexport interface StrictRequest<BodyType extends DefaultBodyType>\n extends Request {\n json(): Promise<BodyType>\n}\n\n/**\n * Opaque `Response` type that supports strict body type.\n */\nexport interface StrictResponse<BodyType extends DefaultBodyType>\n extends Response {\n readonly [bodyType]: BodyType\n}\n\n/**\n * A drop-in replacement for the standard `Response` class\n * to allow additional features, like mocking the response `Set-Cookie` header.\n *\n * @example\n * new HttpResponse('Hello world', { status: 201 })\n * HttpResponse.json({ name: 'John' })\n * HttpResponse.formData(form)\n *\n * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference}\n */\nexport class HttpResponse extends Response {\n constructor(body?: BodyInit | null, init?: HttpResponseInit) {\n const responseInit = normalizeResponseInit(init)\n super(body, responseInit)\n decorateResponse(this, responseInit)\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"text/plain\"` body.\n * @example\n * HttpResponse.text('hello world')\n * HttpResponse.text('Error', { status: 500 })\n */\n static text<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/plain')\n }\n\n return new HttpResponse(body, responseInit) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/json\"` body.\n * @example\n * HttpResponse.json({ firstName: 'John' })\n * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 })\n */\n static json<BodyType extends JsonBodyType>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'application/json')\n }\n\n return
|
|
1
|
+
{"version":3,"sources":["../../src/core/HttpResponse.ts"],"sourcesContent":["import type { DefaultBodyType, JsonBodyType } from './handlers/RequestHandler'\nimport {\n decorateResponse,\n normalizeResponseInit,\n} from './utils/HttpResponse/decorators'\n\nexport interface HttpResponseInit extends ResponseInit {\n type?: ResponseType\n}\n\ndeclare const bodyType: unique symbol\n\nexport interface StrictRequest<BodyType extends DefaultBodyType>\n extends Request {\n json(): Promise<BodyType>\n}\n\n/**\n * Opaque `Response` type that supports strict body type.\n */\nexport interface StrictResponse<BodyType extends DefaultBodyType>\n extends Response {\n readonly [bodyType]: BodyType\n}\n\n/**\n * A drop-in replacement for the standard `Response` class\n * to allow additional features, like mocking the response `Set-Cookie` header.\n *\n * @example\n * new HttpResponse('Hello world', { status: 201 })\n * HttpResponse.json({ name: 'John' })\n * HttpResponse.formData(form)\n *\n * @see {@link https://mswjs.io/docs/api/http-response `HttpResponse` API reference}\n */\nexport class HttpResponse extends Response {\n constructor(body?: BodyInit | null, init?: HttpResponseInit) {\n const responseInit = normalizeResponseInit(init)\n super(body, responseInit)\n decorateResponse(this, responseInit)\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"text/plain\"` body.\n * @example\n * HttpResponse.text('hello world')\n * HttpResponse.text('Error', { status: 500 })\n */\n static text<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/plain')\n }\n\n // Automatically set the \"Content-Length\" response header\n // for non-empty text responses. This enforces consistency and\n // brings mocked responses closer to production.\n if (!responseInit.headers.has('Content-Length')) {\n responseInit.headers.set(\n 'Content-Length',\n body ? body.length.toString() : '0',\n )\n }\n\n return new HttpResponse(body, responseInit) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/json\"` body.\n * @example\n * HttpResponse.json({ firstName: 'John' })\n * HttpResponse.json({ error: 'Not Authorized' }, { status: 401 })\n */\n static json<BodyType extends JsonBodyType>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): StrictResponse<BodyType> {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'application/json')\n }\n\n /**\n * @note TypeScript is incorrect here.\n * Stringifying undefined will return undefined.\n */\n const responseText = JSON.stringify(body) as string | undefined\n\n if (!responseInit.headers.has('Content-Length')) {\n responseInit.headers.set(\n 'Content-Length',\n responseText ? responseText.length.toString() : '0',\n )\n }\n\n return new HttpResponse(\n responseText,\n responseInit,\n ) as StrictResponse<BodyType>\n }\n\n /**\n * Create a `Response` with a `Content-Type: \"application/xml\"` body.\n * @example\n * HttpResponse.xml(`<user name=\"John\" />`)\n * HttpResponse.xml(`<article id=\"abc-123\" />`, { status: 201 })\n */\n static xml<BodyType extends string>(\n body?: BodyType | null,\n init?: HttpResponseInit,\n ): Response {\n const responseInit = normalizeResponseInit(init)\n\n if (!responseInit.headers.has('Content-Type')) {\n responseInit.headers.set('Content-Type', 'text/xml')\n }\n\n return new HttpResponse(body, responseInit)\n }\n\n /**\n * Create a `Response` with an `ArrayBuffer` body.\n * @example\n * const buffer = new ArrayBuffer(3)\n * const view = new Uint8Array(buffer)\n * view.set([1, 2, 3])\n *\n * HttpResponse.arrayBuffer(buffer)\n */\n static arrayBuffer(body?: ArrayBuffer, init?: HttpResponseInit): Response {\n const responseInit = normalizeResponseInit(init)\n\n if (body) {\n responseInit.headers.set('Content-Length', body.byteLength.toString())\n }\n\n return new HttpResponse(body, responseInit)\n }\n\n /**\n * Create a `Response` with a `FormData` body.\n * @example\n * const data = new FormData()\n * data.set('name', 'Alice')\n *\n * HttpResponse.formData(data)\n */\n static formData(body?: FormData, init?: HttpResponseInit): Response {\n return new HttpResponse(body, normalizeResponseInit(init))\n }\n}\n"],"mappings":"AACA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAgCA,MAAM,qBAAqB,SAAS;AAAA,EACzC,YAAY,MAAwB,MAAyB;AAC3D,UAAM,eAAe,sBAAsB,IAAI;AAC/C,UAAM,MAAM,YAAY;AACxB,qBAAiB,MAAM,YAAY;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KACL,MACA,MAC0B;AAC1B,UAAM,eAAe,sBAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,YAAY;AAAA,IACvD;AAKA,QAAI,CAAC,aAAa,QAAQ,IAAI,gBAAgB,GAAG;AAC/C,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,OAAO,KAAK,OAAO,SAAS,IAAI;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KACL,MACA,MAC0B;AAC1B,UAAM,eAAe,sBAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,kBAAkB;AAAA,IAC7D;AAMA,UAAM,eAAe,KAAK,UAAU,IAAI;AAExC,QAAI,CAAC,aAAa,QAAQ,IAAI,gBAAgB,GAAG;AAC/C,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,eAAe,aAAa,OAAO,SAAS,IAAI;AAAA,MAClD;AAAA,IACF;AAEA,WAAO,IAAI;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IACL,MACA,MACU;AACV,UAAM,eAAe,sBAAsB,IAAI;AAE/C,QAAI,CAAC,aAAa,QAAQ,IAAI,cAAc,GAAG;AAC7C,mBAAa,QAAQ,IAAI,gBAAgB,UAAU;AAAA,IACrD;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,YAAY,MAAoB,MAAmC;AACxE,UAAM,eAAe,sBAAsB,IAAI;AAE/C,QAAI,MAAM;AACR,mBAAa,QAAQ,IAAI,kBAAkB,KAAK,WAAW,SAAS,CAAC;AAAA,IACvE;AAEA,WAAO,IAAI,aAAa,MAAM,YAAY;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,SAAS,MAAiB,MAAmC;AAClE,WAAO,IAAI,aAAa,MAAM,sBAAsB,IAAI,CAAC;AAAA,EAC3D;AACF;","names":[]}
|
package/lib/core/SetupApi.d.mts
CHANGED
|
@@ -5,12 +5,24 @@ import { Disposable } from './utils/internal/Disposable.mjs';
|
|
|
5
5
|
import './typeUtils.mjs';
|
|
6
6
|
import './utils/request/onUnhandledRequest.mjs';
|
|
7
7
|
|
|
8
|
+
declare abstract class HandlersController {
|
|
9
|
+
abstract prepend(runtimeHandlers: Array<RequestHandler>): void;
|
|
10
|
+
abstract reset(nextHandles: Array<RequestHandler>): void;
|
|
11
|
+
abstract currentHandlers(): Array<RequestHandler>;
|
|
12
|
+
}
|
|
13
|
+
declare class InMemoryHandlersController implements HandlersController {
|
|
14
|
+
private initialHandlers;
|
|
15
|
+
private handlers;
|
|
16
|
+
constructor(initialHandlers: Array<RequestHandler>);
|
|
17
|
+
prepend(runtimeHandles: Array<RequestHandler>): void;
|
|
18
|
+
reset(nextHandlers: Array<RequestHandler>): void;
|
|
19
|
+
currentHandlers(): Array<RequestHandler>;
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* Generic class for the mock API setup.
|
|
10
23
|
*/
|
|
11
24
|
declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
|
|
12
|
-
protected
|
|
13
|
-
protected currentHandlers: Array<RequestHandler>;
|
|
25
|
+
protected handlersController: HandlersController;
|
|
14
26
|
protected readonly emitter: Emitter<EventsMap>;
|
|
15
27
|
protected readonly publicEmitter: Emitter<EventsMap>;
|
|
16
28
|
readonly events: LifeCycleEventEmitter<EventsMap>;
|
|
@@ -23,4 +35,4 @@ declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
|
|
|
23
35
|
private createLifeCycleEvents;
|
|
24
36
|
}
|
|
25
37
|
|
|
26
|
-
export { SetupApi };
|
|
38
|
+
export { HandlersController, InMemoryHandlersController, SetupApi };
|
package/lib/core/SetupApi.d.ts
CHANGED
|
@@ -5,12 +5,24 @@ import { Disposable } from './utils/internal/Disposable.js';
|
|
|
5
5
|
import './typeUtils.js';
|
|
6
6
|
import './utils/request/onUnhandledRequest.js';
|
|
7
7
|
|
|
8
|
+
declare abstract class HandlersController {
|
|
9
|
+
abstract prepend(runtimeHandlers: Array<RequestHandler>): void;
|
|
10
|
+
abstract reset(nextHandles: Array<RequestHandler>): void;
|
|
11
|
+
abstract currentHandlers(): Array<RequestHandler>;
|
|
12
|
+
}
|
|
13
|
+
declare class InMemoryHandlersController implements HandlersController {
|
|
14
|
+
private initialHandlers;
|
|
15
|
+
private handlers;
|
|
16
|
+
constructor(initialHandlers: Array<RequestHandler>);
|
|
17
|
+
prepend(runtimeHandles: Array<RequestHandler>): void;
|
|
18
|
+
reset(nextHandlers: Array<RequestHandler>): void;
|
|
19
|
+
currentHandlers(): Array<RequestHandler>;
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* Generic class for the mock API setup.
|
|
10
23
|
*/
|
|
11
24
|
declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
|
|
12
|
-
protected
|
|
13
|
-
protected currentHandlers: Array<RequestHandler>;
|
|
25
|
+
protected handlersController: HandlersController;
|
|
14
26
|
protected readonly emitter: Emitter<EventsMap>;
|
|
15
27
|
protected readonly publicEmitter: Emitter<EventsMap>;
|
|
16
28
|
readonly events: LifeCycleEventEmitter<EventsMap>;
|
|
@@ -23,4 +35,4 @@ declare abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
|
|
|
23
35
|
private createLifeCycleEvents;
|
|
24
36
|
}
|
|
25
37
|
|
|
26
|
-
export { SetupApi };
|
|
38
|
+
export { HandlersController, InMemoryHandlersController, SetupApi };
|
package/lib/core/SetupApi.js
CHANGED
|
@@ -18,6 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var SetupApi_exports = {};
|
|
20
20
|
__export(SetupApi_exports, {
|
|
21
|
+
HandlersController: () => HandlersController,
|
|
22
|
+
InMemoryHandlersController: () => InMemoryHandlersController,
|
|
21
23
|
SetupApi: () => SetupApi
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(SetupApi_exports);
|
|
@@ -27,9 +29,26 @@ var import_devUtils = require("./utils/internal/devUtils.js");
|
|
|
27
29
|
var import_pipeEvents = require("./utils/internal/pipeEvents.js");
|
|
28
30
|
var import_toReadonlyArray = require("./utils/internal/toReadonlyArray.js");
|
|
29
31
|
var import_Disposable = require("./utils/internal/Disposable.js");
|
|
32
|
+
class HandlersController {
|
|
33
|
+
}
|
|
34
|
+
class InMemoryHandlersController {
|
|
35
|
+
constructor(initialHandlers) {
|
|
36
|
+
this.initialHandlers = initialHandlers;
|
|
37
|
+
this.handlers = [...initialHandlers];
|
|
38
|
+
}
|
|
39
|
+
handlers;
|
|
40
|
+
prepend(runtimeHandles) {
|
|
41
|
+
this.handlers.unshift(...runtimeHandles);
|
|
42
|
+
}
|
|
43
|
+
reset(nextHandlers) {
|
|
44
|
+
this.handlers = nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers];
|
|
45
|
+
}
|
|
46
|
+
currentHandlers() {
|
|
47
|
+
return this.handlers;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
30
50
|
class SetupApi extends import_Disposable.Disposable {
|
|
31
|
-
|
|
32
|
-
currentHandlers;
|
|
51
|
+
handlersController;
|
|
33
52
|
emitter;
|
|
34
53
|
publicEmitter;
|
|
35
54
|
events;
|
|
@@ -41,8 +60,7 @@ class SetupApi extends import_Disposable.Disposable {
|
|
|
41
60
|
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`
|
|
42
61
|
)
|
|
43
62
|
);
|
|
44
|
-
this.
|
|
45
|
-
this.currentHandlers = [...initialHandlers];
|
|
63
|
+
this.handlersController = new InMemoryHandlersController(initialHandlers);
|
|
46
64
|
this.emitter = new import_strict_event_emitter.Emitter();
|
|
47
65
|
this.publicEmitter = new import_strict_event_emitter.Emitter();
|
|
48
66
|
(0, import_pipeEvents.pipeEvents)(this.emitter, this.publicEmitter);
|
|
@@ -62,18 +80,18 @@ class SetupApi extends import_Disposable.Disposable {
|
|
|
62
80
|
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`
|
|
63
81
|
)
|
|
64
82
|
);
|
|
65
|
-
this.
|
|
83
|
+
this.handlersController.prepend(runtimeHandlers);
|
|
66
84
|
}
|
|
67
85
|
restoreHandlers() {
|
|
68
|
-
this.currentHandlers.forEach((handler) => {
|
|
86
|
+
this.handlersController.currentHandlers().forEach((handler) => {
|
|
69
87
|
handler.isUsed = false;
|
|
70
88
|
});
|
|
71
89
|
}
|
|
72
90
|
resetHandlers(...nextHandlers) {
|
|
73
|
-
this.
|
|
91
|
+
this.handlersController.reset(nextHandlers);
|
|
74
92
|
}
|
|
75
93
|
listHandlers() {
|
|
76
|
-
return (0, import_toReadonlyArray.toReadonlyArray)(this.currentHandlers);
|
|
94
|
+
return (0, import_toReadonlyArray.toReadonlyArray)(this.handlersController.currentHandlers());
|
|
77
95
|
}
|
|
78
96
|
createLifeCycleEvents() {
|
|
79
97
|
return {
|
package/lib/core/SetupApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected
|
|
1
|
+
{"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\nexport abstract class HandlersController {\n abstract prepend(runtimeHandlers: Array<RequestHandler>): void\n abstract reset(nextHandles: Array<RequestHandler>): void\n abstract currentHandlers(): Array<RequestHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler>\n\n constructor(private initialHandlers: Array<RequestHandler>) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(runtimeHandles: Array<RequestHandler>): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler>) {\n super()\n\n invariant(\n this.validateHandlers(initialHandlers),\n devUtils.formatMessage(\n `Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`,\n ),\n )\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<RequestHandler>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(...runtimeHandlers: Array<RequestHandler>): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`,\n ),\n )\n\n this.handlersController.prepend(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n handler.isUsed = false\n })\n }\n\n public resetHandlers(...nextHandlers: Array<RequestHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<\n RequestHandler<RequestHandlerDefaultInfo, any, any>\n > {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAC1B,kCAAkC;AAMlC,sBAAyB;AACzB,wBAA2B;AAC3B,6BAAgC;AAChC,wBAA2B;AAEpB,MAAe,mBAAmB;AAIzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YAAoB,iBAAwC;AAAxC;AAClB,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EAJQ;AAAA,EAMD,QAAQ,gBAA6C;AAC1D,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA2C;AACtD,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAAyC;AAC9C,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,6BAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAAwC;AACrD,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,oCAAmB;AACtC,SAAK,gBAAgB,IAAI,oCAAmB;AAC5C,sCAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAAkD;AAEzE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OAAO,iBAA8C;AAC1D;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,cAAQ,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAA2C;AACjE,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAEL;AACA,eAAO,wCAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/lib/core/SetupApi.mjs
CHANGED
|
@@ -4,9 +4,26 @@ import { devUtils } from './utils/internal/devUtils.mjs';
|
|
|
4
4
|
import { pipeEvents } from './utils/internal/pipeEvents.mjs';
|
|
5
5
|
import { toReadonlyArray } from './utils/internal/toReadonlyArray.mjs';
|
|
6
6
|
import { Disposable } from './utils/internal/Disposable.mjs';
|
|
7
|
+
class HandlersController {
|
|
8
|
+
}
|
|
9
|
+
class InMemoryHandlersController {
|
|
10
|
+
constructor(initialHandlers) {
|
|
11
|
+
this.initialHandlers = initialHandlers;
|
|
12
|
+
this.handlers = [...initialHandlers];
|
|
13
|
+
}
|
|
14
|
+
handlers;
|
|
15
|
+
prepend(runtimeHandles) {
|
|
16
|
+
this.handlers.unshift(...runtimeHandles);
|
|
17
|
+
}
|
|
18
|
+
reset(nextHandlers) {
|
|
19
|
+
this.handlers = nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers];
|
|
20
|
+
}
|
|
21
|
+
currentHandlers() {
|
|
22
|
+
return this.handlers;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
7
25
|
class SetupApi extends Disposable {
|
|
8
|
-
|
|
9
|
-
currentHandlers;
|
|
26
|
+
handlersController;
|
|
10
27
|
emitter;
|
|
11
28
|
publicEmitter;
|
|
12
29
|
events;
|
|
@@ -18,8 +35,7 @@ class SetupApi extends Disposable {
|
|
|
18
35
|
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`
|
|
19
36
|
)
|
|
20
37
|
);
|
|
21
|
-
this.
|
|
22
|
-
this.currentHandlers = [...initialHandlers];
|
|
38
|
+
this.handlersController = new InMemoryHandlersController(initialHandlers);
|
|
23
39
|
this.emitter = new Emitter();
|
|
24
40
|
this.publicEmitter = new Emitter();
|
|
25
41
|
pipeEvents(this.emitter, this.publicEmitter);
|
|
@@ -39,18 +55,18 @@ class SetupApi extends Disposable {
|
|
|
39
55
|
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`
|
|
40
56
|
)
|
|
41
57
|
);
|
|
42
|
-
this.
|
|
58
|
+
this.handlersController.prepend(runtimeHandlers);
|
|
43
59
|
}
|
|
44
60
|
restoreHandlers() {
|
|
45
|
-
this.currentHandlers.forEach((handler) => {
|
|
61
|
+
this.handlersController.currentHandlers().forEach((handler) => {
|
|
46
62
|
handler.isUsed = false;
|
|
47
63
|
});
|
|
48
64
|
}
|
|
49
65
|
resetHandlers(...nextHandlers) {
|
|
50
|
-
this.
|
|
66
|
+
this.handlersController.reset(nextHandlers);
|
|
51
67
|
}
|
|
52
68
|
listHandlers() {
|
|
53
|
-
return toReadonlyArray(this.currentHandlers);
|
|
69
|
+
return toReadonlyArray(this.handlersController.currentHandlers());
|
|
54
70
|
}
|
|
55
71
|
createLifeCycleEvents() {
|
|
56
72
|
return {
|
|
@@ -67,6 +83,8 @@ class SetupApi extends Disposable {
|
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
85
|
export {
|
|
86
|
+
HandlersController,
|
|
87
|
+
InMemoryHandlersController,
|
|
70
88
|
SetupApi
|
|
71
89
|
};
|
|
72
90
|
//# sourceMappingURL=SetupApi.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected
|
|
1
|
+
{"version":3,"sources":["../../src/core/SetupApi.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { EventMap, Emitter } from 'strict-event-emitter'\nimport {\n RequestHandler,\n RequestHandlerDefaultInfo,\n} from './handlers/RequestHandler'\nimport { LifeCycleEventEmitter } from './sharedOptions'\nimport { devUtils } from './utils/internal/devUtils'\nimport { pipeEvents } from './utils/internal/pipeEvents'\nimport { toReadonlyArray } from './utils/internal/toReadonlyArray'\nimport { Disposable } from './utils/internal/Disposable'\n\nexport abstract class HandlersController {\n abstract prepend(runtimeHandlers: Array<RequestHandler>): void\n abstract reset(nextHandles: Array<RequestHandler>): void\n abstract currentHandlers(): Array<RequestHandler>\n}\n\nexport class InMemoryHandlersController implements HandlersController {\n private handlers: Array<RequestHandler>\n\n constructor(private initialHandlers: Array<RequestHandler>) {\n this.handlers = [...initialHandlers]\n }\n\n public prepend(runtimeHandles: Array<RequestHandler>): void {\n this.handlers.unshift(...runtimeHandles)\n }\n\n public reset(nextHandlers: Array<RequestHandler>): void {\n this.handlers =\n nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]\n }\n\n public currentHandlers(): Array<RequestHandler> {\n return this.handlers\n }\n}\n\n/**\n * Generic class for the mock API setup.\n */\nexport abstract class SetupApi<EventsMap extends EventMap> extends Disposable {\n protected handlersController: HandlersController\n protected readonly emitter: Emitter<EventsMap>\n protected readonly publicEmitter: Emitter<EventsMap>\n\n public readonly events: LifeCycleEventEmitter<EventsMap>\n\n constructor(...initialHandlers: Array<RequestHandler>) {\n super()\n\n invariant(\n this.validateHandlers(initialHandlers),\n devUtils.formatMessage(\n `Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`,\n ),\n )\n\n this.handlersController = new InMemoryHandlersController(initialHandlers)\n\n this.emitter = new Emitter<EventsMap>()\n this.publicEmitter = new Emitter<EventsMap>()\n pipeEvents(this.emitter, this.publicEmitter)\n\n this.events = this.createLifeCycleEvents()\n\n this.subscriptions.push(() => {\n this.emitter.removeAllListeners()\n this.publicEmitter.removeAllListeners()\n })\n }\n\n private validateHandlers(handlers: ReadonlyArray<RequestHandler>): boolean {\n // Guard against incorrect call signature of the setup API.\n return handlers.every((handler) => !Array.isArray(handler))\n }\n\n public use(...runtimeHandlers: Array<RequestHandler>): void {\n invariant(\n this.validateHandlers(runtimeHandlers),\n devUtils.formatMessage(\n `Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`,\n ),\n )\n\n this.handlersController.prepend(runtimeHandlers)\n }\n\n public restoreHandlers(): void {\n this.handlersController.currentHandlers().forEach((handler) => {\n handler.isUsed = false\n })\n }\n\n public resetHandlers(...nextHandlers: Array<RequestHandler>): void {\n this.handlersController.reset(nextHandlers)\n }\n\n public listHandlers(): ReadonlyArray<\n RequestHandler<RequestHandlerDefaultInfo, any, any>\n > {\n return toReadonlyArray(this.handlersController.currentHandlers())\n }\n\n private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {\n return {\n on: (...args: any[]) => {\n return (this.publicEmitter.on as any)(...args)\n },\n removeListener: (...args: any[]) => {\n return (this.publicEmitter.removeListener as any)(...args)\n },\n removeAllListeners: (...args: any[]) => {\n return this.publicEmitter.removeAllListeners(...args)\n },\n }\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAmB,eAAe;AAMlC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAEpB,MAAe,mBAAmB;AAIzC;AAEO,MAAM,2BAAyD;AAAA,EAGpE,YAAoB,iBAAwC;AAAxC;AAClB,SAAK,WAAW,CAAC,GAAG,eAAe;AAAA,EACrC;AAAA,EAJQ;AAAA,EAMD,QAAQ,gBAA6C;AAC1D,SAAK,SAAS,QAAQ,GAAG,cAAc;AAAA,EACzC;AAAA,EAEO,MAAM,cAA2C;AACtD,SAAK,WACH,aAAa,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,KAAK,eAAe;AAAA,EAC1E;AAAA,EAEO,kBAAyC;AAC9C,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAe,iBAA6C,WAAW;AAAA,EAClE;AAAA,EACS;AAAA,EACA;AAAA,EAEH;AAAA,EAEhB,eAAe,iBAAwC;AACrD,UAAM;AAEN;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,IAAI,2BAA2B,eAAe;AAExE,SAAK,UAAU,IAAI,QAAmB;AACtC,SAAK,gBAAgB,IAAI,QAAmB;AAC5C,eAAW,KAAK,SAAS,KAAK,aAAa;AAE3C,SAAK,SAAS,KAAK,sBAAsB;AAEzC,SAAK,cAAc,KAAK,MAAM;AAC5B,WAAK,QAAQ,mBAAmB;AAChC,WAAK,cAAc,mBAAmB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,UAAkD;AAEzE,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEO,OAAO,iBAA8C;AAC1D;AAAA,MACE,KAAK,iBAAiB,eAAe;AAAA,MACrC,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,SAAK,mBAAmB,QAAQ,eAAe;AAAA,EACjD;AAAA,EAEO,kBAAwB;AAC7B,SAAK,mBAAmB,gBAAgB,EAAE,QAAQ,CAAC,YAAY;AAC7D,cAAQ,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEO,iBAAiB,cAA2C;AACjE,SAAK,mBAAmB,MAAM,YAAY;AAAA,EAC5C;AAAA,EAEO,eAEL;AACA,WAAO,gBAAgB,KAAK,mBAAmB,gBAAgB,CAAC;AAAA,EAClE;AAAA,EAEQ,wBAA0D;AAChE,WAAO;AAAA,MACL,IAAI,IAAI,SAAgB;AACtB,eAAQ,KAAK,cAAc,GAAW,GAAG,IAAI;AAAA,MAC/C;AAAA,MACA,gBAAgB,IAAI,SAAgB;AAClC,eAAQ,KAAK,cAAc,eAAuB,GAAG,IAAI;AAAA,MAC3D;AAAA,MACA,oBAAoB,IAAI,SAAgB;AACtC,eAAO,KAAK,cAAc,mBAAmB,GAAG,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/lib/iife/index.js
CHANGED
|
@@ -349,9 +349,24 @@ var MockServiceWorker = (() => {
|
|
|
349
349
|
};
|
|
350
350
|
|
|
351
351
|
// src/core/SetupApi.ts
|
|
352
|
+
var InMemoryHandlersController = class {
|
|
353
|
+
constructor(initialHandlers) {
|
|
354
|
+
this.initialHandlers = initialHandlers;
|
|
355
|
+
this.handlers = [...initialHandlers];
|
|
356
|
+
}
|
|
357
|
+
handlers;
|
|
358
|
+
prepend(runtimeHandles) {
|
|
359
|
+
this.handlers.unshift(...runtimeHandles);
|
|
360
|
+
}
|
|
361
|
+
reset(nextHandlers) {
|
|
362
|
+
this.handlers = nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers];
|
|
363
|
+
}
|
|
364
|
+
currentHandlers() {
|
|
365
|
+
return this.handlers;
|
|
366
|
+
}
|
|
367
|
+
};
|
|
352
368
|
var SetupApi = class extends Disposable {
|
|
353
|
-
|
|
354
|
-
currentHandlers;
|
|
369
|
+
handlersController;
|
|
355
370
|
emitter;
|
|
356
371
|
publicEmitter;
|
|
357
372
|
events;
|
|
@@ -363,8 +378,7 @@ var MockServiceWorker = (() => {
|
|
|
363
378
|
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`
|
|
364
379
|
)
|
|
365
380
|
);
|
|
366
|
-
this.
|
|
367
|
-
this.currentHandlers = [...initialHandlers];
|
|
381
|
+
this.handlersController = new InMemoryHandlersController(initialHandlers);
|
|
368
382
|
this.emitter = new Emitter();
|
|
369
383
|
this.publicEmitter = new Emitter();
|
|
370
384
|
pipeEvents(this.emitter, this.publicEmitter);
|
|
@@ -384,18 +398,18 @@ var MockServiceWorker = (() => {
|
|
|
384
398
|
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`
|
|
385
399
|
)
|
|
386
400
|
);
|
|
387
|
-
this.
|
|
401
|
+
this.handlersController.prepend(runtimeHandlers);
|
|
388
402
|
}
|
|
389
403
|
restoreHandlers() {
|
|
390
|
-
this.currentHandlers.forEach((handler) => {
|
|
404
|
+
this.handlersController.currentHandlers().forEach((handler) => {
|
|
391
405
|
handler.isUsed = false;
|
|
392
406
|
});
|
|
393
407
|
}
|
|
394
408
|
resetHandlers(...nextHandlers) {
|
|
395
|
-
this.
|
|
409
|
+
this.handlersController.reset(nextHandlers);
|
|
396
410
|
}
|
|
397
411
|
listHandlers() {
|
|
398
|
-
return toReadonlyArray(this.currentHandlers);
|
|
412
|
+
return toReadonlyArray(this.handlersController.currentHandlers());
|
|
399
413
|
}
|
|
400
414
|
createLifeCycleEvents() {
|
|
401
415
|
return {
|
|
@@ -5804,6 +5818,12 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
|
|
|
5804
5818
|
if (!responseInit.headers.has("Content-Type")) {
|
|
5805
5819
|
responseInit.headers.set("Content-Type", "text/plain");
|
|
5806
5820
|
}
|
|
5821
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
5822
|
+
responseInit.headers.set(
|
|
5823
|
+
"Content-Length",
|
|
5824
|
+
body ? body.length.toString() : "0"
|
|
5825
|
+
);
|
|
5826
|
+
}
|
|
5807
5827
|
return new _HttpResponse(body, responseInit);
|
|
5808
5828
|
}
|
|
5809
5829
|
/**
|
|
@@ -5817,8 +5837,15 @@ Read more: https://mswjs.io/docs/getting-started/mocks`;
|
|
|
5817
5837
|
if (!responseInit.headers.has("Content-Type")) {
|
|
5818
5838
|
responseInit.headers.set("Content-Type", "application/json");
|
|
5819
5839
|
}
|
|
5840
|
+
const responseText = JSON.stringify(body);
|
|
5841
|
+
if (!responseInit.headers.has("Content-Length")) {
|
|
5842
|
+
responseInit.headers.set(
|
|
5843
|
+
"Content-Length",
|
|
5844
|
+
responseText ? responseText.length.toString() : "0"
|
|
5845
|
+
);
|
|
5846
|
+
}
|
|
5820
5847
|
return new _HttpResponse(
|
|
5821
|
-
|
|
5848
|
+
responseText,
|
|
5822
5849
|
responseInit
|
|
5823
5850
|
);
|
|
5824
5851
|
}
|
|
@@ -6107,7 +6134,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
6107
6134
|
await handleRequest(
|
|
6108
6135
|
request,
|
|
6109
6136
|
requestId,
|
|
6110
|
-
context.
|
|
6137
|
+
context.getRequestHandlers(),
|
|
6111
6138
|
options,
|
|
6112
6139
|
context.emitter,
|
|
6113
6140
|
{
|
|
@@ -6210,6 +6237,13 @@ This exception has been gracefully handled as a 500 response, however, it's stro
|
|
|
6210
6237
|
isResponseWithoutBody(responseJson.status) ? null : responseJson.body,
|
|
6211
6238
|
responseJson
|
|
6212
6239
|
);
|
|
6240
|
+
if (!response.url) {
|
|
6241
|
+
Object.defineProperty(response, "url", {
|
|
6242
|
+
value: request.url,
|
|
6243
|
+
enumerable: true,
|
|
6244
|
+
writable: false
|
|
6245
|
+
});
|
|
6246
|
+
}
|
|
6213
6247
|
context.emitter.emit(
|
|
6214
6248
|
responseJson.isMockedResponse ? "response:mocked" : "response:bypass",
|
|
6215
6249
|
{
|
|
@@ -7382,7 +7416,7 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7382
7416
|
const response = await handleRequest(
|
|
7383
7417
|
request,
|
|
7384
7418
|
requestId,
|
|
7385
|
-
context.
|
|
7419
|
+
context.getRequestHandlers(),
|
|
7386
7420
|
options,
|
|
7387
7421
|
context.emitter,
|
|
7388
7422
|
{
|
|
@@ -7481,8 +7515,10 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7481
7515
|
isMockingEnabled: false,
|
|
7482
7516
|
startOptions: null,
|
|
7483
7517
|
worker: null,
|
|
7518
|
+
getRequestHandlers: () => {
|
|
7519
|
+
return this.handlersController.currentHandlers();
|
|
7520
|
+
},
|
|
7484
7521
|
registration: null,
|
|
7485
|
-
requestHandlers: this.currentHandlers,
|
|
7486
7522
|
requests: /* @__PURE__ */ new Map(),
|
|
7487
7523
|
emitter: this.emitter,
|
|
7488
7524
|
workerChannel: {
|
|
@@ -7557,11 +7593,6 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7557
7593
|
readableStreamTransfer: supportsReadableStreamTransfer()
|
|
7558
7594
|
}
|
|
7559
7595
|
};
|
|
7560
|
-
Object.defineProperties(context, {
|
|
7561
|
-
requestHandlers: {
|
|
7562
|
-
get: () => this.currentHandlers
|
|
7563
|
-
}
|
|
7564
|
-
});
|
|
7565
7596
|
this.startHandler = context.supports.serviceWorkerApi ? createFallbackStart(context) : createStartHandler(context);
|
|
7566
7597
|
this.stopHandler = context.supports.serviceWorkerApi ? createFallbackStop(context) : createStop(context);
|
|
7567
7598
|
return context;
|