@hap-toolkit/server 2.0.8 → 2.0.9-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=createRouter;var _fs=_interopRequireDefault(require("fs")),_path=_interopRequireDefault(require("path")),_stream=require("stream"),_util=_interopRequireDefault(require("util")),_koaRouter=_interopRequireDefault(require("koa-router")),_koaSend=_interopRequireDefault(require("koa-send")),_jszip=_interopRequireDefault(require("jszip")),_config=require("../config"),_sharedUtils=require("@hap-toolkit/shared-utils"),_shared=require("./shared");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const{PACKAGER_BUILD_DONE:PACKAGER_BUILD_DONE,PACKAGER_WATCH_START:PACKAGER_WATCH_START,PACKAGER_BUILD_PROGRESS:PACKAGER_BUILD_PROGRESS}=_sharedUtils.eventBus,allowFiles=["sitemap.json","app-chunks.json","page-chunks.json"];function genWebJsUrl(e){return`https://statres.quickapp.cn/quickapp/ide/web${e=e?"-"+e:""}.js`}function jsonParse(e){try{return JSON.parse(e)}catch(e){console.error("Json Parse Error :",e)}}async function createRouter(e){const t=_util.default.debuglog("server.render"),r=new _koaRouter.default;let s=!1;t("preview target",e);_fs.default.existsSync(e)&&(s=_fs.default.lstatSync(e).isFile());const n=_util.default.promisify(_fs.default.readFile),a=_path.default.resolve(__dirname,"./views/page.html"),o=_path.default.resolve(__dirname,"./views/404.html"),i=new Map;let u,l,c;if(s){const t=await n(e);c=await _jszip.default.loadAsync(t),u=async function(){const t=c.file("manifest.json");if(!t)throw new _sharedUtils.KnownError(`从 ${e} 读取 manifest.json 失败!`);return t.async("string").then(jsonParse)},l=function(e){return null!==c.file(e)}}else{const t=_path.default.resolve(e,"manifest.json");u=async function(){let r,s=i.get(t);if(s&&Date.now()-s.timestamp<2e3)r=s.payload;else{if(!_fs.default.existsSync(e))throw new _sharedUtils.KnownError("找不到 build 目录");if(!_fs.default.existsSync(t))throw new _sharedUtils.KnownError("找不到 build 目录下的 manifest.json");r=jsonParse(await n(t)),i.set(t,{timestamp:Date.now(),payload:r})}return r},l=function(t){return _fs.default.existsSync(_path.default.resolve(e,t))}}return r.get("/__stream",(async function(e){const t=new _stream.PassThrough;function r(){e.req.destroyed||(t.write("event: watch\n"),t.write("data: ''\n\n"))}function s(r){e.req.destroyed||(t.write("event: progress\n"),t.write(`data: ${JSON.stringify(r)}\n\n`))}function n(){if(!e.req.destroyed){const e=_sharedUtils.logger.get(),r=(0,_sharedUtils.getLaunchPage)(),s={error:escape((0,_shared.removeAnsiColor)(e)),page:r};t.write("event: reload\n"),t.write(`data: ${JSON.stringify(s)}\n\n`)}}function a(){e.res.end(),t.end(),_sharedUtils.eventBus.off&&(_sharedUtils.eventBus.off(PACKAGER_WATCH_START,r),_sharedUtils.eventBus.off(PACKAGER_BUILD_PROGRESS,s),_sharedUtils.eventBus.off(PACKAGER_BUILD_DONE,n))}_sharedUtils.eventBus.on(PACKAGER_WATCH_START,r),_sharedUtils.eventBus.on(PACKAGER_BUILD_PROGRESS,s),_sharedUtils.eventBus.on(PACKAGER_BUILD_DONE,n),e.req.on("close",a),e.req.on("finish",a),e.req.on("error",a),e.type="text/event-stream",e.res.connection.setTimeout(0),t.write("event: start\n"),t.write("data: waing for signal\n\n"),e.body=t})),r.get("/",(async function(e,r){const s=await u();if(s&&s.router&&s.router.entry){t("preview home","entry",s.router.entry);const r=(0,_sharedUtils.getLaunchPage)()||s.router.entry;e.redirect(`/preview/${r}`)}else{const t=(0,_sharedUtils.getLaunchPage)();e.redirect(`/preview/${t}`)}})),r.get("/*",(async function(e,r){const s=await u(),n=await async function(e){let t={};if(e&&e.router&&(e.router.pages||e.router.widgets)){const r=e.router.pages||{},s=e.router.widgets||{},n=Object.keys(r),a=Object.keys(s);n.concat(a).forEach((e=>{const n=(0,_shared.trimSlash)(e),a=r[e]||s[e],o=(0,_shared.trimSlash)(a.component);t[n]=`${e}/${o}.js`}))}else new _sharedUtils.KnownError("未配置页面路由信息").__KNOWN=!0;return t}(s),i=Object.keys(n);let c=(0,_shared.trimSlash)(e.path);if(t("requestRoute",c,e.appRoutes),i.indexOf(c)>-1){const t=c in(s.router.widgets||{})?"card":"app",r=n[c],o=JSON.parse(process.env.VSCODE_NLS_CONFIG||'{"locale":"zh-CN"}').locale,i=_config.browerOptions.options.mediaQueryParams||{},u=await(0,_shared.renderPage)(a,{title:s.name,routeName:c,routes:JSON.stringify(n),type:t,script:r,scriptNotFound:!l(r),devtoolUrl:_config.browerOptions.options.devtoolUrl||"",webJsUrl:genWebJsUrl(_config.browerOptions.options.version||e.conf.options.webVersion),language:o,mediaQueryParams:JSON.stringify(i)});e.type="text/html",e.body=u}else if(await r(),404===e.status){if(c.endsWith(".js"))e.type="text/javascript",e.body=`/* 404 */console.log(new Error('找不到 ${c}'))`;else{const t=await(0,_shared.renderPage)(o,{message:`找不到 /preview/${c}`});e.type="text/html",e.body=t}e.status=404}})),s?r.get("/*",(async function(e,t){let r=(0,_shared.trimSlash)(e.path);const s=c.file(r);if(allowFiles.includes(r))return e.status=200,void(s&&(e.body=await s.nodeStream()));s?e.body=await s.nodeStream():(e.status=404,await t())})):r.get("/*",(async function(t,r){let s=(0,_shared.trimSlash)(t.path);if(allowFiles.includes(s)){const r=_path.default.join(e,s);if(_fs.default.existsSync(r))try{const e=require(r);t.type="json",t.body=e}catch(e){}t.status=200}else try{await(0,_koaSend.default)(t,s,{root:e})}catch(e){if(404!==e.status)throw console.error("Build Static File Error",e),e;await r()}})),r}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=createRouter;var _fs=_interopRequireDefault(require("fs")),_path=_interopRequireDefault(require("path")),_stream=require("stream"),_util=_interopRequireDefault(require("util")),_koaRouter=_interopRequireDefault(require("koa-router")),_koaSend=_interopRequireDefault(require("koa-send")),_jszip=_interopRequireDefault(require("jszip")),_config=require("../config"),_sharedUtils=require("@hap-toolkit/shared-utils"),_shared=require("./shared");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const{PACKAGER_BUILD_DONE:PACKAGER_BUILD_DONE,PACKAGER_WATCH_START:PACKAGER_WATCH_START,PACKAGER_BUILD_PROGRESS:PACKAGER_BUILD_PROGRESS}=_sharedUtils.eventBus,allowFiles=["sitemap.json","app-chunks.json","page-chunks.json"];function genWebJsUrl(e){return`https://statres.quickapp.cn/quickapp/ide/${e?`web-${e}.js`:`web.js?t=${Date.now()}`}`}function jsonParse(e){try{return JSON.parse(e)}catch(e){console.error("Json Parse Error :",e)}}async function createRouter(e){const t=_util.default.debuglog("server.render"),r=new _koaRouter.default;let s=!1;t("preview target",e);_fs.default.existsSync(e)&&(s=_fs.default.lstatSync(e).isFile());const n=_util.default.promisify(_fs.default.readFile),a=_path.default.resolve(__dirname,"./views/page.html"),o=_path.default.resolve(__dirname,"./views/404.html"),i=new Map;let u,l,c;if(s){const t=await n(e);c=await _jszip.default.loadAsync(t),u=async function(){const t=c.file("manifest.json");if(!t)throw new _sharedUtils.KnownError(`从 ${e} 读取 manifest.json 失败!`);return t.async("string").then(jsonParse)},l=function(e){return null!==c.file(e)}}else{const t=_path.default.resolve(e,"manifest.json");u=async function(){let r,s=i.get(t);if(s&&Date.now()-s.timestamp<2e3)r=s.payload;else{if(!_fs.default.existsSync(e))throw new _sharedUtils.KnownError("找不到 build 目录");if(!_fs.default.existsSync(t))throw new _sharedUtils.KnownError("找不到 build 目录下的 manifest.json");r=jsonParse(await n(t)),i.set(t,{timestamp:Date.now(),payload:r})}return r},l=function(t){return _fs.default.existsSync(_path.default.resolve(e,t))}}return r.get("/__stream",(async function(e){const t=new _stream.PassThrough;function r(){e.req.destroyed||(t.write("event: watch\n"),t.write("data: ''\n\n"))}function s(r){e.req.destroyed||(t.write("event: progress\n"),t.write(`data: ${JSON.stringify(r)}\n\n`))}function n(){if(!e.req.destroyed){const e=_sharedUtils.logger.get(),r=(0,_sharedUtils.getLaunchPage)(),s={error:escape((0,_shared.removeAnsiColor)(e)),page:r};t.write("event: reload\n"),t.write(`data: ${JSON.stringify(s)}\n\n`)}}function a(){e.res.end(),t.end(),_sharedUtils.eventBus.off&&(_sharedUtils.eventBus.off(PACKAGER_WATCH_START,r),_sharedUtils.eventBus.off(PACKAGER_BUILD_PROGRESS,s),_sharedUtils.eventBus.off(PACKAGER_BUILD_DONE,n))}_sharedUtils.eventBus.on(PACKAGER_WATCH_START,r),_sharedUtils.eventBus.on(PACKAGER_BUILD_PROGRESS,s),_sharedUtils.eventBus.on(PACKAGER_BUILD_DONE,n),e.req.on("close",a),e.req.on("finish",a),e.req.on("error",a),e.type="text/event-stream",e.res.connection.setTimeout(0),t.write("event: start\n"),t.write("data: waing for signal\n\n"),e.body=t})),r.get("/",(async function(e,r){const s=await u();if(s&&s.router&&s.router.entry){t("preview home","entry",s.router.entry);const r=(0,_sharedUtils.getLaunchPage)()||s.router.entry;e.redirect(`/preview/${r}`)}else{const t=(0,_sharedUtils.getLaunchPage)();e.redirect(`/preview/${t}`)}})),r.get("/*",(async function(e,r){const s=await u(),n=await async function(e){let t={};if(e&&e.router&&(e.router.pages||e.router.widgets)){const r=e.router.pages||{},s=e.router.widgets||{},n=Object.keys(r),a=Object.keys(s);n.concat(a).forEach((e=>{const n=(0,_shared.trimSlash)(e),a=r[e]||s[e],o=(0,_shared.trimSlash)(a.component);t[n]=`${e}/${o}.js`}))}else new _sharedUtils.KnownError("未配置页面路由信息").__KNOWN=!0;return t}(s),i=Object.keys(n);let c=(0,_shared.trimSlash)(e.path);if(t("requestRoute",c,e.appRoutes),i.indexOf(c)>-1){const t=c in(s.router.widgets||{})?"card":"app",r=n[c],o=JSON.parse(process.env.VSCODE_NLS_CONFIG||'{"locale":"zh-CN"}').locale,i=_config.browerOptions.options.mediaQueryParams||{},u=await(0,_shared.renderPage)(a,{title:s.name,routeName:c,routes:JSON.stringify(n),type:t,script:r,scriptNotFound:!l(r),devtoolUrl:_config.browerOptions.options.devtoolUrl||"",webJsUrl:genWebJsUrl(_config.browerOptions.options.version||e.conf.options.webVersion),language:o,mediaQueryParams:JSON.stringify(i)});e.type="text/html",e.body=u}else if(await r(),404===e.status){if(c.endsWith(".js"))e.type="text/javascript",e.body=`/* 404 */console.log(new Error('找不到 ${c}'))`;else{const t=await(0,_shared.renderPage)(o,{message:`找不到 /preview/${c}`});e.type="text/html",e.body=t}e.status=404}})),s?r.get("/*",(async function(e,t){let r=(0,_shared.trimSlash)(e.path);const s=c.file(r);if(allowFiles.includes(r))return e.status=200,void(s&&(e.body=await s.nodeStream()));s?e.body=await s.nodeStream():(e.status=404,await t())})):r.get("/*",(async function(t,r){let s=(0,_shared.trimSlash)(t.path);if(allowFiles.includes(s)){const r=_path.default.join(e,s);if(_fs.default.existsSync(r))try{const e=require(r);t.type="json",t.body=e}catch(e){}t.status=200}else try{await(0,_koaSend.default)(t,s,{root:e})}catch(e){if(404!==e.status)throw console.error("Build Static File Error",e),e;await r()}})),r}
2
2
  //# sourceMappingURL=create-router.js.map
