UNPKG

rjweb-server

Version:

Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS

100 lines (99 loc) 3.79 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var handleWSClose_exports = {}; __export(handleWSClose_exports, { default: () => handleWSClose }); module.exports = __toCommonJS(handleWSClose_exports); var import_handleEvent = __toESM(require("../handleEvent")); function handleWSClose(ws, message, ctg) { const { custom, ctx } = ws.getUserData(); ctg.logger.debug("WebSocket connection closed"); ctx.body.type = "unknown"; ctx.body.raw = Buffer.from(message); ctx.body.parsed = ""; ctx.executeSelf = () => true; ctx.executeCode = true; ctx.events.send("requestAborted"); ctg.data.incoming.increase(); ctx.handleError = (err) => { if (!err) return; ctx.error = err; ctx.execute.event = "wsCloseError"; }; for (const { ref, refListener } of ctx.refListeners) { ref["removeOnChange"](refListener); } { (async () => { const ctr = new ctg.classContexts.wsClose(ctg.controller, ctx, ws); ctr["@"] = custom; if (ctg.middlewares.length > 0 && !ctx.error) { for (let middlewareIndex = 0; middlewareIndex < ctg.middlewares.length; middlewareIndex++) { const middleware = ctg.middlewares[middlewareIndex]; if (!middleware.data.wsCloseEvent) continue; try { await Promise.resolve(middleware.data.wsCloseEvent(middleware.localContext, () => ctx.executeCode = false, ctr, ctx, ctg)); if (ctx.error) throw ctx.error; } catch (err) { ctx.handleError(err); break; } } } await (0, import_handleEvent.default)("wsClose", ctr, ctx, ctg); const runPageLogic = (eventOnly) => new Promise(async (resolve) => { if (ctx.execute.event !== "none") { await (0, import_handleEvent.default)(ctx.execute.event, ctr, ctx, ctg); return resolve(); } ; if (eventOnly) return resolve(); if (!ctx.execute.route) return; if (ctx.executeCode && ctx.execute.route.type === "websocket" && ctx.execute.route.onClose) { try { await Promise.resolve(ctx.execute.route.onClose(ctr)); } catch (err) { ctx.error = err; ctx.execute.event = "wsCloseError"; await runPageLogic(); } return resolve(); } return resolve(); }); await runPageLogic(); })(); } }