UNPKG

@fakehost/signalr

Version:

A Fake Signalr Service for faking/mocking signalr hub services for testing, prototyping, and demoing

77 lines (74 loc) 2.28 kB
// src/browser.ts import { HijackedRestService, enableLogger as restLogger, mockedFetch } from "@fakehost/fake-rest/browser"; import { BrowserWsHost, enableLogger as wsLogger, MockedSocket } from "@fakehost/exchange"; // src/restHandshakeRouter.ts import { createRouter, cors } from "@fakehost/fake-rest"; import { v4 as uuid } from "uuid"; var restRouter = createRouter().use(cors()).use((_, res) => { const connectionId = uuid(); res.json(signalrHandshake(connectionId)); }); var signalrHandshake = (connectionId) => ({ negotiateVersion: 1, connectionId, connectionToken: connectionId, availableTransports: [ { transport: "WebSockets", transferFormats: ["Text", "Binary"] }, { transport: "ServerSentEvents", transferFormats: ["Text"] }, { transport: "LongPolling", transferFormats: ["Text", "Binary"] } ] }); // src/types.ts import Url from "url"; var isFakeSignalrHub = (hub) => { return "constructor" in hub && "name" in hub.constructor && hub.constructor.name === "FakeSignalrHub"; }; var URL = globalThis.URL || Url.URL; // src/browser.ts var objectKeys = (x) => Object.keys(x); var createInBrowserSignalr = async (options) => { if (options.debug) { restLogger(); wsLogger(); } const httpRest = new HijackedRestService(options.url, restRouter, { name: options.name, silent: false }); const wsUrl = new URL(options.url); wsUrl.protocol = "ws:"; const hosts = objectKeys(options.hubs).filter((hubName) => isFakeSignalrHub(options.hubs[hubName])).reduce((acc, hubName) => { const hub = options.hubs[hubName]; if (isFakeSignalrHub(hub)) { const host = new BrowserWsHost({ url: new URL(hub.path, wsUrl), silent: options.silent, name: `${options.name || "fake"}:${hubName}` }); hub.setHost(host); acc[hubName] = { disconnect: host.disconnect }; } return acc; }, {}); return { MockedSocket, mockedFetch, url: options.url, disconnect: (key) => hosts[key].disconnect(), dispose: async () => { const wshosts = Array.from(Object.values(hosts)); await Promise.all([...wshosts, httpRest.dispose()]); } }; }; export { MockedSocket, createInBrowserSignalr }; //# sourceMappingURL=browser.js.map