UNPKG

@teambit/bundler

Version:
145 lines (143 loc) 4.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ComponentServer = void 0; function _exceptions() { const data = require("./exceptions"); _exceptions = function () { return data; }; return data; } function _events() { const data = require("./events"); _events = function () { return data; }; return data; } function _bundler() { const data = require("./bundler.aspect"); _bundler = function () { return data; }; return data; } function _selectPort() { const data = require("./select-port"); _selectPort = function () { return data; }; return data; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } class ComponentServer { constructor( /** * browser runtime slot */ pubsub, /** * components contained in the existing component server. */ context, /** * port range of the component server. */ portRange, /** * env dev server. */ devServer) { this.pubsub = pubsub; this.context = context; this.portRange = portRange; this.devServer = devServer; // why is this here _defineProperty(this, "errors", void 0); _defineProperty(this, "hostname", void 0); _defineProperty(this, "_server", void 0); _defineProperty(this, "_isRestarting", false); _defineProperty(this, "_port", void 0); _defineProperty(this, "createComponentsServerStartedEvent", (componentsServer, context, hostname, port) => { return new (_events().ComponentsServerStartedEvent)(Date.now(), componentsServer, context, hostname, port); }); } get server() { return this._server; } get envId() { return this.context.envRuntime.id; } /** * determine whether component server contains a component. */ hasComponent(component) { return this.context.components.find(contextComponent => contextComponent.equals(component)); } get port() { return this._port; } async listen(specificPort) { const port = specificPort || (await (0, _selectPort().selectPort)(this.portRange)); this._port = port; this._server = await this.devServer.listen(port); const address = this._server.address(); const hostname = this.getHostname(address); if (!address) throw new (_exceptions().BindError)(); this.hostname = hostname; this.pubsub.pub(_bundler().BundlerAspect.id, this.createComponentsServerStartedEvent(this, this.context, hostname, port)); } async close() { if (!this.server) return; return new Promise((resolve, reject) => { this.server?.close(err => { if (err) { reject(err); } else { this._server = undefined; this.hostname = undefined; resolve(); } }); }); } async restart(useNewPort = false) { if (this._isRestarting) { // add a logger here once we start using this API return; } this._isRestarting = true; try { await this.close(); await this.listen(useNewPort ? undefined : this._port); } catch (error) { if (!this.errors) this.errors = []; this.errors.push(error); } finally { this._isRestarting = false; } } getHostname(address) { if (address === null) throw new (_exceptions().BindError)(); if (typeof address === 'string') return address; let hostname = address.address; if (hostname === '::') { hostname = 'localhost'; } return hostname; } onChange() {} /** * get the url of the component server. */ get url() { // tailing `/` is required! return `/preview/${this.context.envRuntime.id}/`; } } exports.ComponentServer = ComponentServer; //# sourceMappingURL=component-server.js.map