minidev 0.0.0 → 0.0.1-49682569
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.
- package/README.md +14 -0
- package/assets/builder-debug-utils/README.md +73 -0
- package/assets/builder-debug-utils/dist/index.js +1 -0
- package/assets/builder-debug-utils/lib/compose.d.ts +2 -0
- package/assets/builder-debug-utils/lib/compose.js +91 -0
- package/assets/builder-debug-utils/lib/config.d.ts +3 -0
- package/assets/builder-debug-utils/lib/config.js +19 -0
- package/assets/builder-debug-utils/lib/context.d.ts +14 -0
- package/assets/builder-debug-utils/lib/context.js +32 -0
- package/assets/builder-debug-utils/lib/index.d.ts +3 -0
- package/assets/builder-debug-utils/lib/index.js +20 -0
- package/assets/builder-debug-utils/lib/interface.d.ts +86 -0
- package/assets/builder-debug-utils/lib/interface.js +16 -0
- package/assets/builder-debug-utils/lib/sdk.d.ts +32 -0
- package/assets/builder-debug-utils/lib/sdk.js +150 -0
- package/assets/builder-debug-utils/lib/updater.d.ts +16 -0
- package/assets/builder-debug-utils/lib/updater.js +136 -0
- package/assets/builder-debug-utils/lib/utils.d.ts +15 -0
- package/assets/builder-debug-utils/lib/utils.js +68 -0
- package/assets/builder-debug-utils/offline/assets_map +1 -0
- package/assets/builder-debug-utils/offline/boatman_cube +3 -0
- package/assets/builder-debug-utils/offline/boatman_mini +1 -0
- package/assets/builder-debug-utils/package.json +53 -0
- package/assets/builder-debug-utils/readonly/assets_map +1 -0
- package/assets/builder-debug-utils/readonly/boatman_cube +3 -0
- package/assets/builder-debug-utils/readonly/boatman_mini +1 -0
- package/assets/web-sim/devtool/index.html +18 -0
- package/assets/web-sim/devtool/main.js +2 -0
- package/assets/web-sim/devtool/main.js.LICENSE.txt +50 -0
- package/assets/web-sim/index.html +17 -0
- package/assets/web-sim/main.js +2 -0
- package/assets/web-sim/main.js.LICENSE.txt +92 -0
- package/assets/web-sim/simulator/index.html +18 -0
- package/assets/web-sim/simulator/main.js +2 -0
- package/assets/web-sim/simulator/main.js.LICENSE.txt +74 -0
- package/bin/minidev.js +4 -0
- package/index.d.ts +923 -0
- package/lib/index.js +2 -0
- package/lib/index.js.LICENSE.txt +345 -0
- package/lib/rw_host.js +2 -0
- package/lib/rw_host.js.LICENSE.txt +140 -0
- package/lib/worker.js +2 -0
- package/lib/worker.js.LICENSE.txt +1 -0
- package/package.json +38 -6
- package/scripts/post-install.js +18 -0
- package/template/deprecated-tiny/alipayiot/index.html +180 -0
- package/template/deprecated-tiny/dingtalk/index.html +216 -0
- package/template/deprecated-tiny/taobao/index.html +50 -0
- package/template/ng/appConfig.json +12 -0
- package/template/ng/index.html +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
# Minidev - 支付宝小程序开发 Cli
|
|
3
|
+
|
|
4
|
+
支付宝小程序开发 cli(minidev)提供了常用的支付宝系小程序开发指令,能够方便地在各类平台上快速进行小程序的开发、预览、上传等操作。
|
|
5
|
+
|
|
6
|
+
# 基本使用
|
|
7
|
+
|
|
8
|
+
请参阅我们官方网站的[在线文档](https://opendocs.alipay.com/mini/02q17h)
|
|
9
|
+
|
|
10
|
+
# 问题反馈
|
|
11
|
+
|
|
12
|
+
如果您在使用过程中产生任何疑问,或者有任何建议,可以前往支付宝开发者社区 (https://forum.alipay.com/mini-app) 进行提问,或者通过官方钉钉群来联系我们。
|
|
13
|
+
|
|
14
|
+

|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# builder-debug-utils
|
|
2
|
+
|
|
3
|
+
```ts
|
|
4
|
+
const debugUtils = require('@alipay/builder-debug-utils');
|
|
5
|
+
|
|
6
|
+
const debugUtils.generateInjectCodePath({
|
|
7
|
+
target: 'Mini',
|
|
8
|
+
mode: 'Preview',
|
|
9
|
+
compilePlugin: false,
|
|
10
|
+
}); // /Users/foo/bar
|
|
11
|
+
|
|
12
|
+
tiny-cli --injectCodePath /Users/foo/bar
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
/offline/assets_map - 用于存储构建脚本文本
|
|
16
|
+
$TMPDIR/builder_debug_output_v2 - 用于作为 tiny-cli injectCodePath 入参
|
|
17
|
+
|
|
18
|
+
### API
|
|
19
|
+
|
|
20
|
+
- 检查更新
|
|
21
|
+
比较本地与服务端资源 sha256 是否相同,若不同更新本地资源
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const injectCodePath = await updateInjectCodeAssets();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- 生成 injectCode
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
await generateInjectCode({
|
|
31
|
+
mode: 'Remotex',
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
generateInjectCodeSync({
|
|
35
|
+
mode: 'Remotex',
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- 生成 injectCodePath
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
await generateInjectCodePath({
|
|
43
|
+
mode: 'Remotex',
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
generateInjectCodePathSync({
|
|
47
|
+
mode: 'Remotex',
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- 获取 boatman 资源路径
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
await getBoatmanBundlePath();
|
|
55
|
+
|
|
56
|
+
getBoatmanBundlePathSync();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 开发
|
|
60
|
+
|
|
61
|
+
本地开发可以使用 watch 模式,watch 模式可以通过环境变量来监听指定文件的变化,可以通过 .env 文件来设置哪些文件要监听:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
touch .env
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```env
|
|
68
|
+
BOATMAN_PATH="path/to/boatman"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
yarn generate:watch
|
|
73
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("fs-extra"),t=require("bent"),n=require("crypto"),o=require("os"),a=require("path"),r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var s,u,d,l={},c={};s=c,Object.defineProperty(s,"__esModule",{value:!0}),s.ECompileModeType=s.ECompileTargetType=void 0,(u=s.ECompileTargetType||(s.ECompileTargetType={})).Mini="Mini",u.Cube="Cube",(d=s.ECompileModeType||(s.ECompileModeType={})).Remote="Remote",d.Remotex="Remotex",d.RemotexLite="RemotexLite",d.Preview="Preview",d.RemoteBoatman="RemoteBoatman";var p={},f={},m={};Object.defineProperty(m,"__esModule",{value:!0}),m.libName=m.defaultConfig=void 0;const g=o,h=a,y=c;m.defaultConfig={assetsQueryUrl:"https://render.alipay.com/p/h5data/h5config_builder-debug-h5data.json",injectCodeTempPath:(0,h.join)((0,g.tmpdir)(),"./builder_debug_output_v2"),offlineDirectoryPath:(0,h.join)(__dirname,"../offline"),readonlyDirectoryPath:(0,h.join)(__dirname,"../readonly"),assetsMapFilename:"assets_map",boatmanFilename:{[y.ECompileTargetType.Mini]:"boatman_mini",[y.ECompileTargetType.Cube]:"boatman_cube"}},m.libName="builder-debug-utils";var b=r&&r.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(a,r){function i(e){try{u(o.next(e))}catch(e){r(e)}}function s(e){try{u(o.throw(e))}catch(e){r(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((o=o.apply(e,t||[])).next())}))},C=r&&r.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(f,"__esModule",{value:!0}),f.AssetsUpdater=void 0;const P=C(t),v=C(e),T=C(n),j=m,_=c,w=(0,P.default)("json"),M=(0,P.default)("buffer"),B=`[${j.libName}]`;f.AssetsUpdater=class{constructor(e){this.context=e}updateOfflineAssetsToday(){return b(this,void 0,void 0,(function*(){!function(e){return b(this,void 0,void 0,(function*(){try{const t=yield v.default.stat(e),n=new Date(parseInt(`${t.mtimeMs}`,10));return(new Date).toLocaleDateString()===n.toLocaleDateString()}catch(e){return!1}}))}(this.context.getAssetsMapFilePath())?(console.log(`${B} local assets are outdated, start to download new debug assets`),yield this.updateOfflineAssets()):console.log(`${B} local assets are in the period of validity`)}))}updateOfflineAssets(){return b(this,void 0,void 0,(function*(){if(this.updatingTask)return this.updatingTask;this.updatingTask=this.runUpdateTask();try{yield this.updatingTask,this.updatingTask=void 0}catch(e){throw this.updatingTask=void 0,e}}))}runUpdateTask(){return b(this,void 0,void 0,(function*(){let e;try{e=yield w(j.defaultConfig.assetsQueryUrl)}catch(e){throw new Error("Failed to request online config")}yield Promise.all([this.updateLocalFile(this.context.getAssetsMapFilePath(),e.url_v2,e.integrity_v2),this.updateLocalFile(this.context.getBoatmanFilePath(_.ECompileTargetType.Mini),e.url_boatman_mini,e.integrity_boatman_mini),this.updateLocalFile(this.context.getBoatmanFilePath(_.ECompileTargetType.Cube),e.url_boatman_cube,e.integrity_boatman_cube)])}))}updateLocalFile(e,t,n){return b(this,void 0,void 0,(function*(){if(!t||!n)return void console.error(`${B} Empty key in config`);try{const t=yield v.default.readFile(e);if(T.default.createHash("sha256").update(t).digest("base64")===n)return void console.log(`${B} Local is latested`)}catch(e){}let o;console.log(`${B} Start to update local`);try{o=yield M(t)}catch(e){return void console.error(`${B} Download error ${e.message}`)}if(T.default.createHash("sha256").update(o).digest("base64")!==n)throw new Error("Failed to verify");yield v.default.writeFile(e,o),console.log(`${B} Updated`)}))}};var O={};Object.defineProperty(O,"__esModule",{value:!0}),O.composeAssetsByCompileMode=void 0;const A=c,R=m;function S(...e){return e.join("\n")}function E(e,t){return t.target===A.ECompileTargetType.Cube?{}:{workerTop:e.bugmeWPreview,webTop:`window.__BUGME_ENV__='preview';${e.bugmeRPreview}`,htmlTop:`<script>window.__BUGME_ENV__='preview';${e.bugmeRPreview}<\/script>`}}function I(e){return`<script snapshot-delete="">${null!=e?e:""}<\/script>`}function x(e,t){return{webTop:e.bugmeRRemote,htmlTop:I(e.bugmeRRemote)}}function F(e,t){return t.compilePlugin?{workerTop:e.bugmeWRemote,pluginWorkerTop:e.tyroAgent,webTop:e.bugmeRRemote,htmlTop:I(e.bugmeRRemote)}:{workerTop:S(e.tyroAgent||"",e.bugmeWRemote||""),webTop:e.bugmeRRemote,htmlTop:I(e.bugmeRRemote)}}function D(e,t){return{workerTop:S("var __BUGME_CONSOLE_ENABLE__=true;",e.bugmeWRemote||""),webTop:e.bugmeRRemote,htmlTop:I(e.bugmeRRemote)}}function k(e,t){if(t.target===A.ECompileTargetType.Cube)return{};{const n={webTop:e.bugmeRRemote,htmlTop:I(e.bugmeRRemote)};return t.compilePlugin&&(n.workerTop=e.bugmeWRemote),n}}O.composeAssetsByCompileMode=function(e,t){let n;switch(t.mode){case A.ECompileModeType.Preview:n=E;break;case A.ECompileModeType.Remote:n=x;break;case A.ECompileModeType.Remotex:n=F;break;case A.ECompileModeType.RemotexLite:n=D;break;case A.ECompileModeType.RemoteBoatman:n=k;break;default:throw new Error(`[${R.libName}] unknown compile mode: ${t.mode}`)}return n(e,t)};var $={};Object.defineProperty($,"__esModule",{value:!0}),$.BuilderDebugContext=void 0;const U=a;$.BuilderDebugContext=class{constructor(e){this.assetsQueryUrl="",this.injectCodeTempPath="",this.offlineDirectoryPath="",this.readonlyDirectoryPath="",this.assetsMapFilename="",this.assetsQueryUrl=e.assetsQueryUrl,this.injectCodeTempPath=e.injectCodeTempPath,this.offlineDirectoryPath=e.offlineDirectoryPath,this.readonlyDirectoryPath=e.readonlyDirectoryPath,this.assetsMapFilename=e.assetsMapFilename,this.boatmanFilename=e.boatmanFilename}getAssetsMapFilePath(){return(0,U.join)(this.offlineDirectoryPath,this.assetsMapFilename)}getBoatmanFilePath(e){return(0,U.join)(this.offlineDirectoryPath,this.boatmanFilename[e])}getReadonlyAssetsMapFilePath(){return(0,U.join)(this.readonlyDirectoryPath,this.assetsMapFilename)}getReadonlyBoatmanFilePath(e){return(0,U.join)(this.readonlyDirectoryPath,this.boatmanFilename[e])}};var N=r&&r.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(a,r){function i(e){try{u(o.next(e))}catch(e){r(e)}}function s(e){try{u(o.throw(e))}catch(e){r(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((o=o.apply(e,t||[])).next())}))},L=r&&r.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(p,"__esModule",{value:!0}),p.BuilderDebugClient=void 0;const q=L(e),J=c,W=f,Q=m,G=O,H=$;function K(e){const t={target:J.ECompileTargetType.Mini};return e.target&&Object.keys(J.ECompileTargetType).indexOf(e.target)>-1&&(t.target=e.target),t}function V(e){const t=Object.assign({},e);if(!t.mode||-1===Object.keys(J.ECompileModeType).indexOf(t.mode))throw new Error(`[${Q.libName}] invalid 'mode' option: ${t.mode}`);return t.target&&-1!==Object.keys(J.ECompileTargetType).indexOf(t.target)||(t.target=J.ECompileTargetType.Mini),e}p.BuilderDebugClient=class{constructor(e){this.context=new H.BuilderDebugContext(Object.assign(Object.assign({},Q.defaultConfig),e))}updateOfflineAssets(e){return N(this,void 0,void 0,(function*(){this.assetsUpdater||(this.assetsUpdater=new W.AssetsUpdater(this.context)),e.cacheToday?yield this.assetsUpdater.updateOfflineAssetsToday():yield this.assetsUpdater.updateOfflineAssets()}))}generateInjectCode(e){return N(this,void 0,void 0,(function*(){e=V(e);const t=yield this.readAssetsMap();return(0,G.composeAssetsByCompileMode)(t,e)}))}generateInjectCodeSync(e){e=V(e);const t=this.readAssetsMapSync();return(0,G.composeAssetsByCompileMode)(t,e)}readAssetsMapSync(){let e=q.default.readJSONSync(this.context.getAssetsMapFilePath(),{throws:!1});return e||(console.log(`[${Q.libName}] offline assets_map file was damaged, fallback to readonly file`),e=q.default.readJSONSync(this.context.getReadonlyAssetsMapFilePath())),e}readAssetsMap(){return N(this,void 0,void 0,(function*(){let e;try{e=yield q.default.readJSON(this.context.getAssetsMapFilePath(),{throws:!1})}catch(e){}return e||(console.log(`[${Q.libName}] offline assets_map file was damaged, fallback to readonly file`),e=yield q.default.readJSON(this.context.getReadonlyAssetsMapFilePath())),e}))}generateInjectCodePath(e){return N(this,void 0,void 0,(function*(){const t=yield this.generateInjectCode(e);return yield q.default.writeJSON(Q.defaultConfig.injectCodeTempPath,t),Q.defaultConfig.injectCodeTempPath}))}generateInjectCodePathSync(e){const t=this.generateInjectCodeSync(e);return q.default.writeJSONSync(Q.defaultConfig.injectCodeTempPath,t),Q.defaultConfig.injectCodeTempPath}getBoatmanBundlePath(e){return N(this,void 0,void 0,(function*(){const t=K(e);try{const e=this.context.getBoatmanFilePath(t.target);return yield q.default.access(e,q.default.constants.R_OK),e}catch(e){return this.context.getReadonlyBoatmanFilePath(t.target)}}))}getBoatmanBundlePathSync(e){const t=K(e);try{const e=this.context.getBoatmanFilePath(t.target);return q.default.accessSync(e,q.default.constants.R_OK),e}catch(e){return this.context.getReadonlyBoatmanFilePath(t.target)}}};var z={},X=r&&r.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(a,r){function i(e){try{u(o.next(e))}catch(e){r(e)}}function s(e){try{u(o.throw(e))}catch(e){r(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}u((o=o.apply(e,t||[])).next())}))};Object.defineProperty(z,"__esModule",{value:!0}),z.readAssetsMap=z.readAssetsMapSync=z.loadConfig=z.getBoatmanBundlePathSync=z.getBoatmanBundlePath=z.generateInjectCodePathSync=z.generateInjectCodePath=z.generateInjectCodeSync=z.generateInjectCode=z.updateInjectCodeAssets=void 0;const Y=p;let Z;function ee(){return Z||(Z=new Y.BuilderDebugClient),Z}z.updateInjectCodeAssets=function(e={}){return X(this,void 0,void 0,(function*(){return ee().updateOfflineAssets(e)}))},z.generateInjectCode=function(e){return X(this,void 0,void 0,(function*(){return ee().generateInjectCode(e)}))},z.generateInjectCodeSync=function(e){return ee().generateInjectCodeSync(e)},z.generateInjectCodePath=function(e){return X(this,void 0,void 0,(function*(){return ee().generateInjectCodePath(e)}))},z.generateInjectCodePathSync=function(e){return ee().generateInjectCodePathSync(e)},z.getBoatmanBundlePath=function(e={}){return X(this,void 0,void 0,(function*(){return ee().getBoatmanBundlePath(e)}))},z.getBoatmanBundlePathSync=function(e={}){return ee().getBoatmanBundlePathSync(e)},z.loadConfig=function(e){Z=new Y.BuilderDebugClient(e)},z.readAssetsMapSync=function(){return ee().readAssetsMapSync()},z.readAssetsMap=function(){return ee().readAssetsMap()},function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.loadConfig=e.getBoatmanBundlePathSync=e.readAssetsMap=e.readAssetsMapSync=e.getBoatmanBundlePath=e.generateInjectCodePathSync=e.generateInjectCodePath=e.generateInjectCodeSync=e.generateInjectCode=e.updateInjectCodeAssets=e.BuilderDebugClient=e.ECompileTargetType=e.ECompileModeType=void 0;var t=c;Object.defineProperty(e,"ECompileModeType",{enumerable:!0,get:function(){return t.ECompileModeType}}),Object.defineProperty(e,"ECompileTargetType",{enumerable:!0,get:function(){return t.ECompileTargetType}});var n=p;Object.defineProperty(e,"BuilderDebugClient",{enumerable:!0,get:function(){return n.BuilderDebugClient}});var o=z;Object.defineProperty(e,"updateInjectCodeAssets",{enumerable:!0,get:function(){return o.updateInjectCodeAssets}}),Object.defineProperty(e,"generateInjectCode",{enumerable:!0,get:function(){return o.generateInjectCode}}),Object.defineProperty(e,"generateInjectCodeSync",{enumerable:!0,get:function(){return o.generateInjectCodeSync}}),Object.defineProperty(e,"generateInjectCodePath",{enumerable:!0,get:function(){return o.generateInjectCodePath}}),Object.defineProperty(e,"generateInjectCodePathSync",{enumerable:!0,get:function(){return o.generateInjectCodePathSync}}),Object.defineProperty(e,"getBoatmanBundlePath",{enumerable:!0,get:function(){return o.getBoatmanBundlePath}}),Object.defineProperty(e,"readAssetsMapSync",{enumerable:!0,get:function(){return o.readAssetsMapSync}}),Object.defineProperty(e,"readAssetsMap",{enumerable:!0,get:function(){return o.readAssetsMap}}),Object.defineProperty(e,"getBoatmanBundlePathSync",{enumerable:!0,get:function(){return o.getBoatmanBundlePathSync}}),Object.defineProperty(e,"loadConfig",{enumerable:!0,get:function(){return o.loadConfig}})}(l);var te=i(l);module.exports=te;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.composeAssetsByCompileMode = void 0;
|
|
4
|
+
const interface_1 = require("./interface");
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
function concatSource(...argv) {
|
|
7
|
+
return argv.join('\n');
|
|
8
|
+
}
|
|
9
|
+
function composeAssetsByCompileMode(assetsMap, options) {
|
|
10
|
+
let composeMethod;
|
|
11
|
+
switch (options.mode) {
|
|
12
|
+
case interface_1.ECompileModeType.Preview:
|
|
13
|
+
composeMethod = composeAssets4Preview;
|
|
14
|
+
break;
|
|
15
|
+
case interface_1.ECompileModeType.Remote:
|
|
16
|
+
composeMethod = composeAssets4Remote;
|
|
17
|
+
break;
|
|
18
|
+
case interface_1.ECompileModeType.Remotex:
|
|
19
|
+
composeMethod = composeAssets4Remotex;
|
|
20
|
+
break;
|
|
21
|
+
case interface_1.ECompileModeType.RemotexLite:
|
|
22
|
+
composeMethod = composeAssets4RemotexLite;
|
|
23
|
+
break;
|
|
24
|
+
case interface_1.ECompileModeType.RemoteBoatman:
|
|
25
|
+
composeMethod = composeAssets4RemoteBoatman;
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
throw new Error(`[${config_1.libName}] unknown compile mode: ${options.mode}`);
|
|
29
|
+
}
|
|
30
|
+
return composeMethod(assetsMap, options);
|
|
31
|
+
}
|
|
32
|
+
exports.composeAssetsByCompileMode = composeAssetsByCompileMode;
|
|
33
|
+
function composeAssets4Preview(assetsMap, options) {
|
|
34
|
+
if (options.target === interface_1.ECompileTargetType.Cube) {
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return {
|
|
39
|
+
workerTop: assetsMap.bugmeWPreview,
|
|
40
|
+
webTop: `window.__BUGME_ENV__='preview';${assetsMap.bugmeRPreview}`,
|
|
41
|
+
htmlTop: `<script>window.__BUGME_ENV__='preview';${assetsMap.bugmeRPreview}</script>`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function toHtmlTop(text) {
|
|
46
|
+
return `<script snapshot-delete="">${text !== null && text !== void 0 ? text : ''}</script>`;
|
|
47
|
+
}
|
|
48
|
+
function composeAssets4Remote(assetsMap, _options) {
|
|
49
|
+
return {
|
|
50
|
+
webTop: assetsMap.bugmeRRemote,
|
|
51
|
+
htmlTop: toHtmlTop(assetsMap.bugmeRRemote),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function composeAssets4Remotex(assetsMap, options) {
|
|
55
|
+
return options.compilePlugin
|
|
56
|
+
? {
|
|
57
|
+
workerTop: assetsMap.bugmeWRemote,
|
|
58
|
+
pluginWorkerTop: assetsMap.tyroAgent,
|
|
59
|
+
webTop: assetsMap.bugmeRRemote,
|
|
60
|
+
htmlTop: toHtmlTop(assetsMap.bugmeRRemote),
|
|
61
|
+
}
|
|
62
|
+
: {
|
|
63
|
+
workerTop: concatSource(assetsMap.tyroAgent || '', assetsMap.bugmeWRemote || ''),
|
|
64
|
+
webTop: assetsMap.bugmeRRemote,
|
|
65
|
+
htmlTop: toHtmlTop(assetsMap.bugmeRRemote),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function composeAssets4RemotexLite(assetsMap, _options) {
|
|
69
|
+
return {
|
|
70
|
+
workerTop: concatSource('var __BUGME_CONSOLE_ENABLE__=true;', assetsMap.bugmeWRemote || ''),
|
|
71
|
+
webTop: assetsMap.bugmeRRemote,
|
|
72
|
+
htmlTop: toHtmlTop(assetsMap.bugmeRRemote),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function composeAssets4RemoteBoatman(assetsMap, options) {
|
|
76
|
+
if (options.target === interface_1.ECompileTargetType.Cube) {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Boatman 模式下 tinybugme 会跟随 boatman_mini 一起注入到 worker 中
|
|
81
|
+
const points = {
|
|
82
|
+
webTop: assetsMap.bugmeRRemote,
|
|
83
|
+
htmlTop: toHtmlTop(assetsMap.bugmeRRemote),
|
|
84
|
+
};
|
|
85
|
+
// 插件模式下 boatman_mini 注入到插件上下文中,tinybugme 不会生效,因此需要额外注入到宿主 worker 中
|
|
86
|
+
if (options.compilePlugin) {
|
|
87
|
+
points.workerTop = assetsMap.bugmeWRemote;
|
|
88
|
+
}
|
|
89
|
+
return points;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.libName = exports.defaultConfig = void 0;
|
|
4
|
+
const os_1 = require("os");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const interface_1 = require("./interface");
|
|
7
|
+
exports.defaultConfig = {
|
|
8
|
+
assetsQueryUrl: 'https://render.alipay.com/p/h5data/h5config_builder-debug-h5data.json',
|
|
9
|
+
injectCodeTempPath: (0, path_1.join)((0, os_1.tmpdir)(), './builder_debug_output_v2'),
|
|
10
|
+
offlineDirectoryPath: (0, path_1.join)(__dirname, '../offline'),
|
|
11
|
+
readonlyDirectoryPath: (0, path_1.join)(__dirname, '../readonly'),
|
|
12
|
+
assetsMapFilename: 'assets_map',
|
|
13
|
+
boatmanFilename: {
|
|
14
|
+
[interface_1.ECompileTargetType.Mini]: 'boatman_mini',
|
|
15
|
+
// Cube 未支持,先占位
|
|
16
|
+
[interface_1.ECompileTargetType.Cube]: 'boatman_cube',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
exports.libName = 'builder-debug-utils';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IBuilderDebugConfig, ECompileTargetType } from './interface';
|
|
2
|
+
export declare class BuilderDebugContext {
|
|
3
|
+
assetsQueryUrl: string;
|
|
4
|
+
injectCodeTempPath: string;
|
|
5
|
+
protected offlineDirectoryPath: string;
|
|
6
|
+
protected readonlyDirectoryPath: string;
|
|
7
|
+
protected assetsMapFilename: string;
|
|
8
|
+
protected boatmanFilename: Record<ECompileTargetType, string>;
|
|
9
|
+
constructor(config: IBuilderDebugConfig);
|
|
10
|
+
getAssetsMapFilePath(): string;
|
|
11
|
+
getBoatmanFilePath(target: ECompileTargetType): string;
|
|
12
|
+
getReadonlyAssetsMapFilePath(): string;
|
|
13
|
+
getReadonlyBoatmanFilePath(target: ECompileTargetType): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuilderDebugContext = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
class BuilderDebugContext {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.assetsQueryUrl = '';
|
|
8
|
+
this.injectCodeTempPath = '';
|
|
9
|
+
this.offlineDirectoryPath = '';
|
|
10
|
+
this.readonlyDirectoryPath = '';
|
|
11
|
+
this.assetsMapFilename = '';
|
|
12
|
+
this.assetsQueryUrl = config.assetsQueryUrl;
|
|
13
|
+
this.injectCodeTempPath = config.injectCodeTempPath;
|
|
14
|
+
this.offlineDirectoryPath = config.offlineDirectoryPath;
|
|
15
|
+
this.readonlyDirectoryPath = config.readonlyDirectoryPath;
|
|
16
|
+
this.assetsMapFilename = config.assetsMapFilename;
|
|
17
|
+
this.boatmanFilename = config.boatmanFilename;
|
|
18
|
+
}
|
|
19
|
+
getAssetsMapFilePath() {
|
|
20
|
+
return (0, path_1.join)(this.offlineDirectoryPath, this.assetsMapFilename);
|
|
21
|
+
}
|
|
22
|
+
getBoatmanFilePath(target) {
|
|
23
|
+
return (0, path_1.join)(this.offlineDirectoryPath, this.boatmanFilename[target]);
|
|
24
|
+
}
|
|
25
|
+
getReadonlyAssetsMapFilePath() {
|
|
26
|
+
return (0, path_1.join)(this.readonlyDirectoryPath, this.assetsMapFilename);
|
|
27
|
+
}
|
|
28
|
+
getReadonlyBoatmanFilePath(target) {
|
|
29
|
+
return (0, path_1.join)(this.readonlyDirectoryPath, this.boatmanFilename[target]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.BuilderDebugContext = BuilderDebugContext;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { ECompileModeType, ECompileTargetType, IBuilderDebugClient, IBuilderDebugClientOptions } from './interface';
|
|
2
|
+
export { BuilderDebugClient } from './sdk';
|
|
3
|
+
export { updateInjectCodeAssets, generateInjectCode, generateInjectCodeSync, generateInjectCodePath, generateInjectCodePathSync, getBoatmanBundlePath, readAssetsMapSync, readAssetsMap, getBoatmanBundlePathSync, loadConfig, } from './utils';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadConfig = exports.getBoatmanBundlePathSync = exports.readAssetsMap = exports.readAssetsMapSync = exports.getBoatmanBundlePath = exports.generateInjectCodePathSync = exports.generateInjectCodePath = exports.generateInjectCodeSync = exports.generateInjectCode = exports.updateInjectCodeAssets = exports.BuilderDebugClient = exports.ECompileTargetType = exports.ECompileModeType = void 0;
|
|
4
|
+
// export * 导出 commonjs 会多一层 default
|
|
5
|
+
var interface_1 = require("./interface");
|
|
6
|
+
Object.defineProperty(exports, "ECompileModeType", { enumerable: true, get: function () { return interface_1.ECompileModeType; } });
|
|
7
|
+
Object.defineProperty(exports, "ECompileTargetType", { enumerable: true, get: function () { return interface_1.ECompileTargetType; } });
|
|
8
|
+
var sdk_1 = require("./sdk");
|
|
9
|
+
Object.defineProperty(exports, "BuilderDebugClient", { enumerable: true, get: function () { return sdk_1.BuilderDebugClient; } });
|
|
10
|
+
var utils_1 = require("./utils");
|
|
11
|
+
Object.defineProperty(exports, "updateInjectCodeAssets", { enumerable: true, get: function () { return utils_1.updateInjectCodeAssets; } });
|
|
12
|
+
Object.defineProperty(exports, "generateInjectCode", { enumerable: true, get: function () { return utils_1.generateInjectCode; } });
|
|
13
|
+
Object.defineProperty(exports, "generateInjectCodeSync", { enumerable: true, get: function () { return utils_1.generateInjectCodeSync; } });
|
|
14
|
+
Object.defineProperty(exports, "generateInjectCodePath", { enumerable: true, get: function () { return utils_1.generateInjectCodePath; } });
|
|
15
|
+
Object.defineProperty(exports, "generateInjectCodePathSync", { enumerable: true, get: function () { return utils_1.generateInjectCodePathSync; } });
|
|
16
|
+
Object.defineProperty(exports, "getBoatmanBundlePath", { enumerable: true, get: function () { return utils_1.getBoatmanBundlePath; } });
|
|
17
|
+
Object.defineProperty(exports, "readAssetsMapSync", { enumerable: true, get: function () { return utils_1.readAssetsMapSync; } });
|
|
18
|
+
Object.defineProperty(exports, "readAssetsMap", { enumerable: true, get: function () { return utils_1.readAssetsMap; } });
|
|
19
|
+
Object.defineProperty(exports, "getBoatmanBundlePathSync", { enumerable: true, get: function () { return utils_1.getBoatmanBundlePathSync; } });
|
|
20
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return utils_1.loadConfig; } });
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export declare enum ECompileTargetType {
|
|
2
|
+
Mini = "Mini",
|
|
3
|
+
Cube = "Cube"
|
|
4
|
+
}
|
|
5
|
+
export declare enum ECompileModeType {
|
|
6
|
+
Remote = "Remote",
|
|
7
|
+
Remotex = "Remotex",
|
|
8
|
+
RemotexLite = "RemotexLite",
|
|
9
|
+
Preview = "Preview",
|
|
10
|
+
RemoteBoatman = "RemoteBoatman"
|
|
11
|
+
}
|
|
12
|
+
export interface IGenerateInjectCodeOptions {
|
|
13
|
+
mode: ECompileModeType;
|
|
14
|
+
target?: ECompileTargetType;
|
|
15
|
+
compilePlugin?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface IGetBoatmanBundleOptions {
|
|
18
|
+
target?: ECompileTargetType;
|
|
19
|
+
}
|
|
20
|
+
export interface IInjectionPoints {
|
|
21
|
+
htmlTop?: string;
|
|
22
|
+
webTop?: string;
|
|
23
|
+
workerTop?: string;
|
|
24
|
+
pluginWebTop?: string;
|
|
25
|
+
pluginWorkerTop?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IUpdateAssetsOptions {
|
|
28
|
+
cacheToday?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface IOnlineAssetsConfig {
|
|
31
|
+
integrity: string;
|
|
32
|
+
url: string;
|
|
33
|
+
integrity_v2: string;
|
|
34
|
+
url_v2: string;
|
|
35
|
+
url_boatman_mini: string;
|
|
36
|
+
integrity_boatman_mini: string;
|
|
37
|
+
url_boatman_cube?: string;
|
|
38
|
+
integrity_boatman_cube: string;
|
|
39
|
+
}
|
|
40
|
+
export interface IAssetsMap {
|
|
41
|
+
tyroAgent?: string;
|
|
42
|
+
bugmeRRemote?: string;
|
|
43
|
+
bugmeRPreview?: string;
|
|
44
|
+
bugmeWRemote?: string;
|
|
45
|
+
bugmeWPreview?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface IBuilderDebugClientOptions extends IBuilderDebugConfig {
|
|
48
|
+
}
|
|
49
|
+
export interface IBuilderDebugConfig {
|
|
50
|
+
assetsQueryUrl: string;
|
|
51
|
+
injectCodeTempPath: string;
|
|
52
|
+
offlineDirectoryPath: string;
|
|
53
|
+
readonlyDirectoryPath: string;
|
|
54
|
+
assetsMapFilename: string;
|
|
55
|
+
boatmanFilename: Record<ECompileTargetType, string>;
|
|
56
|
+
}
|
|
57
|
+
export interface IBuilderDebugClient {
|
|
58
|
+
/**
|
|
59
|
+
* 检查更新本地 offline 目录下的资源文件
|
|
60
|
+
*/
|
|
61
|
+
updateOfflineAssets(options: IUpdateAssetsOptions): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* 生成构建器消费的 InjectCode 注入点对象
|
|
64
|
+
*/
|
|
65
|
+
generateInjectCode(options: IGenerateInjectCodeOptions): Promise<IInjectionPoints>;
|
|
66
|
+
/**
|
|
67
|
+
* generateInjectCode 同步方法
|
|
68
|
+
*/
|
|
69
|
+
generateInjectCodeSync(options: IGenerateInjectCodeOptions): IInjectionPoints;
|
|
70
|
+
/**
|
|
71
|
+
* 生成构建器消费的 InjectCode JSON 文件,并返回路径
|
|
72
|
+
*/
|
|
73
|
+
generateInjectCodePath(options: IGenerateInjectCodeOptions): Promise<string>;
|
|
74
|
+
/**
|
|
75
|
+
* generateInjectCodePath 同步方法
|
|
76
|
+
*/
|
|
77
|
+
generateInjectCodePathSync(options: IGenerateInjectCodeOptions): string;
|
|
78
|
+
/**
|
|
79
|
+
* 获取本地 boatman 文件资源路径
|
|
80
|
+
*/
|
|
81
|
+
getBoatmanBundlePath(options: IGetBoatmanBundleOptions): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* getBoatmanBundlePath 同步方法
|
|
84
|
+
*/
|
|
85
|
+
getBoatmanBundlePathSync(options: IGetBoatmanBundleOptions): string;
|
|
86
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ECompileModeType = exports.ECompileTargetType = void 0;
|
|
4
|
+
var ECompileTargetType;
|
|
5
|
+
(function (ECompileTargetType) {
|
|
6
|
+
ECompileTargetType["Mini"] = "Mini";
|
|
7
|
+
ECompileTargetType["Cube"] = "Cube";
|
|
8
|
+
})(ECompileTargetType = exports.ECompileTargetType || (exports.ECompileTargetType = {}));
|
|
9
|
+
var ECompileModeType;
|
|
10
|
+
(function (ECompileModeType) {
|
|
11
|
+
ECompileModeType["Remote"] = "Remote";
|
|
12
|
+
ECompileModeType["Remotex"] = "Remotex";
|
|
13
|
+
ECompileModeType["RemotexLite"] = "RemotexLite";
|
|
14
|
+
ECompileModeType["Preview"] = "Preview";
|
|
15
|
+
ECompileModeType["RemoteBoatman"] = "RemoteBoatman";
|
|
16
|
+
})(ECompileModeType = exports.ECompileModeType || (exports.ECompileModeType = {}));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IBuilderDebugClient, IBuilderDebugClientOptions, IUpdateAssetsOptions, IGenerateInjectCodeOptions, IGetBoatmanBundleOptions, IAssetsMap } from './interface';
|
|
2
|
+
import { AssetsUpdater } from './updater';
|
|
3
|
+
import { BuilderDebugContext } from './context';
|
|
4
|
+
export declare class BuilderDebugClient implements IBuilderDebugClient {
|
|
5
|
+
protected assetsUpdater: AssetsUpdater;
|
|
6
|
+
protected context: BuilderDebugContext;
|
|
7
|
+
constructor(options?: IBuilderDebugClientOptions);
|
|
8
|
+
updateOfflineAssets(options: IUpdateAssetsOptions): Promise<void>;
|
|
9
|
+
generateInjectCode(options: IGenerateInjectCodeOptions): Promise<import("./interface").IInjectionPoints>;
|
|
10
|
+
/**
|
|
11
|
+
* generateInjectCode 同步方法
|
|
12
|
+
*/
|
|
13
|
+
generateInjectCodeSync(options: IGenerateInjectCodeOptions): import("./interface").IInjectionPoints;
|
|
14
|
+
readAssetsMapSync(): IAssetsMap;
|
|
15
|
+
readAssetsMap(): Promise<IAssetsMap>;
|
|
16
|
+
/**
|
|
17
|
+
* 生成构建器消费的 InjectCode JSON 文件,并返回路径
|
|
18
|
+
*/
|
|
19
|
+
generateInjectCodePath(options: IGenerateInjectCodeOptions): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* generateInjectCodePath 同步方法
|
|
22
|
+
*/
|
|
23
|
+
generateInjectCodePathSync(options: IGenerateInjectCodeOptions): string;
|
|
24
|
+
/**
|
|
25
|
+
* 获取本地 boatman 文件资源路径
|
|
26
|
+
*/
|
|
27
|
+
getBoatmanBundlePath(options: IGetBoatmanBundleOptions): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* getBoatmanBundlePath 同步方法
|
|
30
|
+
*/
|
|
31
|
+
getBoatmanBundlePathSync(options: IGetBoatmanBundleOptions): string;
|
|
32
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.BuilderDebugClient = void 0;
|
|
17
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
const interface_1 = require("./interface");
|
|
19
|
+
const updater_1 = require("./updater");
|
|
20
|
+
const config_1 = require("./config");
|
|
21
|
+
const compose_1 = require("./compose");
|
|
22
|
+
const context_1 = require("./context");
|
|
23
|
+
class BuilderDebugClient {
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.context = new context_1.BuilderDebugContext(Object.assign(Object.assign({}, config_1.defaultConfig), options));
|
|
26
|
+
}
|
|
27
|
+
updateOfflineAssets(options) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
if (!this.assetsUpdater) {
|
|
30
|
+
this.assetsUpdater = new updater_1.AssetsUpdater(this.context);
|
|
31
|
+
}
|
|
32
|
+
if (options.cacheToday) {
|
|
33
|
+
yield this.assetsUpdater.updateOfflineAssetsToday();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
yield this.assetsUpdater.updateOfflineAssets();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
generateInjectCode(options) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
options = getInjectCodeOptions(options);
|
|
43
|
+
const assetsMap = yield this.readAssetsMap();
|
|
44
|
+
return (0, compose_1.composeAssetsByCompileMode)(assetsMap, options);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* generateInjectCode 同步方法
|
|
49
|
+
*/
|
|
50
|
+
generateInjectCodeSync(options) {
|
|
51
|
+
options = getInjectCodeOptions(options);
|
|
52
|
+
const assetsMap = this.readAssetsMapSync();
|
|
53
|
+
return (0, compose_1.composeAssetsByCompileMode)(assetsMap, options);
|
|
54
|
+
}
|
|
55
|
+
readAssetsMapSync() {
|
|
56
|
+
let localJSON = fs_extra_1.default.readJSONSync(this.context.getAssetsMapFilePath(), { throws: false });
|
|
57
|
+
if (!localJSON) {
|
|
58
|
+
console.log(`[${config_1.libName}] offline assets_map file was damaged, fallback to readonly file`);
|
|
59
|
+
// 避免文件损坏,readonly/assets_map 做兜底
|
|
60
|
+
localJSON = fs_extra_1.default.readJSONSync(this.context.getReadonlyAssetsMapFilePath());
|
|
61
|
+
}
|
|
62
|
+
return localJSON;
|
|
63
|
+
}
|
|
64
|
+
readAssetsMap() {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
let localJSON;
|
|
67
|
+
try {
|
|
68
|
+
localJSON = yield fs_extra_1.default.readJSON(this.context.getAssetsMapFilePath(), { throws: false });
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// throws if file is not found
|
|
72
|
+
}
|
|
73
|
+
if (!localJSON) {
|
|
74
|
+
console.log(`[${config_1.libName}] offline assets_map file was damaged, fallback to readonly file`);
|
|
75
|
+
// 避免文件损坏,readonly/assets_map 做兜底
|
|
76
|
+
localJSON = yield fs_extra_1.default.readJSON(this.context.getReadonlyAssetsMapFilePath());
|
|
77
|
+
}
|
|
78
|
+
return localJSON;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 生成构建器消费的 InjectCode JSON 文件,并返回路径
|
|
83
|
+
*/
|
|
84
|
+
generateInjectCodePath(options) {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
const injectCode = yield this.generateInjectCode(options);
|
|
87
|
+
yield fs_extra_1.default.writeJSON(config_1.defaultConfig.injectCodeTempPath, injectCode);
|
|
88
|
+
return config_1.defaultConfig.injectCodeTempPath;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* generateInjectCodePath 同步方法
|
|
93
|
+
*/
|
|
94
|
+
generateInjectCodePathSync(options) {
|
|
95
|
+
const injectCode = this.generateInjectCodeSync(options);
|
|
96
|
+
fs_extra_1.default.writeJSONSync(config_1.defaultConfig.injectCodeTempPath, injectCode);
|
|
97
|
+
return config_1.defaultConfig.injectCodeTempPath;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 获取本地 boatman 文件资源路径
|
|
101
|
+
*/
|
|
102
|
+
getBoatmanBundlePath(options) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const opt = getGetBoatmanBundleOptions(options);
|
|
105
|
+
// 若文件不存在降级到 readonly 备份
|
|
106
|
+
try {
|
|
107
|
+
const offlineFile = this.context.getBoatmanFilePath(opt.target);
|
|
108
|
+
yield fs_extra_1.default.access(offlineFile, fs_extra_1.default.constants.R_OK);
|
|
109
|
+
return offlineFile;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return this.context.getReadonlyBoatmanFilePath(opt.target);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* getBoatmanBundlePath 同步方法
|
|
118
|
+
*/
|
|
119
|
+
getBoatmanBundlePathSync(options) {
|
|
120
|
+
const opt = getGetBoatmanBundleOptions(options);
|
|
121
|
+
try {
|
|
122
|
+
const offlineFile = this.context.getBoatmanFilePath(opt.target);
|
|
123
|
+
fs_extra_1.default.accessSync(offlineFile, fs_extra_1.default.constants.R_OK);
|
|
124
|
+
return offlineFile;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return this.context.getReadonlyBoatmanFilePath(opt.target);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.BuilderDebugClient = BuilderDebugClient;
|
|
132
|
+
function getGetBoatmanBundleOptions(options) {
|
|
133
|
+
const result = {
|
|
134
|
+
target: interface_1.ECompileTargetType.Mini,
|
|
135
|
+
};
|
|
136
|
+
if (options.target && Object.keys(interface_1.ECompileTargetType).indexOf(options.target) > -1) {
|
|
137
|
+
result.target = options.target;
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
function getInjectCodeOptions(options) {
|
|
142
|
+
const opt = Object.assign({}, options);
|
|
143
|
+
if (!opt.mode || Object.keys(interface_1.ECompileModeType).indexOf(opt.mode) === -1) {
|
|
144
|
+
throw new Error(`[${config_1.libName}] invalid 'mode' option: ${opt.mode}`);
|
|
145
|
+
}
|
|
146
|
+
if (!opt.target || Object.keys(interface_1.ECompileTargetType).indexOf(opt.target) === -1) {
|
|
147
|
+
opt.target = interface_1.ECompileTargetType.Mini;
|
|
148
|
+
}
|
|
149
|
+
return options;
|
|
150
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BuilderDebugContext } from './context';
|
|
2
|
+
export declare class AssetsUpdater {
|
|
3
|
+
protected context: BuilderDebugContext;
|
|
4
|
+
protected updatingTask: Promise<void> | undefined;
|
|
5
|
+
constructor(context: BuilderDebugContext);
|
|
6
|
+
/**
|
|
7
|
+
* 检查本地资源文件是否过期并进行更新,每日只更新一次
|
|
8
|
+
*/
|
|
9
|
+
updateOfflineAssetsToday(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* 更新本地资源文件
|
|
12
|
+
*/
|
|
13
|
+
updateOfflineAssets(): Promise<void>;
|
|
14
|
+
protected runUpdateTask(): Promise<void>;
|
|
15
|
+
protected updateLocalFile(filePath: string, url: string | undefined, integrity: string | undefined): Promise<void>;
|
|
16
|
+
}
|