UNPKG

rjweb-server

Version:

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

144 lines (143 loc) 4.52 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 router_exports = {}; __export(router_exports, { default: () => RouteIndex }); module.exports = __toCommonJS(router_exports); var import_safeEventEmitter = __toESM(require("../safeEventEmitter")); var import_path = __toESM(require("./path")); var import_contentTypes = __toESM(require("./contentTypes")); var import_defaultHeaders = __toESM(require("./defaultHeaders")); class RouteIndex extends import_safeEventEmitter.default { /** * List of Routes */ constructor() { super(); this.externals = []; this.middlewares = []; } /** * Add a new Block of Routes with a Prefix * @example * ``` * const controller = new Server({ }) * * controller.path('/', (path) => path * .http('GET', '/cool', (http) => http * .onRequest((ctr) => { * ctr.print('cool!') * }) * ) * .path('/api', (path) => path * .http('GET', '/', (http) => http * .onRequest((ctr) => { * ctr.print('Welcome to the API!') * }) * ) * ) * ) * ``` * @since 5.0.0 */ path(prefix, router) { if ("getData" in router) { this.externals.push({ object: router, addPrefix: prefix }); } else { const routePath = new import_path.default(prefix); this.externals.push({ object: routePath }); router(routePath); } return this; } /** * Add Content Type Mapping * @example * ``` * controller.contentTypes((cT) => cT * .add('.jayson', 'application/json') * ) * ``` * @since 5.3.0 */ contentTypes(code) { const routeContentTypes = new import_contentTypes.default(); this.externals.push({ object: routeContentTypes }); code(routeContentTypes); return this; } /** * Add Default Headers * @example * ``` * controller.defaultHeaders((dH) => dH * .add('X-Api-Version', '1.0.0') * ) * ``` * @since 5.3.0 */ defaultHeaders(code) { const routeDefaultHeaders = new import_defaultHeaders.default(); this.externals.push({ object: routeDefaultHeaders }); code(routeDefaultHeaders); return this; } /** * Internal Method for Generating Routes Object * @since 6.0.0 */ async getData() { const routes = [], webSockets = [], statics = [], loadPaths = []; let contentTypes = {}, defaultHeaders = {}; for (const external of this.externals) { const result = await external.object.getData(external.addPrefix ?? "/"); if ("routes" in result) routes.push(...result.routes); if ("webSockets" in result) webSockets.push(...result.webSockets); if ("statics" in result) statics.push(...result.statics); if ("loadPaths" in result) loadPaths.push(...result.loadPaths); if ("contentTypes" in result) contentTypes = Object.assign(contentTypes, result.contentTypes); if ("defaultHeaders" in result) defaultHeaders = Object.assign(defaultHeaders, result.defaultHeaders); } return { routes, webSockets, statics, loadPaths, contentTypes, defaultHeaders }; } }