system-phone 3.0.49-16 → 3.0.49-17

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 (265) hide show
  1. package/.babelrc +5 -5
  2. package/.editorconfig +9 -9
  3. package/.eslintrc.js +16 -16
  4. package/.gradle/buildOutputCleanup/cache.properties +2 -2
  5. package/CHANGELOG.md +1 -1
  6. package/Dockerfile +3 -3
  7. package/README.md +36 -36
  8. package/SystemPhone.iml +8 -8
  9. package/build/css-loaders.js +34 -34
  10. package/build/dev-client.js +8 -8
  11. package/build/dev-server.js +141 -141
  12. package/build/example-server.js +80 -80
  13. package/build/release.sh +28 -28
  14. package/build/utils.js +71 -71
  15. package/build/webpack.base.conf.js +82 -82
  16. package/build/webpack.dev.conf.js +31 -31
  17. package/build/webpack.example.conf.js +49 -49
  18. package/build/webpack.prod.conf.js +60 -60
  19. package/build/webpack.test.conf.js +31 -31
  20. package/build.gradle +27 -27
  21. package/config/dev.env.js +6 -6
  22. package/config/index.js +38 -38
  23. package/config/prod.env.js +3 -3
  24. package/config/test.env.js +6 -6
  25. package/gradle/wrapper/gradle-wrapper.properties +5 -5
  26. package/gradlew +183 -183
  27. package/gradlew.bat +100 -100
  28. package/index.html +21 -21
  29. package/nginx.conf +304 -304
  30. package/package.json +1 -1
  31. package/release.bat +5 -5
  32. package/src/App.vue +25 -25
  33. package/src/Util.js +415 -415
  34. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  35. package/src/android-bootstrap/less/.csscomb.json +304 -304
  36. package/src/android-bootstrap/less/.csslintrc +19 -19
  37. package/src/android-bootstrap/less/alerts.less +73 -73
  38. package/src/android-bootstrap/less/badges.less +66 -66
  39. package/src/android-bootstrap/less/bootstrap.less +56 -56
  40. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  41. package/src/android-bootstrap/less/button-groups.less +247 -247
  42. package/src/android-bootstrap/less/buttons.less +173 -173
  43. package/src/android-bootstrap/less/carousel.less +269 -269
  44. package/src/android-bootstrap/less/close.less +34 -34
  45. package/src/android-bootstrap/less/code.less +69 -69
  46. package/src/android-bootstrap/less/component-animations.less +33 -33
  47. package/src/android-bootstrap/less/dropdowns.less +216 -216
  48. package/src/android-bootstrap/less/forms.less +626 -626
  49. package/src/android-bootstrap/less/glyphicons.less +305 -305
  50. package/src/android-bootstrap/less/grid.less +84 -84
  51. package/src/android-bootstrap/less/input-groups.less +167 -167
  52. package/src/android-bootstrap/less/jumbotron.less +52 -52
  53. package/src/android-bootstrap/less/labels.less +64 -64
  54. package/src/android-bootstrap/less/list-group.less +141 -141
  55. package/src/android-bootstrap/less/media.less +66 -66
  56. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  57. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  58. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  59. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  60. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  61. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  62. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  63. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  64. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  65. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  66. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  67. package/src/android-bootstrap/less/mixins/image.less +33 -33
  68. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  69. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  70. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  71. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  72. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  73. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  74. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  75. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  76. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  77. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  78. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  79. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  80. package/src/android-bootstrap/less/mixins/size.less +10 -10
  81. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  82. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  83. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  84. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  85. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  86. package/src/android-bootstrap/less/mixins.less +40 -40
  87. package/src/android-bootstrap/less/modals.less +151 -151
  88. package/src/android-bootstrap/less/navbar.less +660 -660
  89. package/src/android-bootstrap/less/navs.less +290 -290
  90. package/src/android-bootstrap/less/normalize.less +424 -424
  91. package/src/android-bootstrap/less/pager.less +76 -76
  92. package/src/android-bootstrap/less/pagination.less +89 -89
  93. package/src/android-bootstrap/less/panels.less +274 -274
  94. package/src/android-bootstrap/less/popovers.less +131 -131
  95. package/src/android-bootstrap/less/print.less +101 -101
  96. package/src/android-bootstrap/less/progress-bars.less +87 -87
  97. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  98. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  99. package/src/android-bootstrap/less/scaffolding.less +161 -161
  100. package/src/android-bootstrap/less/tables.less +262 -262
  101. package/src/android-bootstrap/less/theme.less +291 -291
  102. package/src/android-bootstrap/less/thumbnails.less +36 -36
  103. package/src/android-bootstrap/less/tooltip.less +102 -102
  104. package/src/android-bootstrap/less/type.less +303 -303
  105. package/src/android-bootstrap/less/utilities.less +55 -55
  106. package/src/android-bootstrap/less/variables.less +896 -896
  107. package/src/android-bootstrap/less/wells.less +29 -29
  108. package/src/assets//345/215/217/345/212/251/345/256/211/346/243/200.png +0 -0
  109. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  110. package/src/bootstrap/less/.csscomb.json +304 -304
  111. package/src/bootstrap/less/.csslintrc +19 -19
  112. package/src/bootstrap/less/alerts.less +73 -73
  113. package/src/bootstrap/less/badges.less +66 -66
  114. package/src/bootstrap/less/bootstrap.less +56 -56
  115. package/src/bootstrap/less/breadcrumbs.less +26 -26
  116. package/src/bootstrap/less/button-groups.less +247 -247
  117. package/src/bootstrap/less/buttons.less +172 -172
  118. package/src/bootstrap/less/carousel.less +269 -269
  119. package/src/bootstrap/less/close.less +34 -34
  120. package/src/bootstrap/less/code.less +69 -69
  121. package/src/bootstrap/less/component-animations.less +33 -33
  122. package/src/bootstrap/less/dropdowns.less +216 -216
  123. package/src/bootstrap/less/forms.less +626 -626
  124. package/src/bootstrap/less/glyphicons.less +305 -305
  125. package/src/bootstrap/less/grid.less +84 -84
  126. package/src/bootstrap/less/input-groups.less +167 -167
  127. package/src/bootstrap/less/jumbotron.less +52 -52
  128. package/src/bootstrap/less/labels.less +64 -64
  129. package/src/bootstrap/less/list-group.less +141 -141
  130. package/src/bootstrap/less/media.less +66 -66
  131. package/src/bootstrap/less/mixins/alerts.less +14 -14
  132. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  133. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  134. package/src/bootstrap/less/mixins/buttons.less +69 -69
  135. package/src/bootstrap/less/mixins/center-block.less +7 -7
  136. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  137. package/src/bootstrap/less/mixins/forms.less +90 -90
  138. package/src/bootstrap/less/mixins/gradients.less +59 -59
  139. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  140. package/src/bootstrap/less/mixins/grid.less +122 -122
  141. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  142. package/src/bootstrap/less/mixins/image.less +33 -33
  143. package/src/bootstrap/less/mixins/labels.less +12 -12
  144. package/src/bootstrap/less/mixins/list-group.less +30 -30
  145. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  146. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  147. package/src/bootstrap/less/mixins/opacity.less +8 -8
  148. package/src/bootstrap/less/mixins/pagination.less +24 -24
  149. package/src/bootstrap/less/mixins/panels.less +24 -24
  150. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  151. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  152. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  153. package/src/bootstrap/less/mixins/resize.less +6 -6
  154. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  155. package/src/bootstrap/less/mixins/size.less +10 -10
  156. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  157. package/src/bootstrap/less/mixins/table-row.less +44 -44
  158. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  159. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  160. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  161. package/src/bootstrap/less/mixins.less +40 -40
  162. package/src/bootstrap/less/modals.less +151 -151
  163. package/src/bootstrap/less/navbar.less +660 -660
  164. package/src/bootstrap/less/navs.less +286 -286
  165. package/src/bootstrap/less/normalize.less +424 -424
  166. package/src/bootstrap/less/pager.less +76 -76
  167. package/src/bootstrap/less/pagination.less +89 -89
  168. package/src/bootstrap/less/panels.less +275 -275
  169. package/src/bootstrap/less/popovers.less +131 -131
  170. package/src/bootstrap/less/print.less +101 -101
  171. package/src/bootstrap/less/progress-bars.less +87 -87
  172. package/src/bootstrap/less/responsive-embed.less +35 -35
  173. package/src/bootstrap/less/responsive-utilities.less +194 -194
  174. package/src/bootstrap/less/scaffolding.less +161 -161
  175. package/src/bootstrap/less/tables.less +262 -262
  176. package/src/bootstrap/less/theme.less +291 -291
  177. package/src/bootstrap/less/thumbnails.less +36 -36
  178. package/src/bootstrap/less/tooltip.less +102 -102
  179. package/src/bootstrap/less/type.less +303 -303
  180. package/src/bootstrap/less/utilities.less +55 -55
  181. package/src/bootstrap/less/variables.less +895 -895
  182. package/src/bootstrap/less/wells.less +29 -29
  183. package/src/components/AloneLoadParams.vue +26 -26
  184. package/src/components/AlreadyService.vue +193 -193
  185. package/src/components/LoadAppdata.vue +38 -38
  186. package/src/components/LoginAppNew.vue +587 -587
  187. package/src/components/ModifyPassWord.vue +216 -216
  188. package/src/components/NavBottom.vue +117 -117
  189. package/src/components/NavBottomV.vue +141 -141
  190. package/src/components/NavBottomVVV.vue +185 -185
  191. package/src/components/OnlineManage.vue +256 -256
  192. package/src/components/PhoneAllInfo.vue +68 -68
  193. package/src/components/PhoneChangemeterInfo.vue +116 -116
  194. package/src/components/PhoneInfoTable.vue +39 -39
  195. package/src/components/PhoneMeterInfo.vue +132 -132
  196. package/src/components/PhoneRepairInfo.vue +146 -146
  197. package/src/components/PhoneSellInfo.vue +123 -123
  198. package/src/components/PhoneSellInfoLite.vue +112 -112
  199. package/src/components/PhoneUser.vue +202 -202
  200. package/src/components/PhoneUserDetil.vue +70 -70
  201. package/src/components/PhoneUserFind.vue +138 -138
  202. package/src/components/SystemSetUp.vue +330 -330
  203. package/src/components/TabBarPhone.vue +81 -81
  204. package/src/components/Test.vue +14 -14
  205. package/src/components/UploadManage.vue +194 -194
  206. package/src/components/gaomi/NavBottomV.vue +223 -223
  207. package/src/components/gaomi/NavBottomVVVV.vue +210 -210
  208. package/src/components/gaomi/Scroller.vue +63 -63
  209. package/src/components/gaomi/SystemSetUp.vue +186 -186
  210. package/src/components/gaomi/ToolsPage.vue +168 -168
  211. package/src/components/idea/feedBack.vue +150 -150
  212. package/src/components/idea/feedbackAdd.vue +366 -366
  213. package/src/components/info/ConfigInfo.vue +122 -122
  214. package/src/components/info/FindUserInfo.vue +157 -157
  215. package/src/components/info/InfoTable.vue +37 -37
  216. package/src/components/iot/InstructMessage.vue +313 -313
  217. package/src/components/iot/IotBaseInfo.vue +97 -97
  218. package/src/components/iot/IotMeterInfo.vue +77 -77
  219. package/src/components/iot/iotMonitoringMain.vue +501 -501
  220. package/src/components/online/ApplyOnline.vue +581 -581
  221. package/src/components/online/BJZhongRan/ApplyOnline.vue +600 -600
  222. package/src/components/screen/ChargeContentPage.vue +656 -656
  223. package/src/components/screen/ContentPage.vue +611 -611
  224. package/src/components/screen/GongdanContentPage.vue +149 -149
  225. package/src/components/screen/ListCountItem.vue +93 -93
  226. package/src/components/screen/ModuleTitle.vue +48 -48
  227. package/src/components/screen/SafeOrderContentPage.vue +440 -440
  228. package/src/components/screen/SecurityCheckItem.vue +50 -50
  229. package/src/components/screen/TotalItem.vue +76 -76
  230. package/src/components/screen/TotalUserNumber.vue +77 -77
  231. package/src/components/screen/WorkOrderItem.vue +51 -51
  232. package/src/components/screen/WorkOrderRightDownItem.vue +103 -103
  233. package/src/components/screen/WorkOrderRightItem.vue +115 -115
  234. package/src/components/userinfo/paymentQuery.vue +189 -189
  235. package/src/components/userinfo/queryFile.vue +190 -190
  236. package/src/components/wasm.vue +18 -18
  237. package/src/expandcssAndroid.less +521 -521
  238. package/src/index.js +9 -9
  239. package/src/main.js +38 -38
  240. package/src/plugins/GetStringData.js +18 -18
  241. package/src/plugins/LoadParams.js +24 -24
  242. package/src/plugins/const.js +404 -404
  243. package/src/plugins/vue-py.js +37 -37
  244. package/src/services/ConfigService.js +24 -24
  245. package/src/stores/AppData.js +63 -63
  246. package/src/systemphone-gaomi.js +105 -105
  247. package/src/systemphone.js +58 -58
  248. package/src/util/LdapHelper.js +75 -75
  249. package/static/app.json +4 -4
  250. package/static/const.js +404 -404
  251. package/static/globals.txt +74 -74
  252. package/static/layui/font/iconfont.svg +554 -554
  253. package/static/vue-py.js +37 -37
  254. package/static/wasm_exec.js +465 -465
  255. package/test/unit/.eslintrc +5 -5
  256. package/test/unit/TestUtil.js +35 -35
  257. package/test/unit/context.html +20 -20
  258. package/test/unit/index.js +13 -13
  259. package/test/unit/init.js +13 -13
  260. package/test/unit/karma.conf.js +50 -50
  261. package/test/unit/specs/App.spec.js +17 -17
  262. package/test/unit/specs/Test.spec.js +28 -28
  263. package/test/unit/specs/components/LoginApp.spec.js +21 -21
  264. package/test/unit/specs/sevices/ConfigService.spec.js +23 -23
  265. package/test/unit/specs/sevices/GetDBTest.spec.js +28 -28