package/lib/server.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.launch=launch,exports.stop=stop;var _http=_interopRequireDefault(require("http")),_https=_interopRequireDefault(require("https")),_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 ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}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(e){var r=_toPrimitive(e,"string");return"symbol"==typeof r?r:String(r)}function _toPrimitive(e,r){if("object"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t: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 t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var o={},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(o,n,i):o[n]=e[n]}return o.default=e,t&&t.set(e,o),o}const moduler=[require("@hap-toolkit/debugger")];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 t=new _koa.default;t.use((async(e,r)=>{if(!e.request.url.startsWith("/api/proxy"))return r();const t=e.request.url.split("/api/proxy/")[1]||"",o=new URL(t);if(!o)return e.status=400,void(e.body={message:"Missing required query param: target"});const s=await new Promise(((r,t)=>{const o=[];e.req.on("data",(e=>o.push(e))),e.req.on("end",(()=>r(Buffer.concat(o)))),e.req.on("error",t)})),n=_objectSpread({},e.headers);delete n.host,s.length>0?n["content-length"]=s.length:delete n["content-length"];const i={method:e.method,headers:n},a="https:"===o.protocol?_https.default:_http.default,c=await new Promise(((e,r)=>{const t=a.request(o,i,(r=>{const t=[];r.on("data",(e=>t.push(e))),r.on("end",(()=>{e({statusCode:r.statusCode||500,headers:r.headers,body:Buffer.concat(t)})}))}));t.on("error",r),t.setTimeout(3e4,(()=>{t.destroy(new Error("proxy request timeout"))})),s.length>0&&t.write(s),t.end()}));e.status=c.statusCode,Object.entries(c.headers||{}).forEach((([r,t])=>{void 0!==t&&e.set(r,t)})),e.body=c.body}));let o=_sharedUtils.globalConfig.server.port;o=await _portfinder.default.getPortPromise({port:o}),Object.assign(e.defaults,{serverPort:o}),t.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&&t.use(e.applyRouter(t).routes())})),server=_http.default.Server(t.callback()),t.server=server;for(const e of moduler)e.beforeStart&&await e.beforeStart(server,t);server.listen(o,(()=>{const e=`http://localhost:${o}`,t=(0,_sharedUtils.getIPv4IPAddress)();if(!t)return _sharedUtils.colorconsole.warn("### App Server ### 本机IP地址为空,无法通过WIFI调试"),void r({launchServerError:null,server:server,address:e,previewAddress:e+"/previewAddress"});const s=`http://${t}:${o}`;_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"})})),t.on("error",((e,t)=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`);const o=`出错了!HTTP error code: ${e.status}, 出错信息: ${e.message}`;t&&(t.body=o),r({launchServerError:e,server:server})})),server.on("error",(e=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`),"EADDRINUSE"===e.code&&_sharedUtils.colorconsole.error(`### App Server ### 服务器错误:端口 ${o} 被占用, 请检查`),r({launchServerError:e,server:server})})),process.on("SIGINT",(()=>{_sharedUtils.colorconsole.info("### App Server ### SIGINT信号"),_sharedUtils.colorconsole.info(`### App Server ### 退出server进程 pid: ${process.pid}`),t.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"})}))}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.launch=launch,exports.stop=stop;var _http=_interopRequireDefault(require("http")),_https=_interopRequireDefault(require("https")),_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 ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}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(e){var r=_toPrimitive(e,"string");return"symbol"==typeof r?r:String(r)}function _toPrimitive(e,r){if("object"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t: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 t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var o={},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(o,n,i):o[n]=e[n]}return o.default=e,t&&t.set(e,o),o}const moduler=[require("@hap-toolkit/debugger")];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 t=new _koa.default;t.use((async(e,r)=>{if(!e.request.url.startsWith("/api/proxy"))return r();const t=e.request.url.split("/api/proxy/")[1]||"",o=new URL(t);if(!o)return e.status=400,void(e.body={message:"Missing required query param: target"});const s=await new Promise(((r,t)=>{const o=[];e.req.on("data",(e=>o.push(e))),e.req.on("end",(()=>r(Buffer.concat(o))))})),n=_objectSpread({},e.headers);delete n.host,s.length>0?n["content-length"]=s.length:delete n["content-length"];const i={method:e.method,headers:n},a="https:"===o.protocol?_https.default:_http.default,c=await new Promise(((e,r)=>{const t=a.request(o,i,(r=>{const t=[];r.on("data",(e=>t.push(e))),r.on("end",(()=>{e({statusCode:r.statusCode||500,headers:r.headers,body:Buffer.concat(t)})}))}));s.length>0&&t.write(s),t.end()}));e.status=c.statusCode,Object.entries(c.headers||{}).forEach((([r,t])=>{void 0!==t&&e.set(r,t)})),e.body=c.body}));let o=_sharedUtils.globalConfig.server.port;o=await _portfinder.default.getPortPromise({port:o}),Object.assign(e.defaults,{serverPort:o}),t.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&&t.use(e.applyRouter(t).routes())})),server=_http.default.Server(t.callback()),t.server=server;for(const e of moduler)e.beforeStart&&await e.beforeStart(server,t);server.listen(o,(()=>{const e=`http://localhost:${o}`,t=(0,_sharedUtils.getIPv4IPAddress)();if(!t)return _sharedUtils.colorconsole.warn("### App Server ### 本机IP地址为空,无法通过WIFI调试"),void r({launchServerError:null,server:server,address:e,previewAddress:e+"/previewAddress"});const s=`http://${t}:${o}`;_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"})})),t.on("error",((e,t)=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`);const o=`出错了!HTTP error code: ${e.status}, 出错信息: ${e.message}`;t&&(t.body=o),r({launchServerError:e,server:server})})),server.on("error",(e=>{_sharedUtils.colorconsole.error(`### App Server ### 服务器错误: ${e.message}`),"EADDRINUSE"===e.code&&_sharedUtils.colorconsole.error(`### App Server ### 服务器错误:端口 ${o} 被占用, 请检查`),r({launchServerError:e,server:server})})),process.on("SIGINT",(()=>{_sharedUtils.colorconsole.info("### App Server ### SIGINT信号"),_sharedUtils.colorconsole.info(`### App Server ### 退出server进程 pid: ${process.pid}`),t.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"})}))}
2
2
  //# sourceMappingURL=server.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hap-toolkit/server",
3
- "version": "2.0.8",
3
+ "version": "2.0.9-beta.1",
4
4
  "description": "hap server",
5
5
  "engines": {
6
6
  "node": ">=14.0.0"
@@ -26,9 +26,9 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@babel/runtime": "^7.9.6",
29
- "@hap-toolkit/debugger": "2.0.8",
30
- "@hap-toolkit/packager": "2.0.8",
31
- "@hap-toolkit/shared-utils": "2.0.8",
29
+ "@hap-toolkit/debugger": "2.0.9-beta.1",
30
+ "@hap-toolkit/packager": "2.0.9-beta.1",
31
+ "@hap-toolkit/shared-utils": "2.0.9-beta.1",
32
32
  "@jayfate/path": "^0.0.13",
33
33
  "crypto-js": "^4.1.1",
34
34
  "fs-extra": "^10.0.0",
@@ -47,5 +47,5 @@
47
47
  "request": "^2.88.2",
48
48
  "resolve": "^1.22.2"
49
49
  },
50
- "gitHead": "fb42bb376f15d1be6345b651aec4862e421a986e"
50
+ "gitHead": "153fad92cec53cf8f37c7bf5622706ff83b7d78f"
51
51
  }