|
11 | 11 | return err;
|
12 | 12 | };
|
13 | 13 |
|
14 |
| -if (!globalThis.fs) { |
15 |
| -let outputBuf = ""; |
16 |
| -globalThis.fs = { |
17 |
| -constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1, O_DIRECTORY: -1 }, // unused |
18 |
| -writeSync(fd, buf) { |
19 |
| -outputBuf += decoder.decode(buf); |
20 |
| -const nl = outputBuf.lastIndexOf("\n"); |
21 |
| -if (nl != -1) { |
22 |
| -console.log(outputBuf.substring(0, nl)); |
23 |
| -outputBuf = outputBuf.substring(nl + 1); |
24 |
| -} |
25 |
| -return buf.length; |
26 |
| -}, |
27 |
| -write(fd, buf, offset, length, position, callback) { |
28 |
| -if (offset !== 0 || length !== buf.length || position !== null) { |
29 |
| -callback(enosys()); |
30 |
| -return; |
31 |
| -} |
32 |
| -const n = this.writeSync(fd, buf); |
33 |
| -callback(null, n); |
34 |
| -}, |
35 |
| -chmod(path, mode, callback) { callback(enosys()); }, |
36 |
| -chown(path, uid, gid, callback) { callback(enosys()); }, |
37 |
| -close(fd, callback) { callback(enosys()); }, |
38 |
| -fchmod(fd, mode, callback) { callback(enosys()); }, |
39 |
| -fchown(fd, uid, gid, callback) { callback(enosys()); }, |
40 |
| -fstat(fd, callback) { callback(enosys()); }, |
41 |
| -fsync(fd, callback) { callback(null); }, |
42 |
| -ftruncate(fd, length, callback) { callback(enosys()); }, |
43 |
| -lchown(path, uid, gid, callback) { callback(enosys()); }, |
44 |
| -link(path, link, callback) { callback(enosys()); }, |
45 |
| -lstat(path, callback) { callback(enosys()); }, |
46 |
| -mkdir(path, perm, callback) { callback(enosys()); }, |
47 |
| -open(path, flags, mode, callback) { callback(enosys()); }, |
48 |
| -read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, |
49 |
| -readdir(path, callback) { callback(enosys()); }, |
50 |
| -readlink(path, callback) { callback(enosys()); }, |
51 |
| -rename(from, to, callback) { callback(enosys()); }, |
52 |
| -rmdir(path, callback) { callback(enosys()); }, |
53 |
| -stat(path, callback) { callback(enosys()); }, |
54 |
| -symlink(path, link, callback) { callback(enosys()); }, |
55 |
| -truncate(path, length, callback) { callback(enosys()); }, |
56 |
| -unlink(path, callback) { callback(enosys()); }, |
57 |
| -utimes(path, atime, mtime, callback) { callback(enosys()); }, |
58 |
| -}; |
59 |
| -} |
| 14 | +// Use local variables instead of polluting the global namespace. |
| 15 | +// These will be captured by closures in the importObject. |
| 16 | +let outputBuf = ""; |
| 17 | +const fs = globalThis.fs || { |
| 18 | +constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1, O_DIRECTORY: -1 }, // unused |
| 19 | +writeSync(fd, buf) { |
| 20 | +outputBuf += decoder.decode(buf); |
| 21 | +const nl = outputBuf.lastIndexOf("\n"); |
| 22 | +if (nl != -1) { |
| 23 | +console.log(outputBuf.substring(0, nl)); |
| 24 | +outputBuf = outputBuf.substring(nl + 1); |
| 25 | +} |
| 26 | +return buf.length; |
| 27 | +}, |
| 28 | +write(fd, buf, offset, length, position, callback) { |
| 29 | +if (offset !== 0 || length !== buf.length || position !== null) { |
| 30 | +callback(enosys()); |
| 31 | +return; |
| 32 | +} |
| 33 | +const n = this.writeSync(fd, buf); |
| 34 | +callback(null, n); |
| 35 | +}, |
| 36 | +chmod(path, mode, callback) { callback(enosys()); }, |
| 37 | +chown(path, uid, gid, callback) { callback(enosys()); }, |
| 38 | +close(fd, callback) { callback(enosys()); }, |
| 39 | +fchmod(fd, mode, callback) { callback(enosys()); }, |
| 40 | +fchown(fd, uid, gid, callback) { callback(enosys()); }, |
| 41 | +fstat(fd, callback) { callback(enosys()); }, |
| 42 | +fsync(fd, callback) { callback(null); }, |
| 43 | +ftruncate(fd, length, callback) { callback(enosys()); }, |
| 44 | +lchown(path, uid, gid, callback) { callback(enosys()); }, |
| 45 | +link(path, link, callback) { callback(enosys()); }, |
| 46 | +lstat(path, callback) { callback(enosys()); }, |
| 47 | +mkdir(path, perm, callback) { callback(enosys()); }, |
| 48 | +open(path, flags, mode, callback) { callback(enosys()); }, |
| 49 | +read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, |
| 50 | +readdir(path, callback) { callback(enosys()); }, |
| 51 | +readlink(path, callback) { callback(enosys()); }, |
| 52 | +rename(from, to, callback) { callback(enosys()); }, |
| 53 | +rmdir(path, callback) { callback(enosys()); }, |
| 54 | +stat(path, callback) { callback(enosys()); }, |
| 55 | +symlink(path, link, callback) { callback(enosys()); }, |
| 56 | +truncate(path, length, callback) { callback(enosys()); }, |
| 57 | +unlink(path, callback) { callback(enosys()); }, |
| 58 | +utimes(path, atime, mtime, callback) { callback(enosys()); }, |
| 59 | +}; |
60 | 60 |
|
61 |
| -if (!globalThis.process) { |
62 |
| -globalThis.process = { |
63 |
| -getuid() { return -1; }, |
64 |
| -getgid() { return -1; }, |
65 |
| -geteuid() { return -1; }, |
66 |
| -getegid() { return -1; }, |
67 |
| -getgroups() { throw enosys(); }, |
68 |
| -pid: -1, |
69 |
| -ppid: -1, |
70 |
| -umask() { throw enosys(); }, |
71 |
| -cwd() { throw enosys(); }, |
72 |
| -chdir() { throw enosys(); }, |
73 |
| -} |
74 |
| -} |
| 61 | +const process = globalThis.process || { |
| 62 | +getuid() { return -1; }, |
| 63 | +getgid() { return -1; }, |
| 64 | +geteuid() { return -1; }, |
| 65 | +getegid() { return -1; }, |
| 66 | +getgroups() { throw enosys(); }, |
| 67 | +pid: -1, |
| 68 | +ppid: -1, |
| 69 | +umask() { throw enosys(); }, |
| 70 | +cwd() { throw enosys(); }, |
| 71 | +chdir() { throw enosys(); }, |
| 72 | +}; |
75 | 73 |
|
76 |
| -if (!globalThis.path) { |
77 |
| -globalThis.path = { |
78 |
| -resolve(...pathSegments) { |
79 |
| -return pathSegments.join("/"); |
80 |
| -} |
| 74 | +const path = globalThis.path || { |
| 75 | +resolve(...pathSegments) { |
| 76 | +return pathSegments.join("/"); |
81 | 77 | }
|
82 |
| -} |
| 78 | +}; |
83 | 79 |
|
84 | 80 | if (!globalThis.crypto) {
|
85 | 81 | throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");
|
|
221 | 217 | return this._inst.exports.testExport(a, b);
|
222 | 218 | }
|
223 | 219 |
|
224 |
| -const timeOrigin = Date.now() - performance.now(); |
| 220 | +const timeOrigin = Date.now() - globalThis.performance.now(); |
225 | 221 | this.importObject = {
|
226 | 222 | _gotest: {
|
227 | 223 | add: (a, b) => a + b,
|
|
264 | 260 | // func nanotime1() int64
|
265 | 261 | "runtime.nanotime1": (sp) => {
|
266 | 262 | sp >>>= 0;
|
267 |
| -setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000); |
| 263 | +setInt64(sp + 8, (timeOrigin + globalThis.performance.now()) * 1000000); |
268 | 264 | },
|
269 | 265 |
|
270 | 266 | // func walltime() (sec int64, nsec int32)
|
|
306 | 302 | // func getRandomData(r []byte)
|
307 | 303 | "runtime.getRandomData": (sp) => {
|
308 | 304 | sp >>>= 0;
|
309 |
| -crypto.getRandomValues(loadSlice(sp + 8)); |
| 305 | +globalThis.crypto.getRandomValues(loadSlice(sp + 8)); |
310 | 306 | },
|
311 | 307 |
|
312 | 308 | // func finalizeRef(v ref)
|
|
0 commit comments