@shijiu/jsview 2.2.373 → 2.2.426-test.0
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/dom/bin/DroidSansFallback.ttf +0 -0
- package/dom/bin/NotoColorEmoji.ttf +0 -0
- package/dom/bin/jsview-dom-browser-engine-core.min.js +2 -0
- package/dom/bin/jsview-dom-browser-engine-modules.min.js +2 -0
- package/dom/bin/jsview-dom-browser-forge.1385.f80e.wasm +0 -0
- package/dom/bin/jsview-dom-browser-forge.min.js +1 -0
- package/dom/bin/jsview-dom-browser-forge.worker.min.js +1 -0
- package/dom/bin/jsview-dom-browser.min.js +1 -1
- package/dom/bin/jsview-dom-native.min.js +1 -1
- package/dom/bin/jsview-engine-js-browser.min.js +1 -22
- package/dom/bin/jsview-engine-js-native.min.js +1 -1
- package/dom/bin/jsview-forge-define.min.js +1 -1
- package/dom/index.mjs +8 -10
- package/dom/target_core_revision.mjs +5 -2
- package/loader/jsv-core-api/jsview-core-api-glue.js +74 -0
- package/loader/jsv-core-api/wasm/backgroundtask.js +66 -0
- package/loader/jsv-core-api/wasm/core-api.js +206 -0
- package/loader/jsview-config.js +4 -1
- package/loader/jsview-loader.js +66 -77
- package/loader/jsview-main.mjs +1 -1
- package/package.json +1 -1
- package/patches/node_modules/vite/dist/node/jsview-vite-extension.js +67 -6
- package/shijiu-jsview-0.0.0.tgz +0 -0
- package/tools/https-server-config/cert.pem +61 -0
- package/tools/https-server-config/key.pem +27 -0
- package/tools/https-server-config/serve.config.json +16 -0
- package/tools/jsview-common.mjs +86 -3
- package/tools/jsview-post-build.mjs +99 -0
- package/tools/jsview-post-install.mjs +7 -4
- package/tools/jsview-retrieve-sourcemap.mjs +64 -49
- package/tools/jsview-run-tool.mjs +53 -3
package/loader/jsview-config.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import appConfig from "/src/appConfig/app.config.mjs";
|
|
2
2
|
import jsviewVendorConfig from "/src/appConfig/jsview.config.mjs";
|
|
3
3
|
import { PERMISSION } from "/src/appConfig/permission.js";
|
|
4
|
-
|
|
5
4
|
import JsViewLoader from './jsview-loader.js';
|
|
5
|
+
import loadJsvCoreApi from "./jsv-core-api/jsview-core-api-glue.js"
|
|
6
|
+
|
|
7
|
+
// 加载JsvCoreApi
|
|
8
|
+
window.JsvCoreApi = loadJsvCoreApi();
|
|
6
9
|
|
|
7
10
|
let loader = JsViewLoader;
|
|
8
11
|
// 根据JsViewConfig, 判断厂商是否设置了使用远程loader启动
|
package/loader/jsview-loader.js
CHANGED
|
@@ -2,6 +2,10 @@ import JsViewDefConfig from "./jsview.config.default"
|
|
|
2
2
|
import { loadJsViewDomAsync, loadEngineJs } from '../dom'
|
|
3
3
|
import TargetRevision from "../dom/target_core_revision"
|
|
4
4
|
|
|
5
|
+
function isNoWasm() {
|
|
6
|
+
return (window.JsvCoreApi.Platform != "pc-wasm");
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
const CYCLE_TIME = 10000;
|
|
6
10
|
const BLOCK_CHECK_TIME = 5000; // + CYCLE_TIME, 总计15秒
|
|
7
11
|
class JsThreadBlockTester {
|
|
@@ -12,7 +16,7 @@ class JsThreadBlockTester {
|
|
|
12
16
|
const preTimestamp = JsThreadBlockTester.#timestamp;
|
|
13
17
|
JsThreadBlockTester.#timestamp = Date.now();
|
|
14
18
|
const gap = JsThreadBlockTester.#timestamp - preTimestamp;
|
|
15
|
-
window.
|
|
19
|
+
window.JsvCoreApi.logD(JsThreadBlockTester.#TAG, `check, pre: ${preTimestamp}, cur: ${JsThreadBlockTester.#timestamp}, cur-pre: ${gap}`);
|
|
16
20
|
if (gap > CYCLE_TIME + BLOCK_CHECK_TIME) {
|
|
17
21
|
console.warn(JsThreadBlockTester.#TAG, `js thread blocked, preTime: ${preTimestamp}, curTime: ${JsThreadBlockTester.#timestamp}, curTime-preTime: ${gap}`);
|
|
18
22
|
}
|
|
@@ -32,7 +36,7 @@ class JsThreadBlockTester {
|
|
|
32
36
|
|
|
33
37
|
static init() {
|
|
34
38
|
JsThreadBlockTester.#start();
|
|
35
|
-
window.
|
|
39
|
+
window.JsvCoreApi.onVisibilityChange(JsThreadBlockTester.#onVisibleChange);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
static #start() {
|
|
@@ -60,37 +64,41 @@ export default class JsViewLoader {
|
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
async initJsViewEnv(appName, onLoaded, permission) {
|
|
67
|
+
let onForgeAppReady = () => {
|
|
68
|
+
onLoaded?.();
|
|
69
|
+
}
|
|
70
|
+
|
|
63
71
|
// 加载嵌入到 dom 模块中的 EngineJs
|
|
64
72
|
await loadEngineJs(
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
isNoWasm(),
|
|
74
|
+
(activityManager) => {
|
|
75
|
+
console.log("JsView Loader: On RenderBridge ready.");
|
|
76
|
+
this.#forgeActivityManager = activityManager;
|
|
77
|
+
this.#tryStartForgeApp(onForgeAppReady);
|
|
78
|
+
},
|
|
67
79
|
this.#makeForgeDesignedMap.bind(this)
|
|
68
80
|
);
|
|
69
81
|
|
|
70
82
|
// 加载JsView Dom
|
|
71
|
-
const jsviewDom = await loadJsViewDomAsync(
|
|
83
|
+
const jsviewDom = await loadJsViewDomAsync(isNoWasm());
|
|
72
84
|
|
|
73
85
|
// 加载ForgeFront
|
|
74
86
|
jsviewDom.InitEnv();
|
|
75
87
|
|
|
76
|
-
|
|
77
|
-
this.#forgeAppClass = jsviewDom.NativeForgeApp;
|
|
88
|
+
this.#forgeAppClass = jsviewDom.ForgeAppClass;
|
|
78
89
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
} else {
|
|
85
|
-
this.#forgeAppClass = jsviewDom.BrowserForgeApp;
|
|
90
|
+
// /static/js/: (可选配置)填写main.js或者bundle.js相对于index.html的相对位置,
|
|
91
|
+
// 用于image / import.then的相对寻址
|
|
92
|
+
if (typeof this.#config.jsviewConfig.jsRelativeDepth == "number") {
|
|
93
|
+
window.location?.jsvSetRelativeDepth?.(this.#config.jsviewConfig.jsRelativeDepth)
|
|
86
94
|
}
|
|
87
95
|
|
|
88
|
-
this.#loadJsViewEnvAsync(appName,
|
|
96
|
+
this.#loadJsViewEnvAsync(appName, permission);
|
|
89
97
|
|
|
90
98
|
// 环境启动后,动态加载React框架和main
|
|
91
99
|
this.#checkEngineVersion();
|
|
92
100
|
this.#jsviewInited = true;
|
|
93
|
-
this.#tryStartForgeApp();
|
|
101
|
+
this.#tryStartForgeApp(onForgeAppReady);
|
|
94
102
|
|
|
95
103
|
console.log("JsView Loader: Load done. AppName=" + appName);
|
|
96
104
|
}
|
|
@@ -118,73 +126,57 @@ export default class JsViewLoader {
|
|
|
118
126
|
return target;
|
|
119
127
|
}
|
|
120
128
|
|
|
121
|
-
#loadJsViewEnvAsync(appName,
|
|
129
|
+
#loadJsViewEnvAsync(appName, permission) {
|
|
122
130
|
console.log("StartApp...");
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
if (appName) {
|
|
133
|
+
window.JsvCoreApi.setMiniAppPermissionInfo(JSON.stringify(permission));
|
|
134
|
+
window.JsvCoreApi.notifyAppName(appName);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// (可选配置)按键接受的扩展,例如将静音按键(JAVA键值为164)映射为JS键值20001,PS:注意"164"的引号
|
|
138
|
+
window.JsvCoreApi.addKeysMap(this.#config.vendorConfig.bindKeys);
|
|
139
|
+
|
|
140
|
+
// (可选配置)localStorage支持
|
|
141
|
+
let storageDomain = this.#config.jsviewConfig.localStorage.domain;
|
|
142
|
+
if (!storageDomain || storageDomain === "default") {
|
|
143
|
+
// 兼容历史版本出现的default字符串设置
|
|
144
|
+
storageDomain = appName; // null/default场景,不和其他应用共享localStorage, 也规避了考虑同名item问题
|
|
145
|
+
} else if (storageDomain === "follow-url") {
|
|
146
|
+
if (window.location.protocol == "file:") {
|
|
147
|
+
// file方式加载,使用appName
|
|
148
|
+
storageDomain = appName;
|
|
149
|
+
console.warn("Storage domain follow-url not support file://");
|
|
150
|
+
} else {
|
|
151
|
+
storageDomain = window.location.hostname;
|
|
130
152
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
let storageDomain = this.#config.jsviewConfig.localStorage.domain;
|
|
136
|
-
if (!storageDomain || storageDomain === "default") {
|
|
137
|
-
// 兼容历史版本出现的default字符串设置
|
|
138
|
-
storageDomain = appName; // null/default场景,不和其他应用共享localStorage, 也规避了考虑同名item问题
|
|
139
|
-
} else if (storageDomain === "follow-url") {
|
|
140
|
-
if (window.location.protocol == "file:") {
|
|
141
|
-
// file方式加载,使用appName
|
|
153
|
+
const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
|
|
154
|
+
const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
|
|
155
|
+
if (ipv4Regex.test(storageDomain) || ipv6Regex.test(storageDomain)) {
|
|
156
|
+
// ip形式, 不能作为合格domain, 使用appName作为domain
|
|
142
157
|
storageDomain = appName;
|
|
143
|
-
console.warn("Storage domain follow-url not support
|
|
144
|
-
} else {
|
|
145
|
-
storageDomain = window.location.hostname;
|
|
146
|
-
|
|
147
|
-
const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
|
|
148
|
-
const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
|
|
149
|
-
if (ipv4Regex.test(storageDomain) || ipv6Regex.test(storageDomain)) {
|
|
150
|
-
// ip形式, 不能作为合格domain, 使用appName作为domain
|
|
151
|
-
storageDomain = appName;
|
|
152
|
-
console.warn("Storage domain follow-url not support host with ip");
|
|
153
|
-
}
|
|
158
|
+
console.warn("Storage domain follow-url not support host with ip");
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const localStorageKeys = this.#config.jsviewConfig.localStorage.presetKeys;
|
|
160
|
-
window.JsView.enableStorageNames(...localStorageKeys);
|
|
161
|
+
}
|
|
162
|
+
console.log(`Storage domain [${storageDomain}]`);
|
|
163
|
+
window.JsvCoreApi.setStorageDomain(storageDomain); // Domain为app包名
|
|
161
164
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (cookiesDomain) {
|
|
165
|
-
console.log("Enable cookie for domain " + cookiesDomain);
|
|
166
|
-
window.JsView.setCookieDomain?.(cookiesDomain);
|
|
167
|
-
}
|
|
165
|
+
const localStorageKeys = this.#config.jsviewConfig.localStorage.presetKeys;
|
|
166
|
+
window.JsvCoreApi.enableStorageNames(...localStorageKeys);
|
|
168
167
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.#forgeAppClass.SetRender(function () {
|
|
175
|
-
onLoaded();
|
|
176
|
-
})
|
|
168
|
+
// (可选设置)cookies的支持
|
|
169
|
+
const cookiesDomain = this.#config.jsviewConfig.cookies?.domain;
|
|
170
|
+
if (cookiesDomain) {
|
|
171
|
+
console.log("Enable cookie for domain " + cookiesDomain);
|
|
172
|
+
window.JsvCoreApi.setCookieDomain(cookiesDomain);
|
|
177
173
|
}
|
|
178
174
|
}
|
|
179
175
|
|
|
180
176
|
#checkEngineVersion() {
|
|
181
|
-
if (!window.JsView) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
177
|
// 检查配套引擎的版本
|
|
186
|
-
if (window.
|
|
187
|
-
console.warn(`Warning: JsView Engine version miss matched, some effect will be lost or crash!! current using core=${window.
|
|
178
|
+
if (window.JsvCoreApi.CodeRevision !== TargetRevision.CoreRevision /* Native引擎版本(由APK启动参数 CORE 决定) */) {
|
|
179
|
+
console.warn(`Warning: JsView Engine version miss matched, some effect will be lost or crash!! current using core=${window.JsvCoreApi.CodeRevision} (but core should be ${TargetRevision.CoreRevision})`);
|
|
188
180
|
}
|
|
189
181
|
}
|
|
190
182
|
|
|
@@ -220,13 +212,7 @@ export default class JsViewLoader {
|
|
|
220
212
|
return designMap;
|
|
221
213
|
}
|
|
222
214
|
|
|
223
|
-
#
|
|
224
|
-
console.log("JsView Loader: Run forge app.");
|
|
225
|
-
this.#forgeActivityManager = activityManager;
|
|
226
|
-
this.#tryStartForgeApp();
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
#tryStartForgeApp() {
|
|
215
|
+
#tryStartForgeApp(onForgeAppReady) {
|
|
230
216
|
if (!this.#forgeActivityManager ||
|
|
231
217
|
this.#jsviewInited == false) {
|
|
232
218
|
return;
|
|
@@ -235,6 +221,9 @@ export default class JsViewLoader {
|
|
|
235
221
|
console.log("JsView Loader: Start forge app.");
|
|
236
222
|
// eslint-disable-next-line new-cap
|
|
237
223
|
this.#forgeApp = new this.#forgeAppClass(this.#forgeActivityManager);
|
|
224
|
+
|
|
225
|
+
// Forge app创建完成
|
|
226
|
+
onForgeAppReady();
|
|
238
227
|
}
|
|
239
228
|
|
|
240
229
|
#config = JsViewDefConfig;
|
package/loader/jsview-main.mjs
CHANGED
|
@@ -19,7 +19,7 @@ async function main() {
|
|
|
19
19
|
try {
|
|
20
20
|
await import('/src/main.tsx');
|
|
21
21
|
} finally {
|
|
22
|
-
window.
|
|
22
|
+
window.JsvCoreApi.onMainTsDone(); // 通知Java, 此时app首次渲染执行完毕
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
jsviewLoader.initJsViewEnv(appConfig.AppName, onInitJsViewEnv, PERMISSION);
|
package/package.json
CHANGED
|
@@ -2,6 +2,7 @@ import { defineConfig } from 'vite'
|
|
|
2
2
|
import fs from 'fs'
|
|
3
3
|
import path from 'path'
|
|
4
4
|
// import fullReload from 'vite-plugin-full-reload';
|
|
5
|
+
// import wasm from "vite-plugin-wasm";
|
|
5
6
|
|
|
6
7
|
// https://vitejs.dev/config/
|
|
7
8
|
const jsviewConfig = defineConfig({
|
|
@@ -23,10 +24,10 @@ const jsviewConfig = defineConfig({
|
|
|
23
24
|
polyfill: false
|
|
24
25
|
},
|
|
25
26
|
rollupOptions: {
|
|
27
|
+
onwarn: onRollupWarning,
|
|
26
28
|
output: {
|
|
27
|
-
assetFileNames:
|
|
28
|
-
chunkFileNames:
|
|
29
|
-
// chunkFileNames: 'js/[name].[hash].js',
|
|
29
|
+
assetFileNames: getFileName,
|
|
30
|
+
chunkFileNames: getFileName,
|
|
30
31
|
entryFileNames: 'js/main.jsv.[hash].js',
|
|
31
32
|
format: 'esm',
|
|
32
33
|
manualChunks: {
|
|
@@ -42,7 +43,7 @@ const jsviewConfig = defineConfig({
|
|
|
42
43
|
},
|
|
43
44
|
plugins: [
|
|
44
45
|
{
|
|
45
|
-
name: 'remove-bangs',
|
|
46
|
+
name: 'vite-plugin-remove-bangs',
|
|
46
47
|
renderChunk(code) { return {
|
|
47
48
|
code: code.replace(/^\/\/!/g, '//').replace(/^\/\*!/g, '/*'),
|
|
48
49
|
map: null,
|
|
@@ -72,9 +73,10 @@ const jsviewConfig = defineConfig({
|
|
|
72
73
|
'jsview-vue-samples',
|
|
73
74
|
],
|
|
74
75
|
},
|
|
75
|
-
|
|
76
|
+
plugins: [
|
|
76
77
|
// fullReload('node_modules/@shijiu/**/*'),
|
|
77
|
-
|
|
78
|
+
// wasm(),
|
|
79
|
+
],
|
|
78
80
|
resolve: {
|
|
79
81
|
alias: {
|
|
80
82
|
// 'jsview': path.resolve(process.cwd(), 'node_modules/@shijiu/jsview'),
|
|
@@ -87,7 +89,12 @@ const jsviewConfig = defineConfig({
|
|
|
87
89
|
preserveSymlinks: true
|
|
88
90
|
},
|
|
89
91
|
server: {
|
|
92
|
+
headers: { // 启用浏览器SharedArrayBuffer,webassmbly的thread用
|
|
93
|
+
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
94
|
+
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
95
|
+
},
|
|
90
96
|
host: true,
|
|
97
|
+
https: process.env['JSVIEW_ENABLE_HTTPS'] ? getHttpsConfig() : false,
|
|
91
98
|
open: !process.env['JSVIEW_DISABLE_OPEN_BROWSER'] && process.platform === "darwin",
|
|
92
99
|
watch: {
|
|
93
100
|
ignored: [
|
|
@@ -95,6 +102,16 @@ const jsviewConfig = defineConfig({
|
|
|
95
102
|
],
|
|
96
103
|
}
|
|
97
104
|
},
|
|
105
|
+
worker: {
|
|
106
|
+
format: 'esm',
|
|
107
|
+
rollupOptions: {
|
|
108
|
+
output: {
|
|
109
|
+
assetFileNames: getFileName,
|
|
110
|
+
chunkFileNames: getFileName,
|
|
111
|
+
entryFileNames: getFileName,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
98
115
|
});
|
|
99
116
|
|
|
100
117
|
function getModuleDir() {
|
|
@@ -135,6 +152,50 @@ function ensureFramework(originConfig) {
|
|
|
135
152
|
return framework;
|
|
136
153
|
}
|
|
137
154
|
|
|
155
|
+
function getFileName(chunkInfo) {
|
|
156
|
+
if(chunkInfo.name.endsWith('.css')) {
|
|
157
|
+
return 'css/[name].[hash].css';
|
|
158
|
+
} else if(chunkInfo.name.endsWith('.ttf')) {
|
|
159
|
+
return 'assets/[name].ttf';
|
|
160
|
+
} else if(chunkInfo.name.endsWith('.wasm')) {
|
|
161
|
+
return 'js/[name].wasm';
|
|
162
|
+
} else if(chunkInfo.type == 'chunk') {
|
|
163
|
+
return (process.env['JSVIEW_KEEP_CHUNKNAME'] ? 'js/[name].[hash].js' : 'js/chunk.jsv2.[hash].js');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return 'assets/[name].[hash].[ext]'
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function onRollupWarning(warning, defaultHandler) {
|
|
170
|
+
if (warning.code === 'FILE_NAME_CONFLICT') {
|
|
171
|
+
if(warning.message.includes('jsview-dom-browser-forge')
|
|
172
|
+
&& warning.message.includes('.wasm')) {
|
|
173
|
+
console.info('\nJsView Info: Ignore warning', warning.message)
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
} else if (warning.code === 'EVAL') {
|
|
177
|
+
if(warning.message.includes('mock.js')) {
|
|
178
|
+
console.info('\nJsView Info: Ignore warning', warning.message)
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
defaultHandler(warning);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function getHttpsConfig() {
|
|
187
|
+
const configDir = path.resolve(getModuleDir(), '@shijiu/jsview/tools/https-server-config');
|
|
188
|
+
const certFilePath = path.resolve(configDir, 'cert.pem');
|
|
189
|
+
const keyFilePath = path.resolve(configDir, 'key.pem');
|
|
190
|
+
|
|
191
|
+
return {
|
|
192
|
+
cert: fs.readFileSync(certFilePath),
|
|
193
|
+
key: fs.readFileSync(keyFilePath),
|
|
194
|
+
maxVersion: 'TLSv1.2',
|
|
195
|
+
minVersion: 'TLSv1',
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
138
199
|
function jsvCreateJsViewViteConfig(originConfig) {
|
|
139
200
|
let aliasJsView;
|
|
140
201
|
|
|
Binary file
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
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
|
|
34
|
+
-----END CERTIFICATE-----
|
|
35
|
+
-----BEGIN CERTIFICATE-----
|
|
36
|
+
MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh
|
|
37
|
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
|
38
|
+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
|
39
|
+
MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT
|
|
40
|
+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
|
41
|
+
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
|
|
42
|
+
MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE
|
|
43
|
+
eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv
|
|
44
|
+
NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch
|
|
45
|
+
QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn
|
|
46
|
+
NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP
|
|
47
|
+
ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI
|
|
48
|
+
lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf
|
|
49
|
+
BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw
|
|
50
|
+
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
|
|
51
|
+
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
|
|
52
|
+
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
|
|
53
|
+
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
|
|
54
|
+
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
|
|
55
|
+
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ
|
|
56
|
+
L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi
|
|
57
|
+
98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe
|
|
58
|
+
xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN
|
|
59
|
+
GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2
|
|
60
|
+
n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg==
|
|
61
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEowIBAAKCAQEAp7m9ocHPmt+oXOV8EYPRgAznJNPpRUQMFj8ZKEyhdobnFQwE
|
|
3
|
+
jNlu+YlwJD2jjlkpKBrGwgUqU73VtZZkA6TMEmkD6ZOnGnkIt1wEK/ApuhMBaBty
|
|
4
|
+
o5VyYEA2JjEaxPgjH6+EpSeLBvpkjDxzjYBXDwQwfvYaDAvRcas/gPCFHvraSFSM
|
|
5
|
+
sWgtiZCOxT7VixsFGalZsd6sJ24vHaPOks6eTmSkHogVUiX74ag6qfavtkPtJLY7
|
|
6
|
+
18tq7umut1fISgOUSzt13KUHz68jPn1+FP9K73hfaYKNCnfTar8d51YIJRySnpCN
|
|
7
|
+
bKedbjK7/s1uEK7Lg2Llsnm5kze0WhYhN5CAqQIDAQABAoIBADntueQjVzurYa/s
|
|
8
|
+
BqTZ/UKXskGS+y9UKESKuHqltOKGB0vKocuv0VdYM6Ygr9ubSc6zKNCcDhlsKGKW
|
|
9
|
+
NabYhS8anCJRP9ax1OPXYQ133kGJDORTDo4XMLCznMAmF5POC/uGmG6eMLNRSebx
|
|
10
|
+
fgtyNx9VmBZRk39zmXwD5GP5LlEbTQ70MB56DdpQPOe8UZgT3aITZTRhGxwk9Z7N
|
|
11
|
+
YdhJLVRyS3lufnLxBgj+VFMmqViBgWPfi/T73V1tg+6i/n+MHVPY8XprqiioO3yE
|
|
12
|
+
FPDe4+5AciimTg9QrlqF7ZmyRx9c0zdxs2aDewPXovp4fmyO91I81f/XbxwR4Hg+
|
|
13
|
+
WbHUZ60CgYEA4sHLxidVhQD6wZrbmbjY3zgHsAtpKqst+xiRD73Uo4UM5B7A3+bo
|
|
14
|
+
v5HJx/PX+Ax4O8PZz8ghGS+J8xXXAAHdnBetYT5YniOfkFw/XDl7y1IazY+74k5e
|
|
15
|
+
Wew+mdELKRJtW/3ylFDcsHMxy9aA+jNVm0m8hjMnHdhufPZhs6wdpAsCgYEAvVsR
|
|
16
|
+
Rizx710Hlon5/byYPgo+vjPxTHNH/5b4nLmYTNsDWzVO8LqVkPpT8XewfEAYSOpp
|
|
17
|
+
uAYfK2GJc36XFX/0sZJFwuChKapnuL2r2x1OLKqJjKK/f+5XUirRFh//bMpS/FsM
|
|
18
|
+
+0/DWnfYsw9dwgnH2JIuods1+8SL7uFWYBV5SpsCgYBoT8YxzX5lxOGVlmtW99Ws
|
|
19
|
+
OdYvgdBLNJveWprApw7eeiJH/m2zkkGXfrVYKjA7h2D3/UyBbQrszxWioXVaJ4GO
|
|
20
|
+
gMXdahTSCokom4b6Ied0zLxPu8Mug+abbzYNBEEiD7wHCXdCC0C6WwOZRX/nmR3U
|
|
21
|
+
ZcM36OghrqKFEcI4KQEpqQKBgQCRzus5T2io+cjbCbofwba1pyvzSIoZZXfef0FH
|
|
22
|
+
Zb66B7fI5v63beW38prrCFA1DSHmG+N2WfhsbjnqXmM2ogYpKkpfqptPOzGNVzhb
|
|
23
|
+
jHBjAprSWYv+lehVlDTWxaLpAc7vFamkZyI1qq2KDF4VCXUC9mXEKsmh6hIayxe4
|
|
24
|
+
+zAf2wKBgA8qx/b8IpSc/9KJATtpNwnSWkDhwzazU8rwHTE8QDsbmSurf2eBtC3e
|
|
25
|
+
5Gki7XcXpVIroERRfy5jdKfZ0xb5SmBsqCxu3NTDLtwuV3PMqh5oSGi6fjzL6/dn
|
|
26
|
+
XNaHyu1jMd2g3AxoWVk6+41iuHEIJZ2UnJhrFXsIsWejmrni6vGT
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
package/tools/jsview-common.mjs
CHANGED
|
@@ -179,6 +179,7 @@ function parseArguments(requiredUsages = {},
|
|
|
179
179
|
/**************************************************
|
|
180
180
|
* jsview-test-project
|
|
181
181
|
* ├── dist
|
|
182
|
+
* │ ├── assets
|
|
182
183
|
* │ ├── debug
|
|
183
184
|
* │ │ └── map
|
|
184
185
|
* │ └── js
|
|
@@ -209,6 +210,7 @@ function getOptions(framework)
|
|
|
209
210
|
options.modulesDir = path.resolve(options.projectDir, 'node_modules');
|
|
210
211
|
options.jsviewDir = path.resolve(options.modulesDir, '@shijiu', 'jsview');
|
|
211
212
|
options.jsviewDomDir = path.resolve(options.jsviewDir, 'dom');
|
|
213
|
+
options.jsviewDomBinDir = path.resolve(options.jsviewDomDir, 'bin');
|
|
212
214
|
options.jsviewPatchesDir = path.resolve(options.jsviewDir, 'patches');
|
|
213
215
|
options.jsviewPatchModulesDir = path.resolve(options.jsviewPatchesDir, 'node_modules');
|
|
214
216
|
options.jsviewToolsDir = path.resolve(options.jsviewDir, 'tools');
|
|
@@ -241,6 +243,7 @@ function getOptions(framework)
|
|
|
241
243
|
options.distJsvListFile = path.resolve(options.distDir, 'jsv-list.json');
|
|
242
244
|
options.distJsvInfoFile = path.resolve(options.distDir, 'jsv-info.json');
|
|
243
245
|
options.distJsIndexFile = path.resolve(options.distDir, 'index.html');
|
|
246
|
+
options.distAssetsDir = path.resolve(options.distDir, 'assets');
|
|
244
247
|
options.distJsDir = path.resolve(options.distDir, 'js');
|
|
245
248
|
options.distDebugDir = path.resolve(options.distDir, 'debug');
|
|
246
249
|
options.distDebugMapDir = path.resolve(options.distDebugDir, 'map');
|
|
@@ -326,6 +329,18 @@ function symlinkSync(workDir, targetPath, toPath)
|
|
|
326
329
|
fs.symlinkSync(relativePath, toPath, 'junction');
|
|
327
330
|
}
|
|
328
331
|
|
|
332
|
+
function isCommandAvailable(command) {
|
|
333
|
+
const isWindows = process.platform === 'win32';
|
|
334
|
+
const cmd = isWindows ? 'where' : 'which';
|
|
335
|
+
|
|
336
|
+
const result = childProcess.spawnSync(cmd, [command], {
|
|
337
|
+
stdio: 'ignore',
|
|
338
|
+
shell: true
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
return result.status === 0;
|
|
342
|
+
}
|
|
343
|
+
|
|
329
344
|
function isSymlinkSync(filePath)
|
|
330
345
|
{
|
|
331
346
|
const stats = fs.lstatSync(filePath);
|
|
@@ -363,6 +378,54 @@ function execCommandAsync(cmdline)
|
|
|
363
378
|
});
|
|
364
379
|
}
|
|
365
380
|
|
|
381
|
+
function execCommandPromise(cmdline)
|
|
382
|
+
{
|
|
383
|
+
let log = '';
|
|
384
|
+
|
|
385
|
+
const promise = new Promise((resolve, reject) => {
|
|
386
|
+
const child = childProcess.spawn(cmdline, null, { shell: true });
|
|
387
|
+
child.stdout.on('data', (data) => {
|
|
388
|
+
log += data;
|
|
389
|
+
});
|
|
390
|
+
child.stderr.on('data', (data) => {
|
|
391
|
+
log += data;
|
|
392
|
+
});
|
|
393
|
+
child.on('close', (code) => {
|
|
394
|
+
if (code !== 0) {
|
|
395
|
+
reject(log);
|
|
396
|
+
} else {
|
|
397
|
+
resolve(log);
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
return promise;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
function execCommandWithLiveLog(cmdline)
|
|
406
|
+
{
|
|
407
|
+
Logger.Info('Run [' + cmdline + ']... ');
|
|
408
|
+
const promise = new Promise((resolve, reject) => {
|
|
409
|
+
const child = childProcess.spawn(cmdline, null, { shell: true });
|
|
410
|
+
child.stdout.on('data', (data) => {
|
|
411
|
+
process.stdout.write(data);
|
|
412
|
+
});
|
|
413
|
+
child.stderr.on('data', (data) => {
|
|
414
|
+
process.stderr.write(data);
|
|
415
|
+
});
|
|
416
|
+
child.on('close', (code) => {
|
|
417
|
+
if (code !== 0) {
|
|
418
|
+
process.exit(code);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
resolve();
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
return promise;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
|
|
366
429
|
function checkNodeVersion(minMajorVersion = 16)
|
|
367
430
|
{
|
|
368
431
|
const versions = process.version.replace('v', '').split('.');
|
|
@@ -464,7 +527,7 @@ function downloadFileAsync(url, localPath, workDir)
|
|
|
464
527
|
|
|
465
528
|
function unzipFile(zipFilePath, toDir, workDir)
|
|
466
529
|
{
|
|
467
|
-
|
|
530
|
+
let relativePath = path.relative(workDir, toDir);
|
|
468
531
|
if(!relativePath) {
|
|
469
532
|
relativePath = './'
|
|
470
533
|
}
|
|
@@ -474,6 +537,21 @@ function unzipFile(zipFilePath, toDir, workDir)
|
|
|
474
537
|
execCommand(cmdline);
|
|
475
538
|
}
|
|
476
539
|
|
|
540
|
+
function getExportPrefix()
|
|
541
|
+
{
|
|
542
|
+
let exportPrefix = 'export';
|
|
543
|
+
if(process.platform == 'win32') {
|
|
544
|
+
exportPrefix = 'set'
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
return exportPrefix;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
function getJsViewBurdenDefaultBaseUrl()
|
|
551
|
+
{
|
|
552
|
+
return 'https://cdn.release.qcast.cn/JsViewTest/wasm/resources';
|
|
553
|
+
}
|
|
554
|
+
|
|
477
555
|
function getNpmRegistry()
|
|
478
556
|
{
|
|
479
557
|
return 'https://nexus.cluster.qcast.cn/repository/npm-public';
|
|
@@ -485,8 +563,8 @@ function getNetworkIpv4Addresses() {
|
|
|
485
563
|
for (const devName in interfaces) {
|
|
486
564
|
const iface = interfaces[devName];
|
|
487
565
|
|
|
488
|
-
for (
|
|
489
|
-
|
|
566
|
+
for (let idx = 0; idx < iface.length; idx++) {
|
|
567
|
+
let alias = iface[idx];
|
|
490
568
|
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
|
|
491
569
|
addresses.push(alias.address);
|
|
492
570
|
}
|
|
@@ -504,9 +582,14 @@ export {
|
|
|
504
582
|
downloadFileAsync,
|
|
505
583
|
execCommand,
|
|
506
584
|
execCommandAsync,
|
|
585
|
+
execCommandPromise,
|
|
586
|
+
execCommandWithLiveLog,
|
|
587
|
+
getExportPrefix,
|
|
588
|
+
getJsViewBurdenDefaultBaseUrl,
|
|
507
589
|
getNetworkIpv4Addresses,
|
|
508
590
|
getNpmRegistry,
|
|
509
591
|
getOptions,
|
|
592
|
+
isCommandAvailable,
|
|
510
593
|
isSymlinkSync,
|
|
511
594
|
loadPackageObject,
|
|
512
595
|
makeZip,
|