@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
2 lines (1 loc) • 2.21 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("node:http"),a=require("node:https"),u=require("../route/route.js"),c=require("../utils/make-log.js"),p=require("./misc/response-templates.js"),g=require("../utils/get-readable-server-address.js"),d=require("../utils/setup-graceful-shutdown.js"),l=r=>r&&r.__esModule?r:{default:r},$=l(o),h=l(a);class f{logger;$server;$incomingMessageHandlerRef;$middlewares=new Map;$plugins=new Map;$responseTemplate;$routes=new Set;$options;$root=new u.default;$initialized=!1;$pluginsInitialized=!1;constructor(s){this.$options=s||{},this.logger=c.default.bind({},this.$options.debug);const t=this.$options.server?.https;this.$server=s?.serverless?void 0:t?.cert?h.default.createServer(t,(e,i)=>this.$incomingMessageHandlerRef?.(e,i)):$.default.createServer((e,i)=>this.$incomingMessageHandlerRef?.(e,i)),this.$server?.on("listening",()=>{const e=g.getReadableServerAddress(this.$server),i=t?.cert?"https":"http";this.logger({message:`Application successfully started @ ${i}://${e.address}:${e.port}`,level:"success",module:"sigil",json:{milestone:"start",ok:!0,serverless:!1,protocol:i}});for(const n of this.$plugins.values())n.onInternalServerStarted(this.$server)}),this.$responseTemplate=s?.responseTemplate??p.defaultTemplate,s?.serverless&&(this.$initialized=!0,this.logger({message:"Application internal server will not be started due to serverless mode",level:"warning",module:"sigil",json:{milestone:"start",ok:!0,serverless:!0}}),this.$updateCallback().catch(e=>{console.error(e)})),d.default({server:this.$server,timeoutMs:100,cleanup:async()=>{for(const e of this.$plugins.values())await e.onBeforeExit()}})}async $updateCallback(){if(this.$initialized){if(!this.$pluginsInitialized){this.$pluginsInitialized=!0;for(const t of this.$plugins.values())await t.onInitialize();const s=Array.from(this.$plugins.values()).map(t=>t.name);this.logger({message:`Successfully initialized ${this.$plugins.size} plugin(s): ${s.join(", ")}`,level:"success",module:"registry",json:{milestone:"plugin",ok:!0,plugins:s}})}for(const s of this.$plugins.values())s.onUpdateCallback()}}}exports.default=f;