system-phone 3.0.2 → 3.0.4

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 (267) 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/.gradle/checksums/checksums.lock +0 -0
  6. package/.gradle/checksums/md5-checksums.bin +0 -0
  7. package/.gradle/checksums/sha1-checksums.bin +0 -0
  8. package/CHANGELOG.md +1 -1
  9. package/Dockerfile +3 -3
  10. package/README.md +36 -36
  11. package/SystemPhone.iml +8 -8
  12. package/build/css-loaders.js +34 -34
  13. package/build/dev-client.js +8 -8
  14. package/build/dev-server.js +141 -141
  15. package/build/example-server.js +80 -80
  16. package/build/release.sh +28 -28
  17. package/build/utils.js +71 -71
  18. package/build/webpack.base.conf.js +82 -82
  19. package/build/webpack.dev.conf.js +31 -31
  20. package/build/webpack.example.conf.js +49 -49
  21. package/build/webpack.prod.conf.js +60 -60
  22. package/build/webpack.test.conf.js +31 -31
  23. package/build.gradle +27 -27
  24. package/config/dev.env.js +6 -6
  25. package/config/index.js +38 -38
  26. package/config/prod.env.js +3 -3
  27. package/config/test.env.js +6 -6
  28. package/gradle/wrapper/gradle-wrapper.properties +5 -5
  29. package/gradlew +183 -183
  30. package/gradlew.bat +100 -100
  31. package/index.html +21 -21
  32. package/nginx.conf +304 -304
  33. package/package.json +1 -1
  34. package/release.bat +5 -5
  35. package/src/App.vue +25 -25
  36. package/src/Util.js +415 -415
  37. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  38. package/src/android-bootstrap/less/.csscomb.json +304 -304
  39. package/src/android-bootstrap/less/.csslintrc +19 -19
  40. package/src/android-bootstrap/less/alerts.less +73 -73
  41. package/src/android-bootstrap/less/badges.less +66 -66
  42. package/src/android-bootstrap/less/bootstrap.less +56 -56
  43. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  44. package/src/android-bootstrap/less/button-groups.less +247 -247
  45. package/src/android-bootstrap/less/buttons.less +173 -173
  46. package/src/android-bootstrap/less/carousel.less +269 -269
  47. package/src/android-bootstrap/less/close.less +34 -34
  48. package/src/android-bootstrap/less/code.less +69 -69
  49. package/src/android-bootstrap/less/component-animations.less +33 -33
  50. package/src/android-bootstrap/less/dropdowns.less +216 -216
  51. package/src/android-bootstrap/less/forms.less +626 -626
  52. package/src/android-bootstrap/less/glyphicons.less +305 -305
  53. package/src/android-bootstrap/less/grid.less +84 -84
  54. package/src/android-bootstrap/less/input-groups.less +167 -167
  55. package/src/android-bootstrap/less/jumbotron.less +52 -52
  56. package/src/android-bootstrap/less/labels.less +64 -64
  57. package/src/android-bootstrap/less/list-group.less +141 -141
  58. package/src/android-bootstrap/less/media.less +66 -66
  59. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  60. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  61. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  62. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  63. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  64. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  65. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  66. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  67. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  68. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  69. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  70. package/src/android-bootstrap/less/mixins/image.less +33 -33
  71. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  72. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  73. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  74. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  75. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  76. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  77. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  78. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  79. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  80. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  81. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  82. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  83. package/src/android-bootstrap/less/mixins/size.less +10 -10
  84. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  85. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  86. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  87. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  88. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  89. package/src/android-bootstrap/less/mixins.less +40 -40
  90. package/src/android-bootstrap/less/modals.less +151 -151
  91. package/src/android-bootstrap/less/navbar.less +660 -660
  92. package/src/android-bootstrap/less/navs.less +290 -290
  93. package/src/android-bootstrap/less/normalize.less +424 -424
  94. package/src/android-bootstrap/less/pager.less +76 -76
  95. package/src/android-bootstrap/less/pagination.less +89 -89
  96. package/src/android-bootstrap/less/panels.less +274 -274
  97. package/src/android-bootstrap/less/popovers.less +131 -131
  98. package/src/android-bootstrap/less/print.less +101 -101
  99. package/src/android-bootstrap/less/progress-bars.less +87 -87
  100. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  101. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  102. package/src/android-bootstrap/less/scaffolding.less +161 -161
  103. package/src/android-bootstrap/less/tables.less +262 -262
  104. package/src/android-bootstrap/less/theme.less +291 -291
  105. package/src/android-bootstrap/less/thumbnails.less +36 -36
  106. package/src/android-bootstrap/less/tooltip.less +102 -102
  107. package/src/android-bootstrap/less/type.less +303 -303
  108. package/src/android-bootstrap/less/utilities.less +55 -55
  109. package/src/android-bootstrap/less/variables.less +896 -896
  110. package/src/android-bootstrap/less/wells.less +29 -29
  111. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  112. package/src/bootstrap/less/.csscomb.json +304 -304
  113. package/src/bootstrap/less/.csslintrc +19 -19
  114. package/src/bootstrap/less/alerts.less +73 -73
  115. package/src/bootstrap/less/badges.less +66 -66
  116. package/src/bootstrap/less/bootstrap.less +56 -56
  117. package/src/bootstrap/less/breadcrumbs.less +26 -26
  118. package/src/bootstrap/less/button-groups.less +247 -247
  119. package/src/bootstrap/less/buttons.less +172 -172
  120. package/src/bootstrap/less/carousel.less +269 -269
  121. package/src/bootstrap/less/close.less +34 -34
  122. package/src/bootstrap/less/code.less +69 -69
  123. package/src/bootstrap/less/component-animations.less +33 -33
  124. package/src/bootstrap/less/dropdowns.less +216 -216
  125. package/src/bootstrap/less/forms.less +626 -626
  126. package/src/bootstrap/less/glyphicons.less +305 -305
  127. package/src/bootstrap/less/grid.less +84 -84
  128. package/src/bootstrap/less/input-groups.less +167 -167
  129. package/src/bootstrap/less/jumbotron.less +52 -52
  130. package/src/bootstrap/less/labels.less +64 -64
  131. package/src/bootstrap/less/list-group.less +141 -141
  132. package/src/bootstrap/less/media.less +66 -66
  133. package/src/bootstrap/less/mixins/alerts.less +14 -14
  134. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  135. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  136. package/src/bootstrap/less/mixins/buttons.less +69 -69
  137. package/src/bootstrap/less/mixins/center-block.less +7 -7
  138. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  139. package/src/bootstrap/less/mixins/forms.less +90 -90
  140. package/src/bootstrap/less/mixins/gradients.less +59 -59
  141. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  142. package/src/bootstrap/less/mixins/grid.less +122 -122
  143. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  144. package/src/bootstrap/less/mixins/image.less +33 -33
  145. package/src/bootstrap/less/mixins/labels.less +12 -12
  146. package/src/bootstrap/less/mixins/list-group.less +30 -30
  147. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  148. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  149. package/src/bootstrap/less/mixins/opacity.less +8 -8
  150. package/src/bootstrap/less/mixins/pagination.less +24 -24
  151. package/src/bootstrap/less/mixins/panels.less +24 -24
  152. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  153. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  154. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  155. package/src/bootstrap/less/mixins/resize.less +6 -6
  156. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  157. package/src/bootstrap/less/mixins/size.less +10 -10
  158. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  159. package/src/bootstrap/less/mixins/table-row.less +44 -44
  160. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  161. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  162. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  163. package/src/bootstrap/less/mixins.less +40 -40
  164. package/src/bootstrap/less/modals.less +151 -151
  165. package/src/bootstrap/less/navbar.less +660 -660
  166. package/src/bootstrap/less/navs.less +286 -286
  167. package/src/bootstrap/less/normalize.less +424 -424
  168. package/src/bootstrap/less/pager.less +76 -76
  169. package/src/bootstrap/less/pagination.less +89 -89
  170. package/src/bootstrap/less/panels.less +275 -275
  171. package/src/bootstrap/less/popovers.less +131 -131
  172. package/src/bootstrap/less/print.less +101 -101
  173. package/src/bootstrap/less/progress-bars.less +87 -87
  174. package/src/bootstrap/less/responsive-embed.less +35 -35
  175. package/src/bootstrap/less/responsive-utilities.less +194 -194
  176. package/src/bootstrap/less/scaffolding.less +161 -161
  177. package/src/bootstrap/less/tables.less +262 -262
  178. package/src/bootstrap/less/theme.less +291 -291
  179. package/src/bootstrap/less/thumbnails.less +36 -36
  180. package/src/bootstrap/less/tooltip.less +102 -102
  181. package/src/bootstrap/less/type.less +303 -303
  182. package/src/bootstrap/less/utilities.less +55 -55
  183. package/src/bootstrap/less/variables.less +895 -895
  184. package/src/bootstrap/less/wells.less +29 -29
  185. package/src/components/AloneLoadParams.vue +26 -26
  186. package/src/components/AlreadyService.vue +193 -193
  187. package/src/components/AttendManage.vue +397 -397
  188. package/src/components/LoadAppdata.vue +38 -38
  189. package/src/components/LoginApp.vue +625 -625
  190. package/src/components/LoginAppNew.vue +587 -587
  191. package/src/components/ModifyPassWord.vue +192 -192
  192. package/src/components/NavBottom.vue +117 -117
  193. package/src/components/NavBottomV.vue +141 -141
  194. package/src/components/NavBottomVVV.vue +185 -185
  195. package/src/components/OnlineManage.vue +79 -9
  196. package/src/components/PhoneChangemeterInfo.vue +116 -116
  197. package/src/components/PhoneInfoTable.vue +39 -39
  198. package/src/components/PhoneRepairInfo.vue +146 -146
  199. package/src/components/PhoneSellInfo.vue +123 -123
  200. package/src/components/PhoneSellInfoLite.vue +112 -112
  201. package/src/components/PhoneUser.vue +202 -202
  202. package/src/components/PhoneUserDetil.vue +70 -70
  203. package/src/components/PhoneUserFind.vue +138 -138
  204. package/src/components/RightTree.vue +214 -214
  205. package/src/components/SystemSetUp.vue +298 -298
  206. package/src/components/TabBarPhone.vue +81 -81
  207. package/src/components/Test.vue +14 -14
  208. package/src/components/ToolsPage.vue +165 -165
  209. package/src/components/UploadManage.vue +194 -194
  210. package/src/components/gaomi/NavBottomV.vue +223 -223
  211. package/src/components/gaomi/NavBottomVVVV.vue +210 -210
  212. package/src/components/gaomi/Scroller.vue +63 -63
  213. package/src/components/gaomi/SystemSetUp.vue +186 -186
  214. package/src/components/gaomi/ToolsPage.vue +168 -168
  215. package/src/components/idea/feedBack.vue +150 -150
  216. package/src/components/idea/feedbackAdd.vue +366 -366
  217. package/src/components/iot/InstructMessage.vue +313 -313
  218. package/src/components/iot/IotBaseInfo.vue +97 -97
  219. package/src/components/iot/IotMeterInfo.vue +77 -77
  220. package/src/components/iot/iotMonitoringMain.vue +501 -501
  221. package/src/components/online/ApplyOnline.vue +581 -581
  222. package/src/components/online/BJZhongRan/ApplyOnline.vue +600 -600
  223. package/src/components/screen/ChargeContentPage.vue +656 -656
  224. package/src/components/screen/ContentPage.vue +611 -611
  225. package/src/components/screen/GongdanContentPage.vue +149 -149
  226. package/src/components/screen/ListCountItem.vue +93 -93
  227. package/src/components/screen/ModuleTitle.vue +48 -48
  228. package/src/components/screen/SafeOrderContentPage.vue +440 -440
  229. package/src/components/screen/SecurityCheckItem.vue +50 -50
  230. package/src/components/screen/TotalItem.vue +76 -76
  231. package/src/components/screen/TotalUserNumber.vue +77 -77
  232. package/src/components/screen/WorkOrderItem.vue +51 -51
  233. package/src/components/screen/WorkOrderRightDownItem.vue +103 -103
  234. package/src/components/screen/WorkOrderRightItem.vue +115 -115
  235. package/src/components/userinfo/paymentQuery.vue +189 -189
  236. package/src/components/userinfo/queryFile.vue +190 -190
  237. package/src/components/wasm.vue +18 -18
  238. package/src/expandcssAndroid.less +521 -521
  239. package/src/index.js +9 -9
  240. package/src/main.js +38 -38
  241. package/src/plugins/GetStringData.js +18 -18
  242. package/src/plugins/LoadParams.js +24 -24
  243. package/src/plugins/const.js +404 -404
  244. package/src/plugins/vue-py.js +37 -37
  245. package/src/services/ConfigService.js +24 -24
  246. package/src/stores/AppData.js +63 -63
  247. package/src/systemphone-gaomi.js +105 -105
  248. package/src/systemphone.js +58 -58
  249. package/src/systemphonegrid.js +186 -186
  250. package/src/util/LdapHelper.js +75 -75
  251. package/static/app.json +4 -4
  252. package/static/const.js +404 -404
  253. package/static/globals.txt +74 -74
  254. package/static/layui/font/iconfont.svg +554 -554
  255. package/static/vue-py.js +37 -37
  256. package/static/wasm_exec.js +465 -465
  257. package/test/unit/.eslintrc +5 -5
  258. package/test/unit/TestUtil.js +35 -35
  259. package/test/unit/context.html +20 -20
  260. package/test/unit/index.js +13 -13
  261. package/test/unit/init.js +13 -13
  262. package/test/unit/karma.conf.js +50 -50
  263. package/test/unit/specs/App.spec.js +17 -17
  264. package/test/unit/specs/Test.spec.js +28 -28
  265. package/test/unit/specs/components/LoginApp.spec.js +21 -21
  266. package/test/unit/specs/sevices/ConfigService.spec.js +23 -23
  267. 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
+ })();