msw 2.8.7 → 2.10.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/lib/browser/index.js +13 -17
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +13 -17
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/handlers/WebSocketHandler.d.mts +5 -5
- package/lib/core/handlers/WebSocketHandler.d.ts +5 -5
- package/lib/core/handlers/WebSocketHandler.js +12 -8
- package/lib/core/handlers/WebSocketHandler.js.map +1 -1
- package/lib/core/handlers/WebSocketHandler.mjs +12 -8
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.js +26 -39
- package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.mjs +26 -39
- package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
- package/lib/core/ws/utils/getMessageLength.js.map +1 -1
- package/lib/core/ws/utils/getMessageLength.mjs.map +1 -1
- package/lib/core/ws/utils/getPublicData.js.map +1 -1
- package/lib/core/ws/utils/getPublicData.mjs.map +1 -1
- package/lib/iife/index.js +51 -62
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +91 -54
- package/package.json +3 -2
- package/src/browser/setupWorker/glossary.ts +7 -7
- package/src/browser/setupWorker/setupWorker.ts +0 -1
- package/src/browser/setupWorker/start/createRequestListener.ts +3 -4
- package/src/browser/setupWorker/start/createResponseListener.ts +8 -12
- package/src/browser/utils/{parseWorkerRequest.ts → deserializeRequest.ts} +5 -5
- package/src/core/handlers/WebSocketHandler.test.ts +12 -61
- package/src/core/handlers/WebSocketHandler.ts +16 -13
- package/src/core/ws/handleWebSocketEvent.ts +36 -55
- package/src/core/ws/utils/getMessageLength.ts +1 -1
- package/src/core/ws/utils/getPublicData.ts +1 -1
- package/src/mockServiceWorker.js +89 -52
- package/src/tsconfig.worker.json +13 -0
|
@@ -12,7 +12,6 @@ interface WebSocketHandlerConnection extends WebSocketConnectionData {
|
|
|
12
12
|
params: PathParams;
|
|
13
13
|
}
|
|
14
14
|
declare const kEmitter: unique symbol;
|
|
15
|
-
declare const kDispatchEvent: unique symbol;
|
|
16
15
|
declare const kSender: unique symbol;
|
|
17
16
|
declare class WebSocketHandler {
|
|
18
17
|
private readonly url;
|
|
@@ -22,13 +21,14 @@ declare class WebSocketHandler {
|
|
|
22
21
|
protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
|
|
23
22
|
constructor(url: Path);
|
|
24
23
|
parse(args: {
|
|
25
|
-
|
|
24
|
+
url: URL;
|
|
26
25
|
}): WebSocketHandlerParsedResult;
|
|
27
26
|
predicate(args: {
|
|
28
|
-
|
|
27
|
+
url: URL;
|
|
29
28
|
parsedResult: WebSocketHandlerParsedResult;
|
|
30
29
|
}): boolean;
|
|
31
|
-
|
|
30
|
+
run(connection: WebSocketConnectionData): Promise<boolean>;
|
|
31
|
+
protected connect(connection: WebSocketHandlerConnection): boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap,
|
|
34
|
+
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap, kEmitter, kSender };
|
|
@@ -12,7 +12,6 @@ interface WebSocketHandlerConnection extends WebSocketConnectionData {
|
|
|
12
12
|
params: PathParams;
|
|
13
13
|
}
|
|
14
14
|
declare const kEmitter: unique symbol;
|
|
15
|
-
declare const kDispatchEvent: unique symbol;
|
|
16
15
|
declare const kSender: unique symbol;
|
|
17
16
|
declare class WebSocketHandler {
|
|
18
17
|
private readonly url;
|
|
@@ -22,13 +21,14 @@ declare class WebSocketHandler {
|
|
|
22
21
|
protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
|
|
23
22
|
constructor(url: Path);
|
|
24
23
|
parse(args: {
|
|
25
|
-
|
|
24
|
+
url: URL;
|
|
26
25
|
}): WebSocketHandlerParsedResult;
|
|
27
26
|
predicate(args: {
|
|
28
|
-
|
|
27
|
+
url: URL;
|
|
29
28
|
parsedResult: WebSocketHandlerParsedResult;
|
|
30
29
|
}): boolean;
|
|
31
|
-
|
|
30
|
+
run(connection: WebSocketConnectionData): Promise<boolean>;
|
|
31
|
+
protected connect(connection: WebSocketHandlerConnection): boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap,
|
|
34
|
+
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap, kEmitter, kSender };
|
|
@@ -19,7 +19,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var WebSocketHandler_exports = {};
|
|
20
20
|
__export(WebSocketHandler_exports, {
|
|
21
21
|
WebSocketHandler: () => WebSocketHandler,
|
|
22
|
-
kDispatchEvent: () => kDispatchEvent,
|
|
23
22
|
kEmitter: () => kEmitter,
|
|
24
23
|
kSender: () => kSender
|
|
25
24
|
});
|
|
@@ -29,7 +28,6 @@ var import_interceptors = require("@mswjs/interceptors");
|
|
|
29
28
|
var import_matchRequestUrl = require("../utils/matching/matchRequestUrl");
|
|
30
29
|
var import_getCallFrame = require("../utils/internal/getCallFrame");
|
|
31
30
|
const kEmitter = Symbol("kEmitter");
|
|
32
|
-
const kDispatchEvent = Symbol("kDispatchEvent");
|
|
33
31
|
const kSender = Symbol("kSender");
|
|
34
32
|
const kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
35
33
|
const KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
@@ -46,8 +44,7 @@ class WebSocketHandler {
|
|
|
46
44
|
callFrame;
|
|
47
45
|
[kEmitter];
|
|
48
46
|
parse(args) {
|
|
49
|
-
const
|
|
50
|
-
const { url: clientUrl } = connection.client;
|
|
47
|
+
const clientUrl = new URL(args.url);
|
|
51
48
|
clientUrl.pathname = clientUrl.pathname.replace(/^\/socket.io\//, "/");
|
|
52
49
|
const match = (0, import_matchRequestUrl.matchRequestUrl)(clientUrl, this.url);
|
|
53
50
|
return {
|
|
@@ -57,13 +54,20 @@ class WebSocketHandler {
|
|
|
57
54
|
predicate(args) {
|
|
58
55
|
return args.parsedResult.match.matches;
|
|
59
56
|
}
|
|
60
|
-
async
|
|
61
|
-
const parsedResult = this.parse({
|
|
62
|
-
|
|
57
|
+
async run(connection) {
|
|
58
|
+
const parsedResult = this.parse({
|
|
59
|
+
url: connection.client.url
|
|
60
|
+
});
|
|
61
|
+
if (!this.predicate({ url: connection.client.url, parsedResult })) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
63
64
|
const resolvedConnection = {
|
|
64
65
|
...connection,
|
|
65
66
|
params: parsedResult.match.params || {}
|
|
66
67
|
};
|
|
68
|
+
return this.connect(resolvedConnection);
|
|
69
|
+
}
|
|
70
|
+
connect(connection) {
|
|
67
71
|
connection.client.addEventListener(
|
|
68
72
|
"message",
|
|
69
73
|
createStopPropagationListener(this)
|
|
@@ -88,7 +92,7 @@ class WebSocketHandler {
|
|
|
88
92
|
"close",
|
|
89
93
|
createStopPropagationListener(this)
|
|
90
94
|
);
|
|
91
|
-
this[kEmitter].emit("connection",
|
|
95
|
+
return this[kEmitter].emit("connection", connection);
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
function createStopPropagationListener(handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const
|
|
1
|
+
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n private readonly __kind: HandlerKind\n\n public id: string\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n this.__kind = 'EventHandler'\n }\n\n public parse(args: { url: URL }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(clientUrl, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public async run(connection: WebSocketConnectionData): Promise<boolean> {\n const parsedResult = this.parse({\n url: connection.client.url,\n })\n\n if (!this.predicate({ url: connection.client.url, parsedResult })) {\n return false\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n return this.connect(resolvedConnection)\n }\n\n protected connect(connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n return this[kEmitter].emit('connection', connection)\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
} from '../utils/matching/matchRequestUrl.mjs';
|
|
6
6
|
import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
|
|
7
7
|
const kEmitter = Symbol("kEmitter");
|
|
8
|
-
const kDispatchEvent = Symbol("kDispatchEvent");
|
|
9
8
|
const kSender = Symbol("kSender");
|
|
10
9
|
const kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
11
10
|
const KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
@@ -22,8 +21,7 @@ class WebSocketHandler {
|
|
|
22
21
|
callFrame;
|
|
23
22
|
[kEmitter];
|
|
24
23
|
parse(args) {
|
|
25
|
-
const
|
|
26
|
-
const { url: clientUrl } = connection.client;
|
|
24
|
+
const clientUrl = new URL(args.url);
|
|
27
25
|
clientUrl.pathname = clientUrl.pathname.replace(/^\/socket.io\//, "/");
|
|
28
26
|
const match = matchRequestUrl(clientUrl, this.url);
|
|
29
27
|
return {
|
|
@@ -33,13 +31,20 @@ class WebSocketHandler {
|
|
|
33
31
|
predicate(args) {
|
|
34
32
|
return args.parsedResult.match.matches;
|
|
35
33
|
}
|
|
36
|
-
async
|
|
37
|
-
const parsedResult = this.parse({
|
|
38
|
-
|
|
34
|
+
async run(connection) {
|
|
35
|
+
const parsedResult = this.parse({
|
|
36
|
+
url: connection.client.url
|
|
37
|
+
});
|
|
38
|
+
if (!this.predicate({ url: connection.client.url, parsedResult })) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
39
41
|
const resolvedConnection = {
|
|
40
42
|
...connection,
|
|
41
43
|
params: parsedResult.match.params || {}
|
|
42
44
|
};
|
|
45
|
+
return this.connect(resolvedConnection);
|
|
46
|
+
}
|
|
47
|
+
connect(connection) {
|
|
43
48
|
connection.client.addEventListener(
|
|
44
49
|
"message",
|
|
45
50
|
createStopPropagationListener(this)
|
|
@@ -64,7 +69,7 @@ class WebSocketHandler {
|
|
|
64
69
|
"close",
|
|
65
70
|
createStopPropagationListener(this)
|
|
66
71
|
);
|
|
67
|
-
this[kEmitter].emit("connection",
|
|
72
|
+
return this[kEmitter].emit("connection", connection);
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
function createStopPropagationListener(handler) {
|
|
@@ -99,7 +104,6 @@ function createStopPropagationListener(handler) {
|
|
|
99
104
|
}
|
|
100
105
|
export {
|
|
101
106
|
WebSocketHandler,
|
|
102
|
-
kDispatchEvent,
|
|
103
107
|
kEmitter,
|
|
104
108
|
kSender
|
|
105
109
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const
|
|
1
|
+
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n private readonly __kind: HandlerKind\n\n public id: string\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n this.__kind = 'EventHandler'\n }\n\n public parse(args: { url: URL }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(clientUrl, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public async run(connection: WebSocketConnectionData): Promise<boolean> {\n const parsedResult = this.parse({\n url: connection.client.url,\n })\n\n if (!this.predicate({ url: connection.client.url, parsedResult })) {\n return false\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n return this.connect(resolvedConnection)\n }\n\n protected connect(connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n return this[kEmitter].emit('connection', connection)\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,54 +21,41 @@ __export(handleWebSocketEvent_exports, {
|
|
|
21
21
|
handleWebSocketEvent: () => handleWebSocketEvent
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(handleWebSocketEvent_exports);
|
|
24
|
-
var import_WebSocketHandler = require("../handlers/WebSocketHandler");
|
|
25
24
|
var import_webSocketInterceptor = require("./webSocketInterceptor");
|
|
26
25
|
var import_onUnhandledRequest = require("../utils/request/onUnhandledRequest");
|
|
27
26
|
var import_isHandlerKind = require("../utils/internal/isHandlerKind");
|
|
28
27
|
function handleWebSocketEvent(options) {
|
|
29
28
|
import_webSocketInterceptor.webSocketInterceptor.on("connection", async (connection) => {
|
|
30
|
-
const handlers = options.getHandlers();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if ((0, import_isHandlerKind.isHandlerKind)("EventHandler")(handler) && handler.predicate({
|
|
37
|
-
event: connectionEvent,
|
|
38
|
-
parsedResult: handler.parse({
|
|
39
|
-
event: connectionEvent
|
|
29
|
+
const handlers = options.getHandlers().filter((0, import_isHandlerKind.isHandlerKind)("EventHandler"));
|
|
30
|
+
if (handlers.length > 0) {
|
|
31
|
+
options?.onMockedConnection(connection);
|
|
32
|
+
await Promise.all(
|
|
33
|
+
handlers.map((handler) => {
|
|
34
|
+
return handler.run(connection);
|
|
40
35
|
})
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
36
|
+
);
|
|
37
|
+
return;
|
|
44
38
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
const request = new Request(connection.client.url, {
|
|
40
|
+
headers: {
|
|
41
|
+
upgrade: "websocket",
|
|
42
|
+
connection: "upgrade"
|
|
49
43
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
).catch((error) => {
|
|
61
|
-
const errorEvent = new Event("error");
|
|
62
|
-
Object.defineProperty(errorEvent, "cause", {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
configurable: false,
|
|
65
|
-
value: error
|
|
66
|
-
});
|
|
67
|
-
connection.client.socket.dispatchEvent(errorEvent);
|
|
44
|
+
});
|
|
45
|
+
await (0, import_onUnhandledRequest.onUnhandledRequest)(
|
|
46
|
+
request,
|
|
47
|
+
options.getUnhandledRequestStrategy()
|
|
48
|
+
).catch((error) => {
|
|
49
|
+
const errorEvent = new Event("error");
|
|
50
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: false,
|
|
53
|
+
value: error
|
|
68
54
|
});
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
55
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
56
|
+
});
|
|
57
|
+
options?.onPassthroughConnection(connection);
|
|
58
|
+
connection.server.connect();
|
|
72
59
|
});
|
|
73
60
|
}
|
|
74
61
|
//# sourceMappingURL=handleWebSocketEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler
|
|
1
|
+
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\nimport { isHandlerKind } from '../utils/internal/isHandlerKind'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', async (connection) => {\n const handlers = options.getHandlers().filter(isHandlerKind('EventHandler'))\n\n // Ignore this connection if the user hasn't defined any handlers.\n if (handlers.length > 0) {\n options?.onMockedConnection(connection)\n\n await Promise.all(\n handlers.map((handler) => {\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n return handler.run(connection)\n }),\n )\n\n return\n }\n\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAqC;AACrC,gCAGO;AACP,2BAA8B;AASvB,SAAS,qBAAqB,SAAsC;AACzE,mDAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY,EAAE,WAAO,oCAAc,cAAc,CAAC;AAG3E,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,mBAAmB,UAAU;AAEtC,YAAM,QAAQ;AAAA,QACZ,SAAS,IAAI,CAAC,YAAY;AAIxB,iBAAO,QAAQ,IAAI,UAAU;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA;AAAA,IACF;AAGA,UAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,MACjD,SAAS;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AACD,cAAM;AAAA,MACJ;AAAA,MACA,QAAQ,4BAA4B;AAAA,IACtC,EAAE,MAAM,CAAC,UAAU;AACjB,YAAM,aAAa,IAAI,MAAM,OAAO;AACpC,aAAO,eAAe,YAAY,SAAS;AAAA,QACzC,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAO;AAAA,MACT,CAAC;AACD,iBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,IACnD,CAAC;AAED,aAAS,wBAAwB,UAAU;AAI3C,eAAW,OAAO,QAAQ;AAAA,EAC5B,CAAC;AACH;","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { kDispatchEvent } from '../handlers/WebSocketHandler.mjs';
|
|
2
1
|
import { webSocketInterceptor } from './webSocketInterceptor.mjs';
|
|
3
2
|
import {
|
|
4
3
|
onUnhandledRequest
|
|
@@ -6,48 +5,36 @@ import {
|
|
|
6
5
|
import { isHandlerKind } from '../utils/internal/isHandlerKind.mjs';
|
|
7
6
|
function handleWebSocketEvent(options) {
|
|
8
7
|
webSocketInterceptor.on("connection", async (connection) => {
|
|
9
|
-
const handlers = options.getHandlers();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (isHandlerKind("EventHandler")(handler) && handler.predicate({
|
|
16
|
-
event: connectionEvent,
|
|
17
|
-
parsedResult: handler.parse({
|
|
18
|
-
event: connectionEvent
|
|
8
|
+
const handlers = options.getHandlers().filter(isHandlerKind("EventHandler"));
|
|
9
|
+
if (handlers.length > 0) {
|
|
10
|
+
options?.onMockedConnection(connection);
|
|
11
|
+
await Promise.all(
|
|
12
|
+
handlers.map((handler) => {
|
|
13
|
+
return handler.run(connection);
|
|
19
14
|
})
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
15
|
+
);
|
|
16
|
+
return;
|
|
23
17
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
const request = new Request(connection.client.url, {
|
|
19
|
+
headers: {
|
|
20
|
+
upgrade: "websocket",
|
|
21
|
+
connection: "upgrade"
|
|
28
22
|
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
).catch((error) => {
|
|
40
|
-
const errorEvent = new Event("error");
|
|
41
|
-
Object.defineProperty(errorEvent, "cause", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: false,
|
|
44
|
-
value: error
|
|
45
|
-
});
|
|
46
|
-
connection.client.socket.dispatchEvent(errorEvent);
|
|
23
|
+
});
|
|
24
|
+
await onUnhandledRequest(
|
|
25
|
+
request,
|
|
26
|
+
options.getUnhandledRequestStrategy()
|
|
27
|
+
).catch((error) => {
|
|
28
|
+
const errorEvent = new Event("error");
|
|
29
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: false,
|
|
32
|
+
value: error
|
|
47
33
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
35
|
+
});
|
|
36
|
+
options?.onPassthroughConnection(connection);
|
|
37
|
+
connection.server.connect();
|
|
51
38
|
});
|
|
52
39
|
}
|
|
53
40
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler
|
|
1
|
+
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\nimport { isHandlerKind } from '../utils/internal/isHandlerKind'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', async (connection) => {\n const handlers = options.getHandlers().filter(isHandlerKind('EventHandler'))\n\n // Ignore this connection if the user hasn't defined any handlers.\n if (handlers.length > 0) {\n options?.onMockedConnection(connection)\n\n await Promise.all(\n handlers.map((handler) => {\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n return handler.run(connection)\n }),\n )\n\n return\n }\n\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n })\n}\n"],"mappings":"AAGA,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,OAEK;AACP,SAAS,qBAAqB;AASvB,SAAS,qBAAqB,SAAsC;AACzE,uBAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY,EAAE,OAAO,cAAc,cAAc,CAAC;AAG3E,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,mBAAmB,UAAU;AAEtC,YAAM,QAAQ;AAAA,QACZ,SAAS,IAAI,CAAC,YAAY;AAIxB,iBAAO,QAAQ,IAAI,UAAU;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA;AAAA,IACF;AAGA,UAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,MACjD,SAAS;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AACD,UAAM;AAAA,MACJ;AAAA,MACA,QAAQ,4BAA4B;AAAA,IACtC,EAAE,MAAM,CAAC,UAAU;AACjB,YAAM,aAAa,IAAI,MAAM,OAAO;AACpC,aAAO,eAAe,YAAY,SAAS;AAAA,QACzC,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAO;AAAA,MACT,CAAC;AACD,iBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,IACnD,CAAC;AAED,aAAS,wBAAwB,UAAU;AAI3C,eAAW,OAAO,QAAQ;AAAA,EAC5B,CAAC;AACH;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data]).size\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data as any]).size\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,IAAW,CAAC,EAAE;AACjC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data]).size\n}\n"],"mappings":"AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data as any]).size\n}\n"],"mappings":"AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,IAAW,CAAC,EAAE;AACjC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAgC;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,YAAQ,wCAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data as ArrayBuffer)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAgC;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,YAAQ,wCAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,IAAmB;AACzD,WAAO,mBAAe,wCAAgB,IAAI,CAAC;AAAA,EAC7C;AAEA,aAAO,wCAAgB,IAAI;AAC7B;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":"AACA,SAAS,uBAAuB;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,QAAQ,gBAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data as ArrayBuffer)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":"AACA,SAAS,uBAAuB;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,QAAQ,gBAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,IAAmB;AACzD,WAAO,eAAe,gBAAgB,IAAI,CAAC;AAAA,EAC7C;AAEA,SAAO,gBAAgB,IAAI;AAC7B;","names":[]}
|