@shijiu/jsview 1.9.719

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.
Files changed (148) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -0
  2. package/dom/bin/jsview-dom.min.js +1 -0
  3. package/dom/bin/jsview-engine-js-browser.min.js +1 -0
  4. package/dom/bin/jsview-forge-define.min.js +1 -0
  5. package/dom/browser-root-style.css +21 -0
  6. package/dom/jsv-browser-debug-dom.js +8 -0
  7. package/dom/jsv-dom.js +6 -0
  8. package/dom/jsv-engine-js-browser.js +6 -0
  9. package/dom/jsv-forge-define.js +6 -0
  10. package/dom/jsview-dom/README.md +5 -0
  11. package/dom/jsview-dom/package-lock.json-perfect +3898 -0
  12. package/dom/jsview-dom/package.json +23 -0
  13. package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +15 -0
  14. package/dom/jsview-dom/rollup/dom.rollup.config.js +14 -0
  15. package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +14 -0
  16. package/dom/jsview-dom/rollup/forge-define.rollup.config.js +14 -0
  17. package/dom/jsview-dom/scripts/release_dist.sh +36 -0
  18. package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +118 -0
  19. package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +19 -0
  20. package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +559 -0
  21. package/dom/jsview-dom/src/dom-browser-hook/index.js +6 -0
  22. package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +226 -0
  23. package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +85 -0
  24. package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +51 -0
  25. package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +7 -0
  26. package/dom/jsview-dom/src/dom-wrapper/event/Event.js +12 -0
  27. package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +9 -0
  28. package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +43 -0
  29. package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +8 -0
  30. package/dom/jsview-dom/src/dom-wrapper/index.js +16 -0
  31. package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +24 -0
  32. package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +60 -0
  33. package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +10 -0
  34. package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +498 -0
  35. package/dom/jsview-dom/src/dom-wrapper/node/Document.js +274 -0
  36. package/dom/jsview-dom/src/dom-wrapper/node/Element.js +852 -0
  37. package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +48 -0
  38. package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +47 -0
  39. package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +203 -0
  40. package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +22 -0
  41. package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +40 -0
  42. package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +48 -0
  43. package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +230 -0
  44. package/dom/jsview-dom/src/dom-wrapper/node/Node.js +178 -0
  45. package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +9 -0
  46. package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +45 -0
  47. package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +33 -0
  48. package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +41 -0
  49. package/dom/jsview-dom/src/dom-wrapper/node/Text.js +22 -0
  50. package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +4 -0
  51. package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +237 -0
  52. package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +25 -0
  53. package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +26 -0
  54. package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +65 -0
  55. package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +11 -0
  56. package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +609 -0
  57. package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +51 -0
  58. package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +385 -0
  59. package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +43 -0
  60. package/dom/jsview-dom/src/dom-wrapper/style/URL.js +144 -0
  61. package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +42 -0
  62. package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +86 -0
  63. package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +64 -0
  64. package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +42 -0
  65. package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +32 -0
  66. package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +715 -0
  67. package/dom/jsview-dom/src/engine-js/ForgeDefine.js +8 -0
  68. package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +14 -0
  69. package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +100 -0
  70. package/dom/jsview-dom/src/engine-js/browser/animation_base.js +313 -0
  71. package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +64 -0
  72. package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +287 -0
  73. package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +906 -0
  74. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +143 -0
  75. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +12 -0
  76. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +160 -0
  77. package/dom/jsview-dom/src/engine-js/browser/console_log.js +25 -0
  78. package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +95 -0
  79. package/dom/jsview-dom/src/engine-js/browser/easing.js +114 -0
  80. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +122 -0
  81. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +450 -0
  82. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +102 -0
  83. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +296 -0
  84. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +10 -0
  85. package/dom/jsview-dom/src/engine-js/browser/index.js +38 -0
  86. package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +336 -0
  87. package/dom/jsview-dom/src/engine-js/browser/layout_params.js +113 -0
  88. package/dom/jsview-dom/src/engine-js/browser/layout_view.js +3545 -0
  89. package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +15 -0
  90. package/dom/jsview-dom/src/engine-js/browser/media.js +379 -0
  91. package/dom/jsview-dom/src/engine-js/browser/page_base.js +941 -0
  92. package/dom/jsview-dom/src/engine-js/browser/particle_view.js +526 -0
  93. package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +61 -0
  94. package/dom/jsview-dom/src/engine-js/browser/react_utils.js +5 -0
  95. package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +91 -0
  96. package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +128 -0
  97. package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +155 -0
  98. package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +75 -0
  99. package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +139 -0
  100. package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +192 -0
  101. package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +454 -0
  102. package/dom/jsview-dom/src/engine-js/browser/text_utils.js +299 -0
  103. package/dom/jsview-dom/src/engine-js/browser/text_view.js +428 -0
  104. package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +1060 -0
  105. package/dom/jsview-dom/src/engine-js/browser/url.js +69 -0
  106. package/dom/jsview-dom/src/engine-js/browser/velocity.js +40 -0
  107. package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +77 -0
  108. package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +67 -0
  109. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +98 -0
  110. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +21 -0
  111. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +24 -0
  112. package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +9 -0
  113. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +268 -0
  114. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +84 -0
  115. package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +213 -0
  116. package/dom/jsview-dom/src/engine-js/browser/view_store.js +41 -0
  117. package/dom/jsview-dom/src/engine-js/index.js +2 -0
  118. package/dom/jsview-dom/src/engine-js/native/README.md +1 -0
  119. package/dom/target_core_revision.mjs +15 -0
  120. package/index.js +0 -0
  121. package/loader/header_script_loader.js +134 -0
  122. package/loader/jsview-main.js +42 -0
  123. package/loader/jsview.config.default.js +37 -0
  124. package/loader/jsview.default.config.js +37 -0
  125. package/loader/loader.js +183 -0
  126. package/loader/loader_webkit.js +40 -0
  127. package/package.json +31 -0
  128. package/patches/node_modules/@vitejs/plugin-react/dist/index.cjs +520 -0
  129. package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +17609 -0
  130. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +335 -0
  131. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-format.js +446 -0
  132. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-types.js +91 -0
  133. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +8038 -0
  134. package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +1700 -0
  135. package/patches/node_modules/postcss-js/objectifier.js +90 -0
  136. package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +63175 -0
  137. package/patches/node_modules/vite/dist/node/jsview-react.vite.config.js +7 -0
  138. package/patches/node_modules/vite/dist/node/jsview-vue.vite.config.js +7 -0
  139. package/patches/node_modules/vite/dist/node/jsview.vite.config.js +56 -0
  140. package/patches/node_modules/vue-router/dist/vue-router.mjs +3595 -0
  141. package/tools/common.js +58 -0
  142. package/tools/jsview-jsmap-serve.js +105 -0
  143. package/tools/jsview-post-build.js +184 -0
  144. package/tools/jsview-post-install-react.js +13 -0
  145. package/tools/jsview-post-install-vue.js +16 -0
  146. package/tools/jsview-post-install.js +116 -0
  147. package/tools/jsview-run-android.js +67 -0
  148. package/tsconfig.json +34 -0
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+
6
+ function cpSync(workDir, src, dest) {
7
+ const exists = fs.existsSync(src);
8
+ const stats = exists && fs.statSync(src);
9
+ const isDirectory = exists && stats.isDirectory();
10
+ if (isDirectory) {
11
+ if (fs.existsSync(dest) == false) {
12
+ fs.mkdirSync(dest);
13
+ }
14
+ fs.readdirSync(src).forEach(function(childItemName) {
15
+ cpSync(
16
+ workDir,
17
+ path.join(src, childItemName),
18
+ path.join(dest, childItemName)
19
+ );
20
+ });
21
+ } else {
22
+ console.info(
23
+ " " + path.relative(workDir, src) + " -> " + path.relative(workDir, dest)
24
+ );
25
+ fs.copyFileSync(src, dest);
26
+ }
27
+ }
28
+
29
+ function rmSync(path) {
30
+ if (!!fs.rmSync) {
31
+ fs.rmSync(path, { recursive: true, force: true });
32
+ } else {
33
+ deleteFolderRecursive(path)
34
+ }
35
+ }
36
+
37
+ function deleteFolderRecursive(path) {
38
+ var files = [];
39
+ if (fs.existsSync(path)) {
40
+ files = fs.readdirSync(path);
41
+ files.forEach(function(file, index) {
42
+ var curPath = path + "/" + file;
43
+ if (fs.lstatSync(curPath).isDirectory()) {
44
+ // recurse
45
+ deleteFolderRecursive(curPath);
46
+ } else {
47
+ // delete file
48
+ fs.unlinkSync(curPath);
49
+ }
50
+ });
51
+ fs.rmdirSync(path);
52
+ }
53
+ }
54
+
55
+ module.exports = {
56
+ cpSync,
57
+ rmSync,
58
+ }
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require("fs");
4
+ const http = require('http');
5
+ const os = require('os');
6
+
7
+ let baseDir = __dirname;
8
+
9
+ let script_name = __filename.substr(__dirname.length + 1)
10
+
11
+ let redirect_url;
12
+ if (process.argv.length >= 2) {
13
+ let args_start = 0;
14
+ for (let i = 0; i < process.argv.length; i++) {
15
+ if (process.argv[i].endsWith(script_name)) {
16
+ args_start = i + 1;
17
+ break;
18
+ }
19
+ }
20
+ const args = process.argv.slice(args_start)
21
+ redirect_url = args[0]
22
+ if (!redirect_url.endsWith('/')) {
23
+ redirect_url = redirect_url + '/';
24
+ }
25
+ }
26
+
27
+ function requestListener(req, res) {
28
+ console.log("[request] " + req.url);
29
+
30
+ if (req.url.endsWith("\.map")) { // return map source file content
31
+ if (redirect_url) {
32
+ // redirect with 302 HTTP code in response
33
+ let redirect_target = redirect_url
34
+ + convertMapBaseUrl(req.url)
35
+ console.log(`redirect ${req.url} -> ${redirect_target}`)
36
+ res.writeHead(302, { "Location": redirect_target });
37
+ return res.end();
38
+ }
39
+
40
+ try {
41
+ const fileContent = fs.readFileSync(baseDir + '/' + req.url);
42
+
43
+ res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
44
+ res.write(fileContent);
45
+ res.end();
46
+ return;
47
+ } catch (ex) {
48
+ console.log("Failed to process " + req.url + "\nException: " + ex);
49
+ }
50
+ }
51
+
52
+ res.writeHead(404);
53
+ res.end();
54
+ };
55
+
56
+ function convertMapBaseUrl(origin_url) {
57
+ if (origin_url.startsWith('/map/')) {
58
+ /* 去掉子目录/map/ */
59
+ return origin_url.substr(5);
60
+ } else if (origin_url.startsWith('/')) {
61
+ /* 去掉'/' */
62
+ return origin_url.substring(1, origin_url.length);
63
+ } else {
64
+ return origin_url;
65
+ }
66
+ }
67
+
68
+ function getIPAddress() {
69
+ let ret = [];
70
+
71
+ var interfaces = os.networkInterfaces();
72
+ for (var devname in interfaces) {
73
+ var iface = interfaces[devname];
74
+
75
+ for (var i = 0; i < iface.length; i++) {
76
+ var alias = iface[i];
77
+ if (alias.family === 'IPv4' && !alias.internal)
78
+ ret.push(alias.address);
79
+ }
80
+ }
81
+ return ret;
82
+ }
83
+
84
+ function main() {
85
+ if (process.argv.length >= 3) {
86
+ baseDir = process.argv[2];
87
+ }
88
+
89
+ const server = http.createServer(requestListener);
90
+ const port = 57245;
91
+ server.listen(port, '0.0.0.0', () => {
92
+ console.log('');
93
+ console.log('JavaScript source map running at:');
94
+ if (redirect_url) {
95
+ console.log('with redirect url=' + redirect_url)
96
+ }
97
+ console.log(' - Local: localhost:' + port);
98
+ getIPAddress().forEach(ip => {
99
+ console.log(' - Network: ' + ip + ':' + port);
100
+ });
101
+ console.log('');
102
+ });
103
+ }
104
+
105
+ main();
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+
3
+ const crypto = require('crypto');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+
7
+ // main.js处理AppData信息
8
+ async function prepareMainAppData(options, fileMd5)
9
+ {
10
+ // 加载私钥文件
11
+ const privateKeyFile = path.resolve(options.appConfigDir, 'app_sign_private_key.crt');
12
+ if (!fs.existsSync(privateKeyFile)) {
13
+ console.error('Failed to open private key file from ' + privateKeyFile);
14
+ process.exit(1);
15
+ }
16
+ const privateKeyText = fs.readFileSync(privateKeyFile);
17
+ if (privateKeyText.indexOf('-----BEGIN PRIVATE KEY-----') < 0) {
18
+ console.error('Get private from src/appConfig/app_sign_private_key.crt failed.');
19
+ process.exit(1);
20
+ }
21
+
22
+ // 加载公钥文件
23
+ const publicKeyFile = path.resolve(options.appConfigDir, 'app_sign_public_key.pem');
24
+ if (!fs.existsSync(publicKeyFile)) {
25
+ console.error('Failed to open public key file from ' + publicKeyFile);
26
+ process.exit(1);
27
+ }
28
+ const publicKeyText = fs.readFileSync(publicKeyFile);
29
+ if (publicKeyText.indexOf('-----BEGIN PUBLIC KEY-----') < 0) {
30
+ console.error('Get private from src/appConfig/app_sign_public_key.pem failed.');
31
+ process.exit(1);
32
+ }
33
+ // 公钥格式转化pem -> der,因为java中的解码处理只识别der格式
34
+ let publicKeyDerText = publicKeyText.toString();
35
+ if (publicKeyDerText.indexOf('\r') >= 0) {
36
+ publicKeyDerText = publicKeyDerText.replace(/\r/g, '');
37
+ }
38
+ if (publicKeyDerText.indexOf('\n') >= 0) {
39
+ publicKeyDerText = publicKeyDerText.replace(/\n/g, '');
40
+ }
41
+ publicKeyDerText = publicKeyDerText.replace('-----BEGIN PUBLIC KEY-----', '');
42
+ publicKeyDerText = publicKeyDerText.replace('-----END PUBLIC KEY-----', '');
43
+
44
+ // 编码md5值
45
+ const encryptCodeBase64 = crypto.privateEncrypt({
46
+ key: privateKeyText,
47
+ padding: crypto.constants.RSA_PKCS1_PADDING
48
+ },
49
+ Buffer.from(fileMd5)
50
+ ).toString('base64');
51
+
52
+ // 校验publicKey是否是配对的
53
+ const decryptCode = crypto.publicDecrypt({
54
+ key: publicKeyText,
55
+ padding: crypto.constants.RSA_PKCS1_PADDING
56
+ },
57
+ Buffer.from(encryptCodeBase64, 'base64')
58
+ ).toString();
59
+ if (decryptCode !== fileMd5) {
60
+ console.error('Error: public key dismath to private key!');
61
+ process.exit(1);
62
+ }
63
+
64
+ // 获取AppData信息
65
+ const appConfigFile = path.resolve(options.appConfigDir, 'app.config.mjs');
66
+ if (!fs.existsSync(appConfigFile)) {
67
+ console.error('Failed to open app config file from ' + appConfigFile);
68
+ process.exit(1);
69
+ }
70
+ // const appConfigText = fs.readFileSync(appConfigFile);
71
+ // const appDataOriginJson = JSON.parse(appConfigText);
72
+ appDataOriginJson = await import(appConfigFile);
73
+
74
+ // 组装AppData
75
+ let targetAppData = {};
76
+ Object.assign(targetAppData, appDataOriginJson); // 同步包括AppName在内的所有信息
77
+ targetAppData.PublicKeys = [publicKeyDerText]; // 使用签名数组,支持后续追加签名
78
+ targetAppData.EncryptCodes = [encryptCodeBase64]; // 同样使用数组,支持后续追加
79
+
80
+ return JSON.stringify(targetAppData);
81
+ }
82
+
83
+ function signApp(options)
84
+ {
85
+ const jsDir = path.resolve(options.distDir, 'js');
86
+ const jsFiles = fs.readdirSync(jsDir);
87
+ jsFiles.forEach(async (file, index) => {
88
+ if (!file.endsWith('.js')) {
89
+ return;
90
+ }
91
+
92
+ const jsFile = path.resolve(jsDir, file);
93
+ console.log('Updating ' + path.relative(options.projectDir, jsFile));
94
+
95
+ var jsvAppContents = fs.readFileSync(jsFile);
96
+ jsvAppContents = jsvAppContents.toString();
97
+
98
+ let mapOffset = jsvAppContents.lastIndexOf('# sourceMappingURL='); // 避免代码中间位置的sourceMappingUrl内容被替换
99
+ let mapStr = (jsvAppContents.substring(mapOffset, jsvAppContents.length)).replace(
100
+ '# sourceMappingURL=', '# sourceMappingURL=http://localhost:57245/map/');
101
+ jsvAppContents = jsvAppContents.substring(0, mapOffset) + mapStr;
102
+
103
+ jsvAppContents += '\n'; // 把\n归入算进md5计算中
104
+
105
+ const jsvAppMd5 = crypto.createHash('md5').update(jsvAppContents).digest('hex');
106
+ let appDataInfo = '';
107
+ if (jsFile.indexOf('main.jsv.') > 0) {
108
+ // 对main文件加入应用头信息
109
+ appDataInfo = await prepareMainAppData(options, jsvAppMd5);
110
+
111
+ // 格式化jsvapp信息 /*jsvapp:内容长度:{内容}*/
112
+ // 使用TextEncoder解决中文长度问题
113
+ const infoLen = new TextEncoder().encode(appDataInfo).length;
114
+ appDataInfo = '/*jsvapp:' + infoLen + ':' + appDataInfo + ':' + infoLen + ':jsvapp*/';
115
+ }
116
+ jsvAppContents = jsvAppContents + appDataInfo + '/*jsvmd5:' + jsvAppMd5 + '*/';
117
+ fs.writeFileSync(jsFile, jsvAppContents);
118
+ });
119
+ }
120
+
121
+ function makeDebugMap(options)
122
+ {
123
+ fs.mkdirSync(options.mapDir, { recursive: true });
124
+
125
+ const jsDir = path.resolve(options.distDir, 'js');
126
+ const jsFiles = fs.readdirSync(jsDir);
127
+ jsFiles.forEach((file, index) => {
128
+ if (!file.endsWith('.map')) {
129
+ return;
130
+ }
131
+
132
+ const from = path.resolve(jsDir, file);
133
+ const to = path.resolve(options.mapDir, file);
134
+ console.log("Moving " + path.relative(options.projectDir, to));
135
+ fs.renameSync(from, to);
136
+ });
137
+
138
+ const jsmapServeName = "jsview-jsmap-serve.js";
139
+ const jsmapServePath = path.resolve(options.toolsDir, jsmapServeName);
140
+ if (!fs.existsSync(jsmapServePath)) {
141
+ console.error("Failed to copy jsview-jsmap-serve.js, file not exists.");
142
+ process.exit(1);
143
+ }
144
+
145
+ const to = path.resolve(options.debugDir, jsmapServeName);
146
+ console.log("Making " + path.relative(options.projectDir, to));
147
+ fs.copyFileSync(jsmapServePath, to);
148
+ }
149
+
150
+ function main() {
151
+ const options = {};
152
+ options.projectDir = process.cwd();
153
+ options.modulesDir = path.resolve(options.projectDir, "node_modules");
154
+ options.jsviewDir = path.resolve(options.modulesDir, "@shijiu', 'jsview");
155
+ options.patchesDir = path.resolve(options.jsviewDir, "patches");
156
+ options.toolsDir = path.resolve(options.jsviewDir, "tools");
157
+ options.distDir = path.resolve(options.projectDir, "dist");
158
+ options.appConfigDir = path.resolve(options.projectDir, "src', 'appConfig");
159
+ options.debugDir = path.resolve(options.distDir, "debug");
160
+ options.mapDir = path.resolve(options.debugDir, "map");
161
+
162
+
163
+ vueConfigFile = path.resolve(options.projectDir, 'vue.config.js');
164
+ if (fs.existsSync(vueConfigFile)) {
165
+ vueCfgObj = require(vueConfigFile);
166
+ if(vueCfgObj.outputDir) {
167
+ options.distDir = path.resolve(options.projectDir, vueCfgObj.outputDir);
168
+ }
169
+ }
170
+
171
+ console.info('Signing JsView App...');
172
+ console.info();
173
+ signApp(options);
174
+ console.info();
175
+ console.info('Signed JsView App.');
176
+
177
+ console.info('Making JsView Debug map...');
178
+ console.info();
179
+ makeDebugMap(options);
180
+ console.info();
181
+ console.info('Made JsView Debug map.');
182
+ }
183
+
184
+ main();
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { doPostInstall } = require('./jsview-post-install');
4
+
5
+ function main() {
6
+ const pkgNeedPatch = [
7
+ { name: '@vitejs/plugin-react', version: '2.2.0' },
8
+ { name: 'postcss-js', version: '4.0.0' },
9
+ { name: 'vite', version: '3.0.9' }
10
+ ];
11
+ doPostInstall('react', pkgNeedPatch);
12
+ }
13
+ main();
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { doPostInstall } = require('./jsview-post-install');
4
+
5
+ function main() {
6
+ const pkgNeedPatch = [
7
+ { name: '@vue/compiler-sfc', version: '3.2.37' },
8
+ { name: '@vue/runtime-core', version: '3.2.37' },
9
+ { name: '@vue/runtime-dom', version: '3.2.37' },
10
+ { name: 'postcss-js', version: '4.0.0' },
11
+ { name: 'vite', version: '3.0.9' },
12
+ { name: 'vue-router', version: '4.1.4' }
13
+ ];
14
+ doPostInstall('vue', pkgNeedPatch);
15
+ }
16
+ main();
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const { pathToFileURL } = require('url');
6
+ const { cpSync, rmSync } = require('./common');
7
+
8
+ function checkNpmCommand() {
9
+ let command = process.env.npm_command;
10
+ if(!command) {
11
+ command = process.env.npm_config_refer; // for linux
12
+ }
13
+ if(command == 'ci') {
14
+ return;
15
+ }
16
+
17
+ console.warn();
18
+ console.warn(`!!! Warn: Not recommended for use 'npm ${process.env.npm_command} '.`);
19
+ console.warn('Please use "npm ci" to install node modules.');
20
+ console.warn();
21
+ }
22
+
23
+ function checkPackageVersion(options, name, version)
24
+ {
25
+ pkgPkgFile = path.resolve(options.modulesDir, name, 'package.json');
26
+ if (!fs.existsSync(pkgPkgFile)) {
27
+ console.error('Error: Failed to install jsview patches, "' + path.relative(options.projectDir, pkgPkgFile) + '" is not exists.');
28
+ process.exit(1);
29
+ }
30
+ pkgPkgObj = require(pkgPkgFile);
31
+ if (pkgPkgObj.version != version) {
32
+ console.error('Error: ' + name + '@' + pkgPkgObj.version + ' is not supported, required version is ' + version);
33
+ process.exit(1);
34
+ }
35
+ }
36
+
37
+ function checkPatches(options, pkgNeedPatch) {
38
+ console.info("Checking package:");
39
+ for (pkg of pkgNeedPatch) {
40
+ console.info(" ", pkg);
41
+ checkPackageVersion(options, pkg.name, pkg.version);
42
+ }
43
+ }
44
+
45
+ function installPatches(options, pkgNeedPatch) {
46
+ console.info('\nPatching JsView:');
47
+ for (pkg of pkgNeedPatch) {
48
+ const patchSrc = path.resolve(options.patchesDir, 'node_modules', pkg.name);
49
+ const patchDest = path.resolve(options.modulesDir, pkg.name);
50
+
51
+ cpSync(options.projectDir, patchSrc, patchDest);
52
+ }
53
+
54
+ console.info('\nCleanup node_modules cache... ');
55
+ const nodeModuleCacheDir = path.resolve(options.modulesDir, 'node_modules', '.cache');
56
+ rmSync(nodeModuleCacheDir);
57
+ }
58
+
59
+ async function printRevision(options) {
60
+ const jsviewVersionFile = path.resolve(options.jsviewDir, 'dom', 'target_core_revision.mjs');
61
+
62
+ const jsviewVersionURL = pathToFileURL(jsviewVersionFile);
63
+ const { default: jsviewTargetVersion } = await import(jsviewVersionURL);
64
+
65
+ console.log('**************************************************');
66
+ console.log('* Update revision to:');
67
+ console.log('* CORE: ' + jsviewTargetVersion.CoreRevisionAndBranch);
68
+ console.log('* ENGINE JS URL: ' + jsviewTargetVersion.JseUrl);
69
+ console.log('* PLUGIN LIST: ');
70
+
71
+ // print plugin info
72
+ let pluginCount = 0;
73
+ {
74
+ let pluginDirPath = path.resolve(options.jsviewFrameworkDir, 'utils', 'JsViewPlugin');
75
+ if(fs.existsSync(pluginDirPath)) {
76
+ fs.readdirSync(pluginDirPath).forEach((file) => {
77
+ var pathname = path.resolve(pluginDirPath, file);
78
+ if (fs.statSync(pathname).isDirectory()) {
79
+ let versionFilePath = path.resolve(pathname, 'version.js');
80
+ if (fs.existsSync(versionFilePath)) {
81
+ const targetVersion = require(versionFilePath);
82
+ console.log(`* [${path.basename
83
+ (pathname)}] : ${targetVersion.packageName
84
+ } : ${targetVersion.version}`);
85
+ pluginCount++;
86
+ }
87
+ }
88
+ })
89
+ }
90
+ }
91
+ console.log(`* total:${pluginCount}`);
92
+
93
+ console.log('**************************************************');
94
+ }
95
+
96
+ function doPostInstall(framework, pkgNeedPatch) {
97
+ const options = {};
98
+ options.projectDir = process.cwd();
99
+ options.modulesDir = path.resolve(options.projectDir, 'node_modules');
100
+ options.jsviewDir = path.resolve(options.modulesDir, '@shijiu', 'jsview');
101
+ options.jsviewFrameworkDir = path.resolve(options.modulesDir, '@shijiu', 'jsview-' + framework);
102
+ options.patchesDir = path.resolve(options.jsviewDir, 'patches');
103
+ options.distDir = path.resolve(options.projectDir, 'dist');
104
+
105
+ checkNpmCommand();
106
+
107
+ checkPatches(options, pkgNeedPatch);
108
+
109
+ installPatches(options, pkgNeedPatch);
110
+
111
+ printRevision(options);
112
+ }
113
+
114
+ module.exports = {
115
+ doPostInstall
116
+ };
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+
3
+ const childProcess = require('child_process');
4
+ const path = require('path');
5
+ const { pathToFileURL } = require('url');
6
+
7
+ async function getOptions() {
8
+ const options = {
9
+ androidPackage: "com.qcode.jsview.sample_demo/com.qcode.jsview.sample.SingleActivity",
10
+ coreRevision: null,
11
+ jseUrl: null,
12
+ homepageUrl: null,
13
+ }
14
+
15
+ if (process.argv.length >= 3) {
16
+ options.androidPackage = process.argv[2];
17
+ }
18
+
19
+ const projectDir = process.cwd();
20
+ const modulesDir = path.resolve(projectDir, 'node_modules');
21
+ const jsviewDir = path.resolve(modulesDir, '@shijiu', 'jsview');
22
+ const jsviewVersionFile = path.resolve(jsviewDir, 'dom', 'target_core_revision.mjs');
23
+ const jsviewVersionURL = pathToFileURL(jsviewVersionFile);
24
+ const { default: jsviewTargetVersion } = await import(jsviewVersionURL);
25
+ options.coreRevision = jsviewTargetVersion.CoreRevision;
26
+ options.jseUrl = jsviewTargetVersion.JseUrl;
27
+
28
+ const homepageUrlFile = path.resolve(modulesDir, '.vite', 'jsview', 'network.mjs');
29
+ let { default: homepageDomain } = await import(homepageUrlFile);
30
+ homepageDomain = homepageDomain.replace(/\u001b\[.*?m/g, '')
31
+ options.homepageUrl = homepageDomain + "js/main.jsv.js?module=true";
32
+
33
+ return options;
34
+ }
35
+
36
+ function printRevision(options) {
37
+ console.log("**************************************************");
38
+ console.log("* Android Package: " + options.androidPackage);
39
+ console.log("* Core: " + options.coreRevision);
40
+ console.log("* Engine JS url: " + options.jseUrl);
41
+ console.log("* Homepage url: " + options.homepageUrl);
42
+ console.log("**************************************************");
43
+ }
44
+
45
+ function androidStartActivity(options) {
46
+ let cmdline = "adb shell am start";
47
+ cmdline += ` -n ${options.androidPackage}`;
48
+ cmdline += ` --es COREVERSIONRANGE "${options.coreRevision}"`;
49
+ cmdline += ` --es ENGINE "${options.jseUrl}"`;
50
+ cmdline += ` --es URL "${options.homepageUrl}"`;
51
+ console.log(`Run command: ${cmdline}\n`);
52
+ try {
53
+ childProcess.execSync(cmdline, {stdio: [0, 1, 2]});
54
+ } catch (e) {
55
+ // console.log(e);
56
+ }
57
+ }
58
+
59
+
60
+ async function main() {
61
+ const options = await getOptions();
62
+
63
+ printRevision(options);
64
+
65
+ androidStartActivity(options);
66
+ }
67
+ main()
package/tsconfig.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "esnext",
4
+ "module": "esnext",
5
+ "strict": true,
6
+ "jsx": "preserve",
7
+ "importHelpers": true,
8
+ "moduleResolution": "node",
9
+ "experimentalDecorators": true,
10
+ "allowJs": true,
11
+ "skipLibCheck": true,
12
+ "esModuleInterop": true,
13
+ "allowSyntheticDefaultImports": true,
14
+ "sourceMap": true,
15
+ "baseUrl": ".",
16
+ "paths": {
17
+ "jsview/*": [
18
+ "./*"
19
+ ],
20
+ "jsview": [
21
+ "./index.js"
22
+ ]
23
+ },
24
+ "lib": [
25
+ "esnext",
26
+ "dom",
27
+ "dom.iterable",
28
+ "scripthost"
29
+ ],
30
+
31
+ "alwaysStrict": true,
32
+ "noImplicitReturns": true
33
+ }
34
+ }