UNPKG

msw

Version:

Seamless REST/GraphQL API mocking library for browser and Node.js.

178 lines 5.36 kB
import { devUtils } from '../../utils/internal/devUtils.mjs'; import { getTimestamp } from '../../utils/logging/getTimestamp.mjs'; import { toPublicUrl } from '../../utils/request/toPublicUrl.mjs'; import { getMessageLength } from './getMessageLength.mjs'; import { getPublicData } from './getPublicData.mjs'; const colors = { system: "#3b82f6", outgoing: "#22c55e", incoming: "#ef4444", mocked: "#ff6a33" }; function attachWebSocketLogger(connection) { const { client, server } = connection; logConnectionOpen(client); client.addEventListener("message", (event) => { logOutgoingClientMessage(event); }); client.addEventListener("close", (event) => { logConnectionClose(event); }); client.socket.addEventListener("error", (event) => { logClientError(event); }); client.send = new Proxy(client.send, { apply(target, thisArg, args) { const [data] = args; const messageEvent = new MessageEvent("message", { data }); Object.defineProperties(messageEvent, { currentTarget: { enumerable: true, writable: false, value: client.socket }, target: { enumerable: true, writable: false, value: client.socket } }); queueMicrotask(() => { logIncomingMockedClientMessage(messageEvent); }); return Reflect.apply(target, thisArg, args); } }); server.addEventListener( "open", () => { server.addEventListener("message", (event) => { logIncomingServerMessage(event); }); }, { once: true } ); server.send = new Proxy(server.send, { apply(target, thisArg, args) { const [data] = args; const messageEvent = new MessageEvent("message", { data }); Object.defineProperties(messageEvent, { currentTarget: { enumerable: true, writable: false, value: server.socket }, target: { enumerable: true, writable: false, value: server.socket } }); logOutgoingMockedClientMessage(messageEvent); return Reflect.apply(target, thisArg, args); } }); } function logConnectionOpen(client) { const publicUrl = toPublicUrl(client.url); console.groupCollapsed( devUtils.formatMessage(`${getTimestamp()} %c\u25B6%c ${publicUrl}`), `color:${colors.system}`, "color:inherit" ); console.log("Client:", client.socket); console.groupEnd(); } function logConnectionClose(event) { const target = event.target; const publicUrl = toPublicUrl(target.url); console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c\u25A0%c ${publicUrl}` ), `color:${colors.system}`, "color:inherit" ); console.log(event); console.groupEnd(); } function logClientError(event) { const socket = event.target; const publicUrl = toPublicUrl(socket.url); console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c\xD7%c ${publicUrl}` ), `color:${colors.system}`, "color:inherit" ); console.log(event); console.groupEnd(); } async function logOutgoingClientMessage(event) { const byteLength = getMessageLength(event.data); const publicData = await getPublicData(event.data); const arrow = event.defaultPrevented ? "\u21E1" : "\u2B06"; console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c` ), `color:${colors.outgoing}`, "color:inherit", "color:gray;font-weight:normal", "color:inherit;font-weight:inherit" ); console.log(event); console.groupEnd(); } async function logOutgoingMockedClientMessage(event) { const byteLength = getMessageLength(event.data); const publicData = await getPublicData(event.data); console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c\u2B06%c ${publicData} %c${byteLength}%c` ), `color:${colors.mocked}`, "color:inherit", "color:gray;font-weight:normal", "color:inherit;font-weight:inherit" ); console.log(event); console.groupEnd(); } async function logIncomingMockedClientMessage(event) { const byteLength = getMessageLength(event.data); const publicData = await getPublicData(event.data); console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c\u2B07%c ${publicData} %c${byteLength}%c` ), `color:${colors.mocked}`, "color:inherit", "color:gray;font-weight:normal", "color:inherit;font-weight:inherit" ); console.log(event); console.groupEnd(); } async function logIncomingServerMessage(event) { const byteLength = getMessageLength(event.data); const publicData = await getPublicData(event.data); const arrow = event.defaultPrevented ? "\u21E3" : "\u2B07"; console.groupCollapsed( devUtils.formatMessage( `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c` ), `color:${colors.incoming}`, "color:inherit", "color:gray;font-weight:normal", "color:inherit;font-weight:inherit" ); console.log(event); console.groupEnd(); } export { attachWebSocketLogger, logConnectionOpen }; //# sourceMappingURL=attachWebSocketLogger.mjs.map