UNPKG

@sapphire/plugin-api

Version:

Plugin for @sapphire/framework to expose a REST API

118 lines (115 loc) 3.92 kB
'use strict'; var pieces = require('@sapphire/pieces'); var async_event_emitter = require('@vladfrangu/async_event_emitter'); var http = require('http'); var MiddlewareStore_cjs = require('../MiddlewareStore.cjs'); var RouteStore_cjs = require('../RouteStore.cjs'); var ApiRequest_cjs = require('../api/ApiRequest.cjs'); var ApiResponse_cjs = require('../api/ApiResponse.cjs'); var Auth_cjs = require('./Auth.cjs'); var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); var ServerEvent = /* @__PURE__ */ ((ServerEvent2) => { ServerEvent2["Error"] = "error"; ServerEvent2["Request"] = "request"; ServerEvent2["RouterBranchNotFound"] = "routerBranchNotFound"; ServerEvent2["RouterBranchMethodNotAllowed"] = "routerBranchMethodNotAllowed"; ServerEvent2["RouterFound"] = "routerFound"; ServerEvent2["RouteError"] = "routeError"; ServerEvent2["MiddlewareFailure"] = "middlewareFailure"; ServerEvent2["MiddlewareError"] = "middlewareError"; ServerEvent2["MiddlewareSuccess"] = "middlewareSuccess"; return ServerEvent2; })(ServerEvent || {}); var _Server = class _Server extends async_event_emitter.AsyncEventEmitter { /** * @since 1.0.0 * @param options The options for this server */ constructor({ auth, ...options } = {}) { super(); /** * The routes this server holds. * @since 1.0.0 */ __publicField(this, "routes"); /** * The middlewares this server holds. * @since 1.0.0 */ __publicField(this, "middlewares"); /** * The authentication system. * @since 1.0.0 */ __publicField(this, "auth"); /** * The http.Server instance that manages the recieved HTTP requests. * @since 1.0.0 */ __publicField(this, "server"); /** * The options for this server. * @since 1.0.0 */ __publicField(this, "options"); pieces.container.server = this; this.options = options; this.server = http.createServer({ IncomingMessage: ApiRequest_cjs.ApiRequest, ServerResponse: ApiResponse_cjs.ApiResponse, ...options.server ?? {} }); this.routes = new RouteStore_cjs.RouteStore(); this.middlewares = new MiddlewareStore_cjs.MiddlewareStore(); this.auth = Auth_cjs.Auth.create(auth); this.server.on("error", this.emit.bind(this, "error" /* Error */)); this.server.on("request", this.emit.bind(this, "request" /* Request */)); } connect() { const { server } = this; server.listen({ port: 4e3, ...this.options.listenOptions ?? {} }); return new Promise((resolve, reject) => { function listening() { cleanup(); resolve(); } __name(listening, "listening"); function error(error2) { cleanup(); reject(error2); } __name(error, "error"); function close() { cleanup(); reject(new Error("Closed unexpectedly.")); } __name(close, "close"); function cleanup() { server.off("listening", listening); server.off("error", error); server.off("close", close); } __name(cleanup, "cleanup"); server.on("listening", listening); server.on("error", error); server.on("close", close); }); } disconnect() { return new Promise((resolve, reject) => { this.server.close((error) => error ? reject(error) : resolve()); }); } }; __name(_Server, "Server"); var Server = _Server; exports.Server = Server; exports.ServerEvent = ServerEvent; //# sourceMappingURL=Server.cjs.map //# sourceMappingURL=Server.cjs.map