@hap-toolkit/server 2.0.4 → 2.0.5-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"),
|
|
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}
|
|
2
2
|
//# sourceMappingURL=create-router.js.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
Copyright (c) 2021-present, the hapjs-platform Project Contributors
|
|
3
3
|
SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
--><!DOCTYPE html><html><head><meta charset="utf-8"><title>{{ title }}</title><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-touch-fullscreen" content="yes"><meta name="format-detection" content="telephone=no, email=no"><meta name="referrer" content="no-referrer"><style>#mask{position:fixed;top:0;bottom:0;left:0;right:0;background:rgba(42,43,46,.9);padding:.8rem .27rem .27rem .27rem;z-index:1002}#btn{width:.67rem;height:.67rem;border:.04rem solid #ccc;border-radius:50%;color:#ccc;line-height:.59rem;font-size:.67rem;text-align:center;margin:auto}#text{height:95%;color:#f60;font-size:.35rem;white-space:break-spaces;word-break:break-word;overflow:auto;margin-top:.27rem}#text::-webkit-scrollbar{display:none}#loading{position:fixed;top:0;bottom:0;left:0;right:0;background:url(/preview-static/loading.gif) no-repeat center;background-size:15%;background-position:center;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1001}.dark{background-color:#252526!important;color:rgba(255,255,255,.8)}.light{background-color:#fff!important;color:rgba(0,0,0,.8)}#loading:after{display:block;font-size:.45rem;transform:translateY(200%)}#progress-bar{position:fixed;top:55%;width:100%;font-size:.45rem;text-align:center;z-index:1002}</style><script src="hap-preview://index.js"></script><!-- https://statres.quickapp.cn/quickapp/ide/web.js --><script src="{{webJsUrl}}"></script><script type="text/javascript">window.Hap||document.write('<script src="/preview-static/web.js"><\/script>')</script><script type="text/javascript">
|
|
4
|
+
--><!DOCTYPE html><html><head><meta charset="utf-8"><title>{{ title }}</title><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-touch-fullscreen" content="yes"><meta name="format-detection" content="telephone=no, email=no"><meta name="referrer" content="no-referrer"><style>#mask{position:fixed;top:0;bottom:0;left:0;right:0;background:rgba(42,43,46,.9);padding:.8rem .27rem .27rem .27rem;z-index:1002}#btn{width:.67rem;height:.67rem;border:.04rem solid #ccc;border-radius:50%;color:#ccc;line-height:.59rem;font-size:.67rem;text-align:center;margin:auto}#text{height:95%;color:#f60;font-size:.35rem;white-space:break-spaces;word-break:break-word;overflow:auto;margin-top:.27rem}#text::-webkit-scrollbar{display:none}#loading{position:fixed;top:0;bottom:0;left:0;right:0;background:url(/preview-static/loading.gif) no-repeat center;background-size:15%;background-position:center;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1001}.dark{background-color:#252526!important;color:rgba(255,255,255,.8)}.light{background-color:#fff!important;color:rgba(0,0,0,.8)}#loading:after{display:block;font-size:.45rem;transform:translateY(200%)}#progress-bar{position:fixed;top:55%;width:100%;font-size:.45rem;text-align:center;z-index:1002}</style><script src="hap-preview://index.js"></script><!-- https://statres.quickapp.cn/quickapp/ide/web.js --><script src="{{webJsUrl}}"></script><script type="text/javascript">window.Hap||document.write('<script src="/preview-static/web.js"><\/script>')</script><script type="text/javascript">if (`{{devtoolUrl}}`) {
|
|
5
|
+
document.write('<script src="{{devtoolUrl}}">\x3C/script>')
|
|
6
|
+
}</script><script type="text/javascript">var base = '/preview'
|
|
5
7
|
var type = '{{ type }}'
|
|
6
8
|
window.language = `{{language}}`
|
|
7
9
|
window.mediaQueryParams = JSON.parse(`{{mediaQueryParams}}`)
|
|
@@ -9,7 +11,8 @@
|
|
|
9
11
|
var routeName = '{{ routeName }}'
|
|
10
12
|
Hap.init({
|
|
11
13
|
base,
|
|
12
|
-
type
|
|
14
|
+
type,
|
|
15
|
+
idePlatform: `{{devtoolUrl}}` ? 'extensionOnline' : undefined
|
|
13
16
|
})
|
|
14
17
|
})()</script><script src="/preview-static/common.js"></script></head><body><div id="scriptNotFound" style="display:none"><p>找不到页面 js 文件 {{ script }}</p><p>编译可能存在异常</p></div><script type="text/javascript">if ({{ scriptNotFound }}) {
|
|
15
18
|
// TODO loading
|
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")),_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
|
|
1
|
+
"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"})}))}
|
|
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.
|
|
3
|
+
"version": "2.0.5-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.
|
|
30
|
-
"@hap-toolkit/packager": "2.0.
|
|
31
|
-
"@hap-toolkit/shared-utils": "2.0.
|
|
29
|
+
"@hap-toolkit/debugger": "2.0.5-beta.1",
|
|
30
|
+
"@hap-toolkit/packager": "2.0.5-beta.1",
|
|
31
|
+
"@hap-toolkit/shared-utils": "2.0.5-beta.1",
|
|
32
32
|
"@jayfate/path": "^0.0.13",
|
|
33
33
|
"crypto-js": "^4.1.1",
|
|
34
34
|
"fs-extra": "^10.0.0",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"koa": "^2.11.0",
|
|
37
37
|
"koa-body": "^4.1.1",
|
|
38
38
|
"koa-mount": "^4.0.0",
|
|
39
|
+
"koa-proxies": "^0.12.4",
|
|
39
40
|
"koa-router": "^7.4.0",
|
|
40
41
|
"koa-send": "^5.0.0",
|
|
41
42
|
"koa-static": "^5.0.0",
|
|
@@ -46,5 +47,5 @@
|
|
|
46
47
|
"request": "^2.88.2",
|
|
47
48
|
"resolve": "^1.22.2"
|
|
48
49
|
},
|
|
49
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "da66e6ae107fa07533b5129703de162f90a77474"
|
|
50
51
|
}
|