@@ -1,465 +1,465 @@
1
- // Copyright 2018 The Go Authors. All rights reserved.
2
- // Use of this source code is governed by a BSD-style
3
- // license that can be found in the LICENSE file.
4
-
5
- (() => {
6
- if (typeof global !== "undefined") {
7
- // global already exists
8
- } else if (typeof window !== "undefined") {
9
- window.global = window;
10
- } else if (typeof self !== "undefined") {
11
- self.global = self;
12
- } else {
13
- throw new Error("cannot export Go (neither global, window nor self is defined)");
14
- }
15
-
16
- // Map web browser API and Node.js API to a single common API (preferring web standards over Node.js API).
17
- const isNodeJS = global.process && global.process.title === "node";
18
- if (isNodeJS) {
19
- global.require = require;
20
- global.fs = require("fs");
21
-
22
- const nodeCrypto = require("crypto");
23
- global.crypto = {
24
- getRandomValues(b) {
25
- nodeCrypto.randomFillSync(b);
26
- },
27
- };
28
-
29
- global.performance = {
30
- now() {
31
- const [sec, nsec] = process.hrtime();
32
- return sec * 1000 + nsec / 1000000;
33
- },
34
- };
35
-
36
- const util = require("util");
37
- global.TextEncoder = util.TextEncoder;
38
- global.TextDecoder = util.TextDecoder;
39
- } else {
40
- let outputBuf = "";
41
- global.fs = {
42
- constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
43
- writeSync(fd, buf) {
44
- outputBuf += decoder.decode(buf);
45
- const nl = outputBuf.lastIndexOf("\n");
46
- if (nl != -1) {
47
- console.log(outputBuf.substr(0, nl));
48
- outputBuf = outputBuf.substr(nl + 1);
49
- }
50
- return buf.length;
51
- },
52
- write(fd, buf, offset, length, position, callback) {
53
- if (offset !== 0 || length !== buf.length || position !== null) {
54
- throw new Error("not implemented");
55
- }
56
- const n = this.writeSync(fd, buf);
57
- callback(null, n);
58
- },
59
- open(path, flags, mode, callback) {
60
- const err = new Error("not implemented");
61
- err.code = "ENOSYS";
62
- callback(err);
63
- },
64
- read(fd, buffer, offset, length, position, callback) {
65
- const err = new Error("not implemented");
66
- err.code = "ENOSYS";
67
- callback(err);
68
- },
69
- fsync(fd, callback) {
70
- callback(null);
71
- },
72
- };
73
- }
74
-
75
- const encoder = new TextEncoder("utf-8");
76
- const decoder = new TextDecoder("utf-8");
77
-
78
- global.Go = class {
79
- constructor() {
80
- this.argv = ["js"];
81
- this.env = {};
82
- this.exit = (code) => {
83
- if (code !== 0) {
84
- console.warn("exit code:", code);
85
- }
86
- };
87
- this._exitPromise = new Promise((resolve) => {
88
- this._resolveExitPromise = resolve;
89
- });
90
- this._pendingEvent = null;
91
- this._scheduledTimeouts = new Map();
92
- this._nextCallbackTimeoutID = 1;
93
-
94
- const mem = () => {
95
- // The buffer may change when requesting more memory.
96
- return new DataView(this._inst.exports.mem.buffer);
97
- }
98
-
99
- const setInt64 = (addr, v) => {
100
- mem().setUint32(addr + 0, v, true);
101
- mem().setUint32(addr + 4, Math.floor(v / 4294967296), true);
102
- }
103
-
104
- const getInt64 = (addr) => {
105
- const low = mem().getUint32(addr + 0, true);
106
- const high = mem().getInt32(addr + 4, true);
107
- return low + high * 4294967296;
108
- }
109
-
110
- const loadValue = (addr) => {
111
- const f = mem().getFloat64(addr, true);
112
- if (f === 0) {
113
- return undefined;
114
- }
115
- if (!isNaN(f)) {
116
- return f;
117
- }
118
-
119
- const id = mem().getUint32(addr, true);
120
- return this._values[id];
121
- }
122
-
123
- const storeValue = (addr, v) => {
124
- const nanHead = 0x7FF80000;
125
-
126
- if (typeof v === "number") {
127
- if (isNaN(v)) {
128
- mem().setUint32(addr + 4, nanHead, true);
129
- mem().setUint32(addr, 0, true);
130
- return;
131
- }
132
- if (v === 0) {
133
- mem().setUint32(addr + 4, nanHead, true);
134
- mem().setUint32(addr, 1, true);
135
- return;
136
- }
137
- mem().setFloat64(addr, v, true);
138
- return;
139
- }
140
-
141
- switch (v) {
142
- case undefined:
143
- mem().setFloat64(addr, 0, true);
144
- return;
145
- case null:
146
- mem().setUint32(addr + 4, nanHead, true);
147
- mem().setUint32(addr, 2, true);
148
- return;
149
- case true:
150
- mem().setUint32(addr + 4, nanHead, true);
151
- mem().setUint32(addr, 3, true);
152
- return;
153
- case false:
154
- mem().setUint32(addr + 4, nanHead, true);
155
- mem().setUint32(addr, 4, true);
156
- return;
157
- }
158
-
159
- let ref = this._refs.get(v);
160
- if (ref === undefined) {
161
- ref = this._values.length;
162
- this._values.push(v);
163
- this._refs.set(v, ref);
164
- }
165
- let typeFlag = 0;
166
- switch (typeof v) {
167
- case "string":
168
- typeFlag = 1;
169
- break;
170
- case "symbol":
171
- typeFlag = 2;
172
- break;
173
- case "function":
174
- typeFlag = 3;
175
- break;
176
- }
177
- mem().setUint32(addr + 4, nanHead | typeFlag, true);
178
- mem().setUint32(addr, ref, true);
179
- }
180
-
181
- const loadSlice = (addr) => {
182
- const array = getInt64(addr + 0);
183
- const len = getInt64(addr + 8);
184
- return new Uint8Array(this._inst.exports.mem.buffer, array, len);
185
- }
186
-
187
- const loadSliceOfValues = (addr) => {
188
- const array = getInt64(addr + 0);
189
- const len = getInt64(addr + 8);
190
- const a = new Array(len);
191
- for (let i = 0; i < len; i++) {
192
- a[i] = loadValue(array + i * 8);
193
- }
194
- return a;
195
- }
196
-
197
- const loadString = (addr) => {
198
- const saddr = getInt64(addr + 0);
199
- const len = getInt64(addr + 8);
200
- return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
201
- }
202
-
203
- const timeOrigin = Date.now() - performance.now();
204
- this.importObject = {
205
- go: {
206
- // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
207
- // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
208
- // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
209
- // This changes the SP, thus we have to update the SP used by the imported function.
210
-
211
- // func wasmExit(code int32)
212
- "runtime.wasmExit": (sp) => {
213
- const code = mem().getInt32(sp + 8, true);
214
- this.exited = true;
215
- delete this._inst;
216
- delete this._values;
217
- delete this._refs;
218
- this.exit(code);
219
- },
220
-
221
- // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
222
- "runtime.wasmWrite": (sp) => {
223
- const fd = getInt64(sp + 8);
224
- const p = getInt64(sp + 16);
225
- const n = mem().getInt32(sp + 24, true);
226
- fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
227
- },
228
-
229
- // func nanotime() int64
230
- "runtime.nanotime": (sp) => {
231
- setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
232
- },
233
-
234
- // func walltime() (sec int64, nsec int32)
235
- "runtime.walltime": (sp) => {
236
- const msec = (new Date).getTime();
237
- setInt64(sp + 8, msec / 1000);
238
- mem().setInt32(sp + 16, (msec % 1000) * 1000000, true);
239
- },
240
-
241
- // func scheduleTimeoutEvent(delay int64) int32
242
- "runtime.scheduleTimeoutEvent": (sp) => {
243
- const id = this._nextCallbackTimeoutID;
244
- this._nextCallbackTimeoutID++;
245
- this._scheduledTimeouts.set(id, setTimeout(
246
- () => { this._resume(); },
247
- getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
248
- ));
249
- mem().setInt32(sp + 16, id, true);
250
- },
251
-
252
- // func clearTimeoutEvent(id int32)
253
- "runtime.clearTimeoutEvent": (sp) => {
254
- const id = mem().getInt32(sp + 8, true);
255
- clearTimeout(this._scheduledTimeouts.get(id));
256
- this._scheduledTimeouts.delete(id);
257
- },
258
-
259
- // func getRandomData(r []byte)
260
- "runtime.getRandomData": (sp) => {
261
- crypto.getRandomValues(loadSlice(sp + 8));
262
- },
263
-
264
- // func stringVal(value string) ref
265
- "syscall/js.stringVal": (sp) => {
266
- storeValue(sp + 24, loadString(sp + 8));
267
- },
268
-
269
- // func valueGet(v ref, p string) ref
270
- "syscall/js.valueGet": (sp) => {
271
- const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
272
- sp = this._inst.exports.getsp(); // see comment above
273
- storeValue(sp + 32, result);
274
- },
275
-
276
- // func valueSet(v ref, p string, x ref)
277
- "syscall/js.valueSet": (sp) => {
278
- Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
279
- },
280
-
281
- // func valueIndex(v ref, i int) ref
282
- "syscall/js.valueIndex": (sp) => {
283
- storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
284
- },
285
-
286
- // valueSetIndex(v ref, i int, x ref)
287
- "syscall/js.valueSetIndex": (sp) => {
288
- Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
289
- },
290
-
291
- // func valueCall(v ref, m string, args []ref) (ref, bool)
292
- "syscall/js.valueCall": (sp) => {
293
- try {
294
- const v = loadValue(sp + 8);
295
- const m = Reflect.get(v, loadString(sp + 16));
296
- const args = loadSliceOfValues(sp + 32);
297
- const result = Reflect.apply(m, v, args);
298
- sp = this._inst.exports.getsp(); // see comment above
299
- storeValue(sp + 56, result);
300
- mem().setUint8(sp + 64, 1);
301
- } catch (err) {
302
- storeValue(sp + 56, err);
303
- mem().setUint8(sp + 64, 0);
304
- }
305
- },
306
-
307
- // func valueInvoke(v ref, args []ref) (ref, bool)
308
- "syscall/js.valueInvoke": (sp) => {
309
- try {
310
- const v = loadValue(sp + 8);
311
- const args = loadSliceOfValues(sp + 16);
312
- const result = Reflect.apply(v, undefined, args);
313
- sp = this._inst.exports.getsp(); // see comment above
314
- storeValue(sp + 40, result);
315
- mem().setUint8(sp + 48, 1);
316
- } catch (err) {
317
- storeValue(sp + 40, err);
318
- mem().setUint8(sp + 48, 0);
319
- }
320
- },
321
-
322
- // func valueNew(v ref, args []ref) (ref, bool)
323
- "syscall/js.valueNew": (sp) => {
324
- try {
325
- const v = loadValue(sp + 8);
326
- const args = loadSliceOfValues(sp + 16);
327
- const result = Reflect.construct(v, args);
328
- sp = this._inst.exports.getsp(); // see comment above
329
- storeValue(sp + 40, result);
330
- mem().setUint8(sp + 48, 1);
331
- } catch (err) {
332
- storeValue(sp + 40, err);
333
- mem().setUint8(sp + 48, 0);
334
- }
335
- },
336
-
337
- // func valueLength(v ref) int
338
- "syscall/js.valueLength": (sp) => {
339
- setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
340
- },
341
-
342
- // valuePrepareString(v ref) (ref, int)
343
- "syscall/js.valuePrepareString": (sp) => {
344
- const str = encoder.encode(String(loadValue(sp + 8)));
345
- storeValue(sp + 16, str);
346
- setInt64(sp + 24, str.length);
347
- },
348
-
349
- // valueLoadString(v ref, b []byte)
350
- "syscall/js.valueLoadString": (sp) => {
351
- const str = loadValue(sp + 8);
352
- loadSlice(sp + 16).set(str);
353
- },
354
-
355
- // func valueInstanceOf(v ref, t ref) bool
356
- "syscall/js.valueInstanceOf": (sp) => {
357
- mem().setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16));
358
- },
359
-
360
- "debug": (value) => {
361
- console.log(value);
362
- },
363
- }
364
- };
365
- }
366
-
367
- async run(instance) {
368
- this._inst = instance;
369
- this._values = [ // TODO: garbage collection
370
- NaN,
371
- 0,
372
- null,
373
- true,
374
- false,
375
- global,
376
- this._inst.exports.mem,
377
- this,
378
- ];
379
- this._refs = new Map();
380
- this.exited = false;
381
-
382
- const mem = new DataView(this._inst.exports.mem.buffer)
383
-
384
- // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
385
- let offset = 4096;
386
-
387
- const strPtr = (str) => {
388
- let ptr = offset;
389
- new Uint8Array(mem.buffer, offset, str.length + 1).set(encoder.encode(str + "\0"));
390
- offset += str.length + (8 - (str.length % 8));
391
- return ptr;
392
- };
393
-
394
- const argc = this.argv.length;
395
-
396
- const argvPtrs = [];
397
- this.argv.forEach((arg) => {
398
- argvPtrs.push(strPtr(arg));
399
- });
400
-
401
- const keys = Object.keys(this.env).sort();
402
- argvPtrs.push(keys.length);
403
- keys.forEach((key) => {
404
- argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
405
- });
406
-
407
- const argv = offset;
408
- argvPtrs.forEach((ptr) => {
409
- mem.setUint32(offset, ptr, true);
410
- mem.setUint32(offset + 4, 0, true);
411
- offset += 8;
412
- });
413
-
414
- this._inst.exports.run(argc, argv);
415
- if (this.exited) {
416
- this._resolveExitPromise();
417
- }
418
- await this._exitPromise;
419
- }
420
-
421
- _resume() {
422
- if (this.exited) {
423
- throw new Error("Go program has already exited");
424
- }
425
- this._inst.exports.resume();
426
- if (this.exited) {
427
- this._resolveExitPromise();
428
- }
429
- }
430
-
431
- _makeFuncWrapper(id) {
432
- const go = this;
433
- return function () {
434
- const event = { id: id, this: this, args: arguments };
435
- go._pendingEvent = event;
436
- go._resume();
437
- return event.result;
438
- };
439
- }
440
- }
441
-
442
- if (isNodeJS) {
443
- if (process.argv.length < 3) {
444
- process.stderr.write("usage: go_js_wasm_exec [wasm binary] [arguments]\n");
445
- process.exit(1);
446
- }
447
-
448
- const go = new Go();
449
- go.argv = process.argv.slice(2);
450
- go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
451
- go.exit = process.exit;
452
- WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
453
- process.on("exit", (code) => { // Node.js exits if no event handler is pending
454
- if (code === 0 && !go.exited) {
455
- // deadlock, make Go print error and stack traces
456
- go._pendingEvent = { id: 0 };
457
- go._resume();
458
- }
459
- });
460
- return go.run(result.instance);
461
- }).catch((err) => {
462
- throw err;
463
- });
464
- }
465
- })();
1
+ // Copyright 2018 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ (() => {
6
+ if (typeof global !== "undefined") {
7
+ // global already exists
8
+ } else if (typeof window !== "undefined") {
9
+ window.global = window;
10
+ } else if (typeof self !== "undefined") {
11
+ self.global = self;
12
+ } else {
13
+ throw new Error("cannot export Go (neither global, window nor self is defined)");
14
+ }
15
+
16
+ // Map web browser API and Node.js API to a single common API (preferring web standards over Node.js API).
17
+ const isNodeJS = global.process && global.process.title === "node";
18
+ if (isNodeJS) {
19
+ global.require = require;
20
+ global.fs = require("fs");
21
+
22
+ const nodeCrypto = require("crypto");
23
+ global.crypto = {
24
+ getRandomValues(b) {
25
+ nodeCrypto.randomFillSync(b);
26
+ },
27
+ };
28
+
29
+ global.performance = {
30
+ now() {
31
+ const [sec, nsec] = process.hrtime();
32
+ return sec * 1000 + nsec / 1000000;
33
+ },
34
+ };
35
+
36
+ const util = require("util");
37
+ global.TextEncoder = util.TextEncoder;
38
+ global.TextDecoder = util.TextDecoder;
39
+ } else {
40
+ let outputBuf = "";
41
+ global.fs = {
42
+ constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
43
+ writeSync(fd, buf) {
44
+ outputBuf += decoder.decode(buf);
45
+ const nl = outputBuf.lastIndexOf("\n");
46
+ if (nl != -1) {
47
+ console.log(outputBuf.substr(0, nl));
48
+ outputBuf = outputBuf.substr(nl + 1);
49
+ }
50
+ return buf.length;
51
+ },
52
+ write(fd, buf, offset, length, position, callback) {
53
+ if (offset !== 0 || length !== buf.length || position !== null) {
54
+ throw new Error("not implemented");
55
+ }
56
+ const n = this.writeSync(fd, buf);
57
+ callback(null, n);
58
+ },
59
+ open(path, flags, mode, callback) {
60
+ const err = new Error("not implemented");
61
+ err.code = "ENOSYS";
62
+ callback(err);
63
+ },
64
+ read(fd, buffer, offset, length, position, callback) {
65
+ const err = new Error("not implemented");
66
+ err.code = "ENOSYS";
67
+ callback(err);
68
+ },
69
+ fsync(fd, callback) {
70
+ callback(null);
71
+ },
72
+ };
73
+ }
74
+
75
+ const encoder = new TextEncoder("utf-8");
76
+ const decoder = new TextDecoder("utf-8");
77
+
78
+ global.Go = class {
79
+ constructor() {
80
+ this.argv = ["js"];
81
+ this.env = {};
82
+ this.exit = (code) => {
83
+ if (code !== 0) {
84
+ console.warn("exit code:", code);
85
+ }
86
+ };
87
+ this._exitPromise = new Promise((resolve) => {
88
+ this._resolveExitPromise = resolve;
89
+ });
90
+ this._pendingEvent = null;
91
+ this._scheduledTimeouts = new Map();
92
+ this._nextCallbackTimeoutID = 1;
93
+
94
+ const mem = () => {
95
+ // The buffer may change when requesting more memory.
96
+ return new DataView(this._inst.exports.mem.buffer);
97
+ }
98
+
99
+ const setInt64 = (addr, v) => {
100
+ mem().setUint32(addr + 0, v, true);
101
+ mem().setUint32(addr + 4, Math.floor(v / 4294967296), true);
102
+ }
103
+
104
+ const getInt64 = (addr) => {
105
+ const low = mem().getUint32(addr + 0, true);
106
+ const high = mem().getInt32(addr + 4, true);
107
+ return low + high * 4294967296;
108
+ }
109
+
110
+ const loadValue = (addr) => {
111
+ const f = mem().getFloat64(addr, true);
112
+ if (f === 0) {
113
+ return undefined;
114
+ }
115
+ if (!isNaN(f)) {
116
+ return f;
117
+ }
118
+
119
+ const id = mem().getUint32(addr, true);
120
+ return this._values[id];
121
+ }
122
+
123
+ const storeValue = (addr, v) => {
124
+ const nanHead = 0x7FF80000;
125
+
126
+ if (typeof v === "number") {
127
+ if (isNaN(v)) {
128
+ mem().setUint32(addr + 4, nanHead, true);
129
+ mem().setUint32(addr, 0, true);
130
+ return;
131
+ }
132
+ if (v === 0) {
133
+ mem().setUint32(addr + 4, nanHead, true);
134
+ mem().setUint32(addr, 1, true);
135
+ return;
136
+ }
137
+ mem().setFloat64(addr, v, true);
138
+ return;
139
+ }
140
+
141
+ switch (v) {
142
+ case undefined:
143
+ mem().setFloat64(addr, 0, true);
144
+ return;
145
+ case null:
146
+ mem().setUint32(addr + 4, nanHead, true);
147
+ mem().setUint32(addr, 2, true);
148
+ return;
149
+ case true:
150
+ mem().setUint32(addr + 4, nanHead, true);
151
+ mem().setUint32(addr, 3, true);
152
+ return;
153
+ case false:
154
+ mem().setUint32(addr + 4, nanHead, true);
155
+ mem().setUint32(addr, 4, true);
156
+ return;
157
+ }
158
+
159
+ let ref = this._refs.get(v);
160
+ if (ref === undefined) {
161
+ ref = this._values.length;
162
+ this._values.push(v);
163
+ this._refs.set(v, ref);
164
+ }
165
+ let typeFlag = 0;
166
+ switch (typeof v) {
167
+ case "string":
168
+ typeFlag = 1;
169
+ break;
170
+ case "symbol":
171
+ typeFlag = 2;
172
+ break;
173
+ case "function":
174
+ typeFlag = 3;
175
+ break;
176
+ }
177
+ mem().setUint32(addr + 4, nanHead | typeFlag, true);
178
+ mem().setUint32(addr, ref, true);
179
+ }
180
+
181
+ const loadSlice = (addr) => {
182
+ const array = getInt64(addr + 0);
183
+ const len = getInt64(addr + 8);
184
+ return new Uint8Array(this._inst.exports.mem.buffer, array, len);
185
+ }
186
+
187
+ const loadSliceOfValues = (addr) => {
188
+ const array = getInt64(addr + 0);
189
+ const len = getInt64(addr + 8);
190
+ const a = new Array(len);
191
+ for (let i = 0; i < len; i++) {
192
+ a[i] = loadValue(array + i * 8);
193
+ }
194
+ return a;
195
+ }
196
+
197
+ const loadString = (addr) => {
198
+ const saddr = getInt64(addr + 0);
199
+ const len = getInt64(addr + 8);
200
+ return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
201
+ }
202
+
203
+ const timeOrigin = Date.now() - performance.now();
204
+ this.importObject = {
205
+ go: {
206
+ // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
207
+ // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
208
+ // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
209
+ // This changes the SP, thus we have to update the SP used by the imported function.
210
+
211
+ // func wasmExit(code int32)
212
+ "runtime.wasmExit": (sp) => {
213
+ const code = mem().getInt32(sp + 8, true);
214
+ this.exited = true;
215
+ delete this._inst;
216
+ delete this._values;
217
+ delete this._refs;
218
+ this.exit(code);
219
+ },
220
+
221
+ // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
222
+ "runtime.wasmWrite": (sp) => {
223
+ const fd = getInt64(sp + 8);
224
+ const p = getInt64(sp + 16);
225
+ const n = mem().getInt32(sp + 24, true);
226
+ fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
227
+ },
228
+
229
+ // func nanotime() int64
230
+ "runtime.nanotime": (sp) => {
231
+ setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
232
+ },
233
+
234
+ // func walltime() (sec int64, nsec int32)
235
+ "runtime.walltime": (sp) => {
236
+ const msec = (new Date).getTime();
237
+ setInt64(sp + 8, msec / 1000);
238
+ mem().setInt32(sp + 16, (msec % 1000) * 1000000, true);
239
+ },
240
+
241
+ // func scheduleTimeoutEvent(delay int64) int32
242
+ "runtime.scheduleTimeoutEvent": (sp) => {
243
+ const id = this._nextCallbackTimeoutID;
244
+ this._nextCallbackTimeoutID++;
245
+ this._scheduledTimeouts.set(id, setTimeout(
246
+ () => { this._resume(); },
247
+ getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
248
+ ));
249
+ mem().setInt32(sp + 16, id, true);
250
+ },
251
+
252
+ // func clearTimeoutEvent(id int32)
253
+ "runtime.clearTimeoutEvent": (sp) => {
254
+ const id = mem().getInt32(sp + 8, true);
255
+ clearTimeout(this._scheduledTimeouts.get(id));
256
+ this._scheduledTimeouts.delete(id);
257
+ },
258
+
259
+ // func getRandomData(r []byte)
260
+ "runtime.getRandomData": (sp) => {
261
+ crypto.getRandomValues(loadSlice(sp + 8));
262
+ },
263
+
264
+ // func stringVal(value string) ref
265
+ "syscall/js.stringVal": (sp) => {
266
+ storeValue(sp + 24, loadString(sp + 8));
267
+ },
268
+
269
+ // func valueGet(v ref, p string) ref
270
+ "syscall/js.valueGet": (sp) => {
271
+ const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
272
+ sp = this._inst.exports.getsp(); // see comment above
273
+ storeValue(sp + 32, result);
274
+ },
275
+
276
+ // func valueSet(v ref, p string, x ref)
277
+ "syscall/js.valueSet": (sp) => {
278
+ Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
279
+ },
280
+
281
+ // func valueIndex(v ref, i int) ref
282
+ "syscall/js.valueIndex": (sp) => {
283
+ storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
284
+ },
285
+
286
+ // valueSetIndex(v ref, i int, x ref)
287
+ "syscall/js.valueSetIndex": (sp) => {
288
+ Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
289
+ },
290
+
291
+ // func valueCall(v ref, m string, args []ref) (ref, bool)
292
+ "syscall/js.valueCall": (sp) => {
293
+ try {
294
+ const v = loadValue(sp + 8);
295
+ const m = Reflect.get(v, loadString(sp + 16));
296
+ const args = loadSliceOfValues(sp + 32);
297
+ const result = Reflect.apply(m, v, args);
298
+ sp = this._inst.exports.getsp(); // see comment above
299
+ storeValue(sp + 56, result);
300
+ mem().setUint8(sp + 64, 1);
301
+ } catch (err) {
302
+ storeValue(sp + 56, err);
303
+ mem().setUint8(sp + 64, 0);
304
+ }
305
+ },
306
+
307
+ // func valueInvoke(v ref, args []ref) (ref, bool)
308
+ "syscall/js.valueInvoke": (sp) => {
309
+ try {
310
+ const v = loadValue(sp + 8);
311
+ const args = loadSliceOfValues(sp + 16);
312
+ const result = Reflect.apply(v, undefined, args);
313
+ sp = this._inst.exports.getsp(); // see comment above
314
+ storeValue(sp + 40, result);
315
+ mem().setUint8(sp + 48, 1);
316
+ } catch (err) {
317
+ storeValue(sp + 40, err);
318
+ mem().setUint8(sp + 48, 0);
319
+ }
320
+ },
321
+
322
+ // func valueNew(v ref, args []ref) (ref, bool)
323
+ "syscall/js.valueNew": (sp) => {
324
+ try {
325
+ const v = loadValue(sp + 8);
326
+ const args = loadSliceOfValues(sp + 16);
327
+ const result = Reflect.construct(v, args);
328
+ sp = this._inst.exports.getsp(); // see comment above
329
+ storeValue(sp + 40, result);
330
+ mem().setUint8(sp + 48, 1);
331
+ } catch (err) {
332
+ storeValue(sp + 40, err);
333
+ mem().setUint8(sp + 48, 0);
334
+ }
335
+ },
336
+
337
+ // func valueLength(v ref) int
338
+ "syscall/js.valueLength": (sp) => {
339
+ setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
340
+ },
341
+
342
+ // valuePrepareString(v ref) (ref, int)
343
+ "syscall/js.valuePrepareString": (sp) => {
344
+ const str = encoder.encode(String(loadValue(sp + 8)));
345
+ storeValue(sp + 16, str);
346
+ setInt64(sp + 24, str.length);
347
+ },
348
+
349
+ // valueLoadString(v ref, b []byte)
350
+ "syscall/js.valueLoadString": (sp) => {
351
+ const str = loadValue(sp + 8);
352
+ loadSlice(sp + 16).set(str);
353
+ },
354
+
355
+ // func valueInstanceOf(v ref, t ref) bool
356
+ "syscall/js.valueInstanceOf": (sp) => {
357
+ mem().setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16));
358
+ },
359
+
360
+ "debug": (value) => {
361
+ console.log(value);
362
+ },
363
+ }
364
+ };
365
+ }
366
+
367
+ async run(instance) {
368
+ this._inst = instance;
369
+ this._values = [ // TODO: garbage collection
370
+ NaN,
371
+ 0,
372
+ null,
373
+ true,
374
+ false,
375
+ global,
376
+ this._inst.exports.mem,
377
+ this,
378
+ ];
379
+ this._refs = new Map();
380
+ this.exited = false;
381
+
382
+ const mem = new DataView(this._inst.exports.mem.buffer)
383
+
384
+ // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
385
+ let offset = 4096;
386
+
387
+ const strPtr = (str) => {
388
+ let ptr = offset;
389
+ new Uint8Array(mem.buffer, offset, str.length + 1).set(encoder.encode(str + "\0"));
390
+ offset += str.length + (8 - (str.length % 8));
391
+ return ptr;
392
+ };
393
+
394
+ const argc = this.argv.length;
395
+
396
+ const argvPtrs = [];
397
+ this.argv.forEach((arg) => {
398
+ argvPtrs.push(strPtr(arg));
399
+ });
400
+
401
+ const keys = Object.keys(this.env).sort();
402
+ argvPtrs.push(keys.length);
403
+ keys.forEach((key) => {
404
+ argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
405
+ });
406
+
407
+ const argv = offset;
408
+ argvPtrs.forEach((ptr) => {
409
+ mem.setUint32(offset, ptr, true);
410
+ mem.setUint32(offset + 4, 0, true);
411
+ offset += 8;
412
+ });
413
+
414
+ this._inst.exports.run(argc, argv);
415
+ if (this.exited) {
416
+ this._resolveExitPromise();
417
+ }
418
+ await this._exitPromise;
419
+ }
420
+
421
+ _resume() {
422
+ if (this.exited) {
423
+ throw new Error("Go program has already exited");
424
+ }
425
+ this._inst.exports.resume();
426
+ if (this.exited) {
427
+ this._resolveExitPromise();
428
+ }
429
+ }
430
+
431
+ _makeFuncWrapper(id) {
432
+ const go = this;
433
+ return function () {
434
+ const event = { id: id, this: this, args: arguments };
435
+ go._pendingEvent = event;
436
+ go._resume();
437
+ return event.result;
438
+ };
439
+ }
440
+ }
441
+
442
+ if (isNodeJS) {
443
+ if (process.argv.length < 3) {
444
+ process.stderr.write("usage: go_js_wasm_exec [wasm binary] [arguments]\n");
445
+ process.exit(1);
446
+ }
447
+
448
+ const go = new Go();
449
+ go.argv = process.argv.slice(2);
450
+ go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
451
+ go.exit = process.exit;
452
+ WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
453
+ process.on("exit", (code) => { // Node.js exits if no event handler is pending
454
+ if (code === 0 && !go.exited) {
455
+ // deadlock, make Go print error and stack traces
456
+ go._pendingEvent = { id: 0 };
457
+ go._resume();
458
+ }
459
+ });
460
+ return go.run(result.instance);
461
+ }).catch((err) => {
462
+ throw err;
463
+ });
464
+ }
465
+ })();