UNPKG

@hap-toolkit/server

Version:

hap server

3 lines (2 loc) 4.47 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.launch=launch,exports.stop=stop;var _http=_interopRequireDefault(require("http")),_koa=_interopRequireDefault(require("koa")),_opn=_interopRequireDefault(require("opn")),_portfinder=_interopRequireDefault(require("portfinder")),_sharedUtils=require("@hap-toolkit/shared-utils"),_config=require("./config");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,o=new WeakMap;return(_getRequireWildcardCache=function(e){return e?o:r})(e)}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=_getRequireWildcardCache(r);if(o&&o.has(e))return o.get(e);var t={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var i=s?Object.getOwnPropertyDescriptor(e,n):null;i&&(i.get||i.set)?Object.defineProperty(t,n,i):t[n]=e[n]}return t.default=e,o&&o.set(e,t),t}const moduler=[require("@hap-toolkit/debugger")],proxies=require("koa-proxies");let server=null;async function launch(e){return new Promise((async r=>{try{"debug"!==_sharedUtils.globalConfig.command&&moduler.push((await Promise.resolve().then((()=>_interopRequireWildcard(require("@hap-toolkit/packager"))))).router,require("./preview/index.js"));const o=new _koa.default;o.use((async(e,r)=>{if(e.request.url.startsWith("/api/proxy")){const o=e.request.url.split("target=")[1];return proxies("/api/proxy",{target:o,changeOrigin:!0,logs:!0,rewrite:e=>e.replace(/^\/api\/proxy/,"")})(e,r)}return r()}));let t=_sharedUtils.globalConfig.server.port;t=await _portfinder.default.getPortPromise({port:t}),Object.assign(e.defaults,{serverPort:t}),o.context.conf=e,_config.browerOptions.options=Object.assign(_config.browerOptions.options,e);const{clearRecords:s,openBrowser:n}=e.options;if(s){const{clientRecordPath:e}=_sharedUtils.globalConfig;(0,_sharedUtils.clearProjectRecord)(e)}moduler.forEach((e=>{e.applyRouter&&o.use(e.applyRouter(o).routes())})),server=_http.default.Server(o.callback()),o.server=server;for(const e of moduler)e.beforeStart&&await e.beforeStart(server,o);server.listen(t,(()=>{const e=`http://localhost:${t}`,o=(0,_sharedUtils.getIPv4IPAddress)();if(!o)return _sharedUtils.colorconsole.warn("### App Server ### 本机IP地址为空,无法通过WIFI调试"),void r({launchServerError:null,server:server,address:e,previewAddress:e+"/previewAddress"});const s=`http://${o}:${t}`;_sharedUtils.colorconsole.info(`### App Server ### 服务器地址: ${e}, ${s}`),_sharedUtils.colorconsole.info("### App Server ### 请确保手机与App Server处于相同网段"),(0,_sharedUtils.outputQRCodeOnTerminal)(s),n&&(0,_opn.default)(s),r({launchServerError:null,server:server,address:s,previewAddress:e+"/preview"})})),o.on("error",((e,o)=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`);const t=`出错了!HTTP error code: ${e.status}, 出错信息: ${e.message}`;o&&(o.body=t),r({launchServerError:e,server:server})})),server.on("error",(e=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`),"EADDRINUSE"===e.code&&_sharedUtils.colorconsole.error(`### App Server ### 服务器错误:端口 ${t} 被占用, 请检查`),r({launchServerError:e,server:server})})),process.on("SIGINT",(()=>{_sharedUtils.colorconsole.info("### App Server ### SIGINT信号"),_sharedUtils.colorconsole.info(`### App Server ### 退出server进程 pid: ${process.pid}`),o.context.adbDebugger._stop(),process.exit()})),process.on("uncaughtException",(e=>{_sharedUtils.colorconsole.error(`### App Server ### 未定义的异常, 出错信息: ${e.message}`),console.error(e)})),process.on("unhandledRejection",((e,r)=>{_sharedUtils.colorconsole.error(`### App Server ### 未处理的 rejection, 出错信息: ${e}`),r.catch((e=>{console.error(e)}))}))}catch(e){throw _sharedUtils.colorconsole.error(`### App Server ### 服务器启动失败: ${e.message}`),r({launchServerError:e,server:null}),e}}))}function stop(){return new Promise((e=>{if(server)try{server.close((r=>{e({stopServerError:r})}))}catch(r){throw _sharedUtils.colorconsole.error(`### App Server ### 服务器关闭失败: ${r.message}`),e({stopServerError:r}),r}else e({stopServerError:"no server"})}))} //# sourceMappingURL=server.js.map