msw 2.1.6 → 2.2.0
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 +29 -24
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +29 -24
- 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 +65 -33
- 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 +12 -8
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +12 -8
- 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 +16 -8
- package/src/browser/setupWorker/glossary.ts +1 -1
- 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 +8 -4
- 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 {
|
|
@@ -1107,7 +1121,7 @@ var MockServiceWorker = (() => {
|
|
|
1107
1121
|
return stringToRegexp(path, keys, options);
|
|
1108
1122
|
}
|
|
1109
1123
|
|
|
1110
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
1124
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/chunk-UJZOJSMP.mjs
|
|
1111
1125
|
var encoder = new TextEncoder();
|
|
1112
1126
|
function encodeBuffer(text) {
|
|
1113
1127
|
return encoder.encode(text);
|
|
@@ -1420,7 +1434,7 @@ var MockServiceWorker = (() => {
|
|
|
1420
1434
|
return message3.toString();
|
|
1421
1435
|
}
|
|
1422
1436
|
|
|
1423
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
1437
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/chunk-WZQN3FMY.mjs
|
|
1424
1438
|
var IS_PATCHED_MODULE = Symbol("isPatchedModule");
|
|
1425
1439
|
function getGlobalSymbol(symbol) {
|
|
1426
1440
|
return (
|
|
@@ -1565,7 +1579,7 @@ var MockServiceWorker = (() => {
|
|
|
1565
1579
|
}
|
|
1566
1580
|
};
|
|
1567
1581
|
|
|
1568
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
1582
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/index.mjs
|
|
1569
1583
|
var BatchInterceptor = class extends Interceptor {
|
|
1570
1584
|
constructor(options) {
|
|
1571
1585
|
BatchInterceptor.symbol = Symbol(options.name);
|
|
@@ -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
|
{
|
|
@@ -6447,7 +6481,7 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
6447
6481
|
}
|
|
6448
6482
|
};
|
|
6449
6483
|
|
|
6450
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
6484
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/chunk-72HT65NX.mjs
|
|
6451
6485
|
function uuidv4() {
|
|
6452
6486
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
6453
6487
|
const r = Math.random() * 16 | 0;
|
|
@@ -6492,7 +6526,7 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
6492
6526
|
}
|
|
6493
6527
|
}
|
|
6494
6528
|
|
|
6495
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
6529
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/chunk-XQZ6GVNB.mjs
|
|
6496
6530
|
function isPropertyAccessible2(obj, key) {
|
|
6497
6531
|
try {
|
|
6498
6532
|
obj[key];
|
|
@@ -6544,13 +6578,15 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
6544
6578
|
this.logger.info("awaiting for the mocked response...");
|
|
6545
6579
|
const signal = interactiveRequest.signal;
|
|
6546
6580
|
const requestAborted = new DeferredPromise();
|
|
6547
|
-
signal
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
|
|
6581
|
+
if (signal) {
|
|
6582
|
+
signal.addEventListener(
|
|
6583
|
+
"abort",
|
|
6584
|
+
() => {
|
|
6585
|
+
requestAborted.reject(signal.reason);
|
|
6586
|
+
},
|
|
6587
|
+
{ once: true }
|
|
6588
|
+
);
|
|
6589
|
+
}
|
|
6554
6590
|
const resolverResult = await until(async () => {
|
|
6555
6591
|
const listenersFinished = emitAsync(this.emitter, "request", {
|
|
6556
6592
|
request: interactiveRequest,
|
|
@@ -6591,14 +6627,13 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
6591
6627
|
request: interactiveRequest,
|
|
6592
6628
|
requestId
|
|
6593
6629
|
});
|
|
6594
|
-
|
|
6595
|
-
Object.defineProperty(response, "url", {
|
|
6630
|
+
Object.defineProperty(mockedResponse, "url", {
|
|
6596
6631
|
writable: false,
|
|
6597
6632
|
enumerable: true,
|
|
6598
6633
|
configurable: false,
|
|
6599
6634
|
value: request.url
|
|
6600
6635
|
});
|
|
6601
|
-
return
|
|
6636
|
+
return mockedResponse;
|
|
6602
6637
|
}
|
|
6603
6638
|
this.logger.info("no mocked response received!");
|
|
6604
6639
|
return pureFetch(request).then((response) => {
|
|
@@ -6638,7 +6673,7 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
6638
6673
|
});
|
|
6639
6674
|
}
|
|
6640
6675
|
|
|
6641
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.25.
|
|
6676
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.25.16/node_modules/@mswjs/interceptors/lib/browser/chunk-DZVB7JEV.mjs
|
|
6642
6677
|
function concatArrayBuffer(left, right) {
|
|
6643
6678
|
const result = new Uint8Array(left.byteLength + right.byteLength);
|
|
6644
6679
|
result.set(left, 0);
|
|
@@ -7381,7 +7416,7 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7381
7416
|
const response = await handleRequest(
|
|
7382
7417
|
request,
|
|
7383
7418
|
requestId,
|
|
7384
|
-
context.
|
|
7419
|
+
context.getRequestHandlers(),
|
|
7385
7420
|
options,
|
|
7386
7421
|
context.emitter,
|
|
7387
7422
|
{
|
|
@@ -7480,8 +7515,10 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7480
7515
|
isMockingEnabled: false,
|
|
7481
7516
|
startOptions: null,
|
|
7482
7517
|
worker: null,
|
|
7518
|
+
getRequestHandlers: () => {
|
|
7519
|
+
return this.handlersController.currentHandlers();
|
|
7520
|
+
},
|
|
7483
7521
|
registration: null,
|
|
7484
|
-
requestHandlers: this.currentHandlers,
|
|
7485
7522
|
requests: /* @__PURE__ */ new Map(),
|
|
7486
7523
|
emitter: this.emitter,
|
|
7487
7524
|
workerChannel: {
|
|
@@ -7556,11 +7593,6 @@ If this message still persists after updating, please report an issue: https://g
|
|
|
7556
7593
|
readableStreamTransfer: supportsReadableStreamTransfer()
|
|
7557
7594
|
}
|
|
7558
7595
|
};
|
|
7559
|
-
Object.defineProperties(context, {
|
|
7560
|
-
requestHandlers: {
|
|
7561
|
-
get: () => this.currentHandlers
|
|
7562
|
-
}
|
|
7563
|
-
});
|
|
7564
7596
|
this.startHandler = context.supports.serviceWorkerApi ? createFallbackStart(context) : createStartHandler(context);
|
|
7565
7597
|
this.stopHandler = context.supports.serviceWorkerApi ? createFallbackStop(context) : createStop(context);
|
|
7566
7598
|
return context;
